概率图模型、HMM模型、MaxEnt模型、MEMM模型和CRF模型等

目录

概率图模型(Probabilistic Graphical Model)

有向概率图

无向概率图

HMM模型

MaxEnt模型

MEMM模型

 条件随机场(Conditional Random Field)

基本概念

参数化

一般CRF

扫描二维码关注公众号,回复: 10775779 查看本文章

总结

简单应用——基于CRF命名实体识别


        概率图模型(Probabilistic Graphical Model,PGM)、隐马尔科夫模型(Hidden Markov Model,HMM)、最大熵模型(Maximum Entropy Model,MaxEnt)、最大熵马尔科夫模型(Maximum Entropy Markov Model,MEMM)和条件随机场(Conditional Random Fields,CRF)之间有不可分割的联系,在翻阅了很多此类模型的文章后,有很多收获,但有些地方还一知半解,决定先记录。此文完成后,还是有很多细节不能让自己满意,但是知识的熟悉是循序渐进的,不是么,以后有新的理解再加入。遂成此文。

        我们从概率图模型说起。

概率图模型(Probabilistic Graphical Model

        这里提到的概率图模型实际是一类模型的总称,比如后面说到的HMM、CRF等都属于概率图模型,概率图模型的核心是概率图,而概率图是建立在图理论和概率理论两者之上的。对于不了解图理论的读者,我们有必要先认识一些关于图的基本概念。一个图G=<V,E>是由顶点集V=\{v_1,v_2,...,v_k\}和连接顶点的边(edge)的集合E\sqsubseteq V\times V构成。这里V是图G中顶点的集合,E是边的集合,连接两个顶点v_i,v_j的边一条边记作e_{ij}=(v_i,v_j)。根据图中的边是否有方向分为有向图和无向图,有向图根据是否含有环分为有向无环图和有向有环图。环是指从某个顶点出发按照边的方向可以再回到该顶点,无论是无向图,还是有向图,它们的边可以赋予一个权重值,所以又可以分为有权图和无权图。如图:

图(a)中的所有边都没有方向,是一个无向图。它有4个顶点V=\{v_1,v_2,v_3,v_4\}和4条边E=\{e_{12},e_{13},e_{24},e_{34}\},对于无向图来说,边e_{ij}e_{ji}是一个意思;

图(b)中含有有方向的边,是一个有向图,图中没有环,所以是一个有向无环图(DAG),顶点集V=\{v_1,v_2,v_3,v_4\},边集E=\{e_{12},e_{13},e_{24},e_{34}\},对于有向图来说,边e_{ij}e_{ji}就是两个意思了;

图(c)是一个有向图,而且含有环(比如从顶点v_1出发沿着v_2v_4v_3可以再次回到v_1),所以是一个有向有环图

图(d)是在无向图的基础之上,给图中的边赋予了一个数值(通常称为权重值),使用w表示,比如连接v_1v_2的边的权重值w_{12}=1000,所以是一个赋权无向图;

图(e)是在有向图的基础之上,给图中的边赋予了一个权重,比如连接v_1v_2的边的权重值w_{12}=0.1,所以是一个赋权有向图。

        下面来说概率图模型就容易理解些了,概率图模型是基于概率的一种图模型,所以说它是一种特殊的图。下面我们看看概率图模型特殊在哪里。如果图中的每个顶点都表示一个随机变量,而图中的一条边表示两个随机变量间存在依赖关系,这就得到了概率图。举个例子,比如现在有两个随机变量x,y,随机变量x表示天气情况,取值={下雨,晴天},y表示进行的活动,取值={外出,在家},而进行什么活动看天气情况而定。随机变量x的概率分布如下:

x 下雨 晴天
P(x) 0.6 0.4

随机变量y的概率分布如下:

y 外出 在家
P(y) 0.3 0.7

可以使用如下概率图表示:

看上去也没啥,不就是上面说的图么,确实是这样,不过不同的是,图中的每个顶点表示一个随机变量,边e_{xy}表示两个随机变量存在依赖关系。同样地,概率图根据随机变量间的依赖关系分为:有向概率图和无向概率图。有向概率图表示顶点之间的依赖关系是有因果关系的,而无向概率图表示顶点之间的依赖关系并没有因果关系,存在相互依赖关系。如图:

下面给出有向概率图和无向概率图的一般表述:

有向概率图

        一个有向无环图G=<V,E>,对于一个n元随机变量x=(x_1,x_2,...,x_n),使用顶点v_i表示随机变量x_i,边e_{ij}表示随机变量x_i和随机变量x_j之间具有概率因果关系,x_i是因,x_j为果,顶点集合记为V,边集合记为E,则G=<V,E>构成有向概率图,也称为贝叶斯网络(Bayesian network)。

        下面举个例子来理解下,考虑n元随机变量x=(x_1,x_2,...,x_n)的联合概率分布P(x_1,x_2,...,x_n),根据链式法则,有

P(x_1,x_2,...,x_n)=P(x_1)P(x_2|x_1)P(x_3|x_1,x_2)...P(x_n|x_1,...,x_{n-1})

上式就可以使用有n个顶点的概率图来表示,为了方便,我们取n=4,即

P(x_1,x_2,x_3,x_4)=P(x_1)P(x_2|x_1)P(x_3|x_1,x_2)P(x_4|x_1,x_2,x_3)

概率图如下:

再举个例子,如下:

P(x_1,x_2,x_3,x_4,x_5,x_6)=P(x_1)P(x_2)P(x_3|x_1)P(x_4|x_1,x_2)P(x_5|x_3,x_4)P(x_6|x_4)

对应的概率图如下:

通常情况下,如果x_1,x_2,x_3,x_4,x_5,x_6相互独立,联合概率可以写成给个随机变量的乘积,即:

P(x_1,x_2,x_3,x_4,x_5,x_6)=P(x_1)P(x_2)P(x_3)P(x_4)P(x_5)P(x_6)

如果他们不独立呢?比如:

P(x_1,x_2,x_3,x_4,x_5,x_6)=P(x_1)P(x_2)P(x_3|x_1)P(x_4|x_1,x_2)P(x_5|x_3,x_4)P(x_6|x_4)

但我们同样发现右边可以写成一些随机变量条件概率的乘积,类似地,我们说它们条件独立。比如x_3,x_4条件独立,记作x_3\perp x_4|\{x_1,x_2\},表示在x_1,x_2给定情况下,x_3,x_4独立。两个随机变量条件独立在概率图中没有边连接,否则存在边连接。

我们看个有趣的问题:假设有四个随机变量x_1,x_2,x_3,x_4,它们关系如下:

x_1\perp x_4|\{x_2,x_3\}x_2\perp x_3|\{x_1,x_4\}

我们发现使用一个有向无环图是无法表示上面的这个条件独立关系,如图:

图中使用两个有向无环图(DAG)分别表示了两个条件独立关系,无法在同一个有向无环图中表示,否则存在环。对此,有必要引入无向概率图模型(Undirected graphical models),也称为马尔科夫网络(Markov network)。这样上面的这个例子,可以使用如下无向概率图模型表示了:

这样就可以如下表述:

无向概率图

        对于一个n元随机变量X=(X_1,X_2,...,X_n),使用n个顶点分别表示这n个随机变量,边e_{ij}表示随机变量X_i和随机变量X_j之间具有的依赖关系,顶点集合记为V,边集合记为E,则G=<V,E>构成无向概率图,也称为马尔科夫网络(Markov network)

HMM模型

        隐马尔科夫模型,也是一个概率图模型,我们在《隐马尔可夫链真相——从理论证明、算法实现到实际应用》一文中已经详细介绍过。不再累述。这里给出HMM模型的概率图,如下:

也就是状态随机变量Y_i只依赖于前一个状态随机变量Y_{i-1},观测值随机变量X_i只依赖于当前状态随机变量Y_i

再介绍MEMM模型之前,我们介绍一个相关的模型——最大熵模型(MaxEnt),它基于最大熵原理。通过它可以解释为什么MEMM模型可以表示成指数形式,具体如下:

MaxEnt模型

        该模型可以使用GIS算法、IIS算法求解。以后有时间再补上,它说明了为什么MEMM模型可以写成指数形式。

MEMM模型

        在HMM模型中,当前的观测值X_i只依赖于当前的状态Y_i,也就是P(X_i|Y_{i}),而在MEMM模型中,当前的观测值X_i值不仅依赖于当前的状态Y_i,而且还依赖之前的状态Y_{i-1},也就是说X_i不仅和状态有关,而且和状态的转移有关。MEMM模型对应的概率图,如下:

仍然以词性标注为例。假设x=(x_1,x_2,...,x_m)是个定的句子,词性标注以后我s=(s_1,...,s_m),也就是每个词标注一个词性。

P(s_1,...,s_m|x)=\prod_{i=1}^{m}P(s_i|s_1,...,s_{i-1},x)=\prod_{i=1}^{m}P(s_i|s_{i-1},x)

为了容易看,上式可以把x去掉,式子第一步是基于条件概率的链式法则:

P(s_1,...,s_m)=P(s_1)P(s_2|s_1)P(s_3|s_1,s_2)...P(s_m|s_1,...,s_{m-1})

第二步是基于马尔科夫假设,即状态s_i只和s_{i-1}有关。

下面给定其中任意一项P(s_i|s_{i-1},x)的假设,如下:

P(s_i|s_{i-1},x)=\frac{1}{Z(i)}exp(\sum_{k}w_kf_k(s_{i-1},s_i,i,x))

这样

P(s_1,...,s_m|x)=\prod_{i=1}^{m}\frac{1}{Z(i)}exp(\sum_{k}w_kf_k(s_{i-1},s_i,i,x))

关于指数部分,后面在条件随机场再解释。特征函数f_k刻画了状态的局部特征(第i-1和第i个位置)。

 条件随机场(Conditional Random Field)

基本概念

        经常在很多地方看到这些概念:随机场、条件随机场、线性链条件随机场、马尔科夫条件随机场。关于他们并未找到充足的文献来支撑。本文给出作者的一个理解。本文根据这些概念的范围从大到小依次为:

随机场 \supset 条件随机场 \supset 线性链条件随机场 \supset 马尔科夫条件随机场

符号\supset表示包含的意思,也就是右边是左边的特例。即马尔科夫条件随机场是线性链条件随机场,线性链条件随机场是条件随机场,条件随机场是随机场。下面给出解释:

        随机场是指现在有若干个位置(概率图的顶点)组成的整体,当给每个位置按照某种概率分布随机赋予一个值后,这个整体就被称为随机场。

        随机场的这个说法是从一些文章中摘录过来的,大致理解是指:随机场和随机变量有关。具体不用理解太细,本文不关注。条件随机场是有文献依据的,如下:

        条件随机场是由John Lafferty、Andrew McCallum和Fernando C.N. Pereira在《Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data》一文中首次提出的,原文定义如下:

看完这段描述,我不知道说了啥。之后理解如下:

(1)首先X,Y都是随机向量,由随机变量构成,比如:

X=(X_1,X_2,...,X_n)Y=(Y_1,Y_2,...,Y_m)

m和n可以相同,也可以不同。比如对于词性标注,m=n,举个例子,对如下句子进行词性标注:

我是中国人

先分词得到:我/ 是/ 中国人/

这对应随机向量X=(X_1,X_2,X_3),每个X_i代表位置i出现的词,每个词的词性构成随机向量对应Y=(Y_1,Y_2,Y_3),每个Y_i表示X_i的词性(比如名次,动词,代词等)。因为在条件随机场中,通常X先给定的,所以在概率图中使用一个顶点表示。

(2)条件随机场对应的概率图G是一个无向图(也可以看成有向图,但是有向的部分不影响概率图,可忽略),如图:

X是随机向量,在图中使用一个顶点表示,它与每个随机变量Y_i使用有向边连接。每个随机变量Y_i使用一个顶点表示,它们之间如果有依赖,使用无向边连接(图中不好表示,所以未画出)。因为X对图不影响,所以任务G是一个无向概率图。

(3)定义中给出了概率图需要满足马尔科夫性质(Markov property),如下:

P(Y_v|X,Y_w,w\neq v)=P(Y_v|X,Y_w,w\sim v)

先看等式右边,w\sim v表示顶点Y_wY_v有连接,与Y_v有连接的Y_w,称为顶点Y_v的邻居,Y_v的所有邻居使用N(Y_v)表示,那这个条件概率就表示在给定XN(Y_v)的情况下,出现出现Y_v的概率,可等价记为:

P(Y_v|X,N(Y_v))

不是Y_v的那些顶点也构成一个集合记为\overline{N}(Y_v)

等式左边表示在给定随机向量X和随机向量Y中除去随机变量Y_v后的随机变量的情况下,出现Y_v的概率,实际就是:

P(Y_v|X,Y_1,...,Y_{v-1},Y_{v+1},...,Y_m)
等价于

P(Y_v|X,N(Y_v),\overline{N}(Y_v))

那定义中等式就等价于

P(Y_v|X,N(Y_v))=P(Y_v|X,N(Y_v),\overline{N}(Y_v))

这不就表明在给定领域N(Y_v)的情况下,Y_v\overline{N}(Y_v)无关么?也就是条件独立,使用之前说的条件独立记法就是

Y_v\perp\overline{N}(Y_v)|N(Y_v)

卧槽,我在想作者直接这么写,大家不就明白了吗?足以看出作者很有深度和风度。

所以马尔科夫性质可表述为:对于任何一个顶点Y_v,在给定它的邻居N(Y_v)情况下,与它的非邻居\overline{N}(Y_v)条件独立。

        特别地,如果随机向量X,Y的结构相同,也就是m=n,通常称为线性链条件随机场(Linear-chain Conditional Random Field),比如上面说的词性标注就是一个线性链条件随机场的例子。为啥称为线性链?我猜测是因为一个随机变量X_i对应一个随机变量Y_i

        马尔科夫随机场是指随机变量Y_i不仅和前一个随机变量Y_{i-1}有关,而且和后一个随机变量Y_{i+1}有关。用概率图表示就是:

如果没有特别说明,后面我们说到的条件随机场指的就是马尔科夫条件随机场了。

我整理它们的区别如下:

(1)随机场

随机场的随机变量可能很多,不仅仅只局限在X,Y,它对应一般的概率图;

(2)条件随机场

条件随机场中,随机变量为随机向量X,Y,两个随机向量的结构是否相同,不明确,Y_i之间关系不明确,而Y_i依赖X,它们之间存在有向边;

(3)线性链条件随机场

在条件随机场基础上明确随机向量X,Y具有相同的数据结构;

(4)马尔科夫条件随机场

在线性链条件随机场基础上,再明确Y_i之间关系为:Y_iY_{i-1}Y_{i+1}有关。

参数化

        如果条件随机场的概率图是一个树,根据随机场的基础理论,可以得到如下的结论:

P_{\theta}(\mathbf{y}|\mathbf{x})\propto exp(\sum_{e\in E,k}\lambda_kf_k(e,\mathbf{y|}_e,\mathbf{x})+ \sum_{v\in V,l}u_lg_l(v,\mathbf{y|}_v,\mathbf{x}))

这个到底怎么证明的,暂就不用深根刨地了,下面做些解释,帮助理解:

(1)\mathbf{x,y}是随机向量X,Y的某个取值,比如:\mathbf{x}=(x_1,x_2,...,x_n),\mathbf{y}=(y_1,...,y_m)

(2)\theta表示参数\lambda_k,u_l的集合;

(3)E, V分别表示条件随机场对应的概率图G=<V,E>的所有边集合和顶点集合;

(4)f_k表示与边有关的特征函数,g_l表示与顶点有关的特征函数,特征函数是一个二值函数,要么取0,要么取1,自个儿定义;

特征函数中\mathbf{y}|_e表示\mathbf{y}中与边e相关的那些分量集合,同理\mathbf{y}|_v表示\mathbf{y}中与顶点v相关的那些分量集合。特征函数怎么去呢?这里举个例子:

对于词性标注问题,如果单词X_i为大写,而且对应的词性Y_i为专有名词,假设这个特征是g_l,那么如下:

g_l=\left\{\begin{matrix} 1 &, &X_i=upper,Y_i=proper noun \\ 0& , & else \end{matrix}\right.

特征函数定义多个个,根据实际情况定。

(5)上面表示概率正比于一个指数,我们把这个比率加上,变成等式,如下:

P_{\theta}(\mathbf{y}|\mathbf{x})=\frac{1}{Z}exp(\sum_{e\in E,k}\lambda_kf_k(e,\mathbf{y|}_e,\mathbf{x})+ \sum_{v\in V,l}u_lg_l(v,\mathbf{y|}_v,\mathbf{x}))

Z是常数。

(6)f_kg_l是实现给定的,可以看成常数,这样指数里面的部分实际就是一个超平面,它可以取到任何一个实数,这样任意给定一个

P_{\theta}(\mathbf{y}|\mathbf{x})>0,总是能够找到参数\lambda_k,u_l使得上面这个等式成立。

        下面我们看下马尔科夫条件随机场的这个概率如何。如下:

P_{\theta}(\mathbf{y}|\mathbf{x})=\frac{1}{Z(\mathbf{x})}exp(\sum_{i ,k}\lambda_kt_k(y_{i-1},y_i,i,\mathbf{x})+ \sum_{i,l}u_lg_l(y_i,i,\mathbf{x}))

式子里面的各个参数不再解释,与上面类似。这里说明下Z(x),它是规范化因子,规范化啥呢?就是让概率之和为1,即\sum_{\mathbf{y}}P_{\theta}(\mathbf{y}|\mathbf{x})=1

上式两边对y求和得到

\sum_{\mathbf{y}}P_{\theta}(\mathbf{y}|\mathbf{x})=\sum_{\mathbf{y}}\frac{1}{Z(\mathbf{x})}exp(\sum_{i ,k}\lambda_kt_k(y_{i-1},y_i,i,\mathbf{x})+ \sum_{i,l}u_lg_l(y_i,i,\mathbf{x}))\\=\frac{1}{Z(\mathbf{x})}\sum_{\mathbf{y}}exp(\sum_{i ,k}\lambda_kt_k(y_{i-1},y_i,i,\mathbf{x})+ \sum_{i,l}u_lg_l(y_i,i,\mathbf{x}))=1

解得Z(\mathbf{x}),如下:

Z(\mathbf{x})=\sum_{\mathbf{y}}exp(\sum_{i ,k}\lambda_kt_k(y_{i-1},y_i,i,x)+ \sum_{i,l}u_lg_l(y_i,i,x))

\mathbf{x}是事先给定的,所以可以看成常数。这和sofmax函数有些类似,举个例子:

比如对于向量a=(1,2,3),怎么规范化呢,先变成指数a=(e^1,e^2,e^3),然后规范化a=(\frac{e^1}{e^1+e^2+e^3},\frac{e^2}{e^1+e^2+e^3},\frac{e^3}{e^1+e^2+e^3})

每个分量可以看成上面的概率P,Z(x)=\frac{1}{e^1+e^2+e^3}

下面举个例子,理解一下特征函数。还是以词性标注为例,假设给定一个分词后句子如下:

我/ 是/ 中国人/

即:x_1=我,x_2=是,x_3=中国人。为了简化假设只有两种词性{1(名词),2(动词)}。这样标注的话,总共有6中可能,我们来计算标注为122的非规范化的概率P(y_1=1,y_2=2,y_3=2|\mathbf{x})。首先我们需要人为设定一些特征。这里为了简化,t_kg_l分别只设定一个特征函数。如下:

t_1(y_{i-1}=1,y_i=2,i,x)=1,i=2,3            \lambda_1=0.5

g_1=g_1(y_1=1,x,1)=1,                              u_1=1

注意特征函数,我们只写出了取值为1的情况,其余情况值为0.

P(y_1=1,y_2=2,y_3=2|\mathbf{x})=exp(0.5*(1+1)+1*1)=e^2。这只是求出一种一种词性标记,可能还有其他的,哪种比较好呢?我们通常认为概率大的较好,也就是在句子中出现的可能越大。用数学表述,就是如下这样的优化问题:

                                                                                      arg \max_{\mathbf{y}}P(\mathbf{y}|\mathbf{x})

即:

                                                    arg \max_{\mathbf{y}}\frac{1}{Z(\mathbf{x})}exp(\sum_{i ,k}\lambda_kt_k(y_{i-1},y_i,i,\mathbf{x})+ \sum_{i,l}u_lg_l(y_i,i,\mathbf{x}))

与HMM模型中三个经典问题对应,CRF中也有这三个经典问题,分别如下:

(1)评估问题

给定条件概率P(\mathbf{y}|\mathbf{x}),计算概率P(y_i|\mathbf{x})P(y_{i-1},y_i|\mathbf{x})。利用前向后向算法求解。

(2)学习问题

给定训练数据X,对应标记数据Y,事先认为定义的一些特征函数,利用这些已知数据求解模型中的参数\theta。比如梯度下降法,牛顿法,拟牛顿法等可以求解。

(3)解码问题

已知第(2)个问题中已经学习好的模型,给定数据X,如何预测条件概率P(Y|X),也就是求解与与数据X对应的Y?使用viterbi算法。

参看HMM模型,关于具体的细节,有时间再补上。

一般CRF

        同样以词性标注为例。在CRF中,不像MEMM模型中使用指数函数刻画局部状态转移,在CRF中,使用指数函数刻画整体:

P(s|x)=\frac{1}{Z(x)}exp(\sum_kw_kf_k(x,s))

其中Z(x)=\sum_sexp(\sum_kw_kf_k(x,s))

而这里的特征函数f_k可以理解成局部特征函数的和,即

f_k(x,s)=\sum_i^mg_i(s_{j-1},s_j,j,x)

其中g_i(s_{j-1},s_j,j,x)就是MEMM模型中的局部特征函数。

总结

        到这,概率图模型、HMM模型、MaxEnt模型、MEMM模型和CRF模型介绍完了。我自己感觉都还是一头雾水。思考再三,还是总结下。

(1)概率图模型

        概率图模型是一类模型的总称,比如HMM模型时有向概率图模型,CRF模型是无向概率图模型,它是基于概率论和图论两大理论的,本文只给了一些基本概率,概率图有自己的一套理论体系,有兴趣可以学习。

(2)HMM模型

        它有两个重要假设:第一个是,当前状态只有前一个有关,第二是,当前观察值只有当前状态有关。前面画了HMM模型的概率图,它是有向概率图,箭头方向是如下流动的:从初始分布开始,根据初始分布先成第一个观察值,然后根据状态转移概率,得到第二个状态分布,依据分布生成第二个观测值,依次下去……

(3)MaxEnt模型

        该模型基于最大熵理论,得到了MEMM模型的指数形式表达。

(4)MEMM模型和CRF模型

        这两个模型都是使用指数形式表达,MEMM考虑局部特征,而CRF考虑整体特征。

简单应用——基于CRF地名识别

      这里使用CRF++工具来实现,具体查看网址https://taku910.github.io/crfpp,CRF++分别提供了Linux和Windows版本,个人建议使用Linux版本,我这为了简单,使用的是Windows版本。

1、下载安装CRF++

将下载的zip压缩文件,解压即可,解压后目录结构如下:

我这边解压在E盘,即E:\CRF++-0.58。

2、数据预处理

使用的训练数据如下:

先将数据按一定比例划分为训练数据和测试数据,比如预处理后的训练数据如下:

每一行都是一个token,对token进行标注,分别为B,M,E,S,O。分别表示:

B:地名的开始的字

M:地名中间的字

E:地名结尾的字

S:单独的字是一个地名

O:不是地名

3、使用CRF++需要事先定义模板

比如定义的模板如下:

它对应CRF的特征函数。

模板分为两类,一类是Unigram,以字母U开头,它是一元模型特征,对应单个字,另一类是Bigram ,以字母B开头,它是二元模型特征,对应当前输出token和前一个输出token的具体,具体可参见官网。

4、训练

使用训练数据和之前定义好的模板,执行行如下命令进行训练

crf_learn -f 4 -p 8 -c 3 template train.txt model

训练输出如下:

训练结束后,模型保存在model文件中。

5、对测试数据进行识别

接下来就可以使用之前训练好的模型model对测试数据进行地名识别了,执行如下命令:

crf_test -m model test.txt > test.rst

如图:

识别后的结果保存在test.rst文件中。

6、评估

使用test.txt测试数据(真实样本)和test.rst(预测样本)进行对比统计,计算正确率等。

发布了89 篇原创文章 · 获赞 79 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/L_15156024189/article/details/105025631