无向概率图模型
无向图模型的边没有方向,仅仅代表两个事件有关联。

无向图模型将概率分解为所有最大团上的某种函数之积。
在图论中,最大团指的是满足所有节点相互连接的最大子图。因为最大团需要考虑所有变量,为此,无向图模型定义了一些虚拟的因子节点,每个因子节点只连接部分节点,组成更小的最大团。

蓝色虚线表示最大团,黑色方块表因子节点,圆圈则表示变量节点。
条件随机场
条件随机场( Conditional Random Field, CRF)是一种给定输入随机变量 x,求解条件概率 p(y| x) 的概率无向图模型。用于序列标注时,特例化为线性链( linear chain )条件随机场。此时,输人输出随机变量为等长的两个序列。
线性链条件随机场如下图所示:

每个 Xt 上方有 3 个灰色节点,代表 Xt 的 3 个特征,当然还可以是任意数量的特征,体现了特征的丰富性。黑色方块是因子节点,可以理解为一个特征函数 。其中仅仅利用了 Xt 和 Yt 的特征称作状态特征(s),利用了 Yt-1 的特征则称作转移特征(t)。
**状态特征(s)**是定义在Y节点上的节点特征函数,这类特征函数只和当前节点有关,记为:
sl(yi,x,i),l=1,2,...L
其中L是定义在该节点的节点特征函数的总个数,ii是当前节点在序列的位置。
**转移特征(t)**是定义在Y上下文的局部特征函数,这类特征函数只和当前节点和上一个节点有关,记为:
tk(yi−1,yi,x,i),k=1,2,...K
其中K是定义在该节点的局部特征函数的总个数,i是当前节点在序列的位置。之所以只有上下文相关的局部特征函数,没有不相邻节点之间的特征函数,是因为我们的linear-CRF满足马尔科夫性。
无论是节点特征函数还是局部特征函数,它们的取值只能是0或者1。即满足特征条件或者不满足特征条件。同时,我们可以为每个特征函数赋予一个权值,用以表达我们对这个特征函数的信任度。假设tk的权重系数是λk,sl的权重系数是μl,则linear-CRF由我们所有的tk,λk,s,μl共同决定。
此时我们得到了linear-CRF的参数化形式如下:
P(y∣x)=Z(x)1exp(i,k∑λktk(yi−1,yi,x,i)+i,l∑μlsl(yi,x,i))
其中,Z(x)为规范化因子:
Z(x)=y∑exp(i,k∑λktk(yi−1,yi,x,i)+i,l∑μlsl(yi,x,i))
回到特征函数本身,每个特征函数定义了一个linear-CRF的规则,则其系数定义了这个规则的可信度。所有的规则和其可信度一起构成了我们的linear-CRF的最终的条件概率分布。
CRF 实例
这里我们给出一个linear-CRF用于词性标注的实例,为了方便,我们简化了词性的种类。假设输入的都是三个词的句子,即X=(X1,X2,X3),输出为Y=(Y1,Y2,Y3),其中,Y∈{1(名词),2(动词)},则Y的可能输出序列 对应的线性链条件随机场结构 如下图所示:

给定取值为1的特征函数如下:
t1=t1(yi−1=1,yi=2,x,i),i=2,3,λ1=1t2=t2(y1=1,y2=1,x,2)λ2=0.5t3=t3(y2=2,y3=1,x,3)λ3=1t4=t4(y1=2,y2=1,x,2)λ4=1t5=t5(y2=2,y3=2,x,3)λ5=0.2s1=s1(y1=1,x,1)μ1=1s2=s2(yi=2,x,i),i=1,2,μ2=0.5s3=s3(yi=1,x,i),i=2,3,μ3=0.8s4=s4(y3=2,x,3)μ4=0.5
目标是求标记序列(y1=1,y2=2,y3=2)的非规范化概率。
简单解释上面的特征函数:
t2函数表示输入的第一个y必须是y1且等于1,第二个y必须是y2且为1。当输入的两个y满足这两个条件事,函数取值为1,否则取值为0(例如:t2(y1=1,y2=2,x,2)=0)。当t2取值为1时,t2对应的置信度为0.5。
t1函数表示输入的第一个y是1且第二个y是2时才取1,否则取0。t1取1时,则t1对应的概率为1。
s1函数表示输入的y必须是y1且等于1,此时s1的置信度为μ1。
其他的特征函数以此类推。
更具体的理解是:
t函数给定并约束了不同词性之间的转移概率,例如约定名词后接动词的概率为1,名词后面跟名词的概率为0.5;
s函数给定并约束了第i个位置为某个词性的概率,例如第一个字为名词的概率为1,第一个第二个字为动词的概率为0.5;
利用linear-CRF的参数化公式,我们有:
P(y∣x)∝exp[k=1∑5λki=2∑3tk(yi−1,yi,x,i)+l=1∑4μli=1∑3sl(yi,x,i)]
注意上面的式子中的i=2∑3和$ \sum\limits_{i=1}^3$,意味着所有的特征函数会遍历每一个可能的点和边。
带入(y1=1,y2=2,y3=2)后展开,得到:
P(y1=1,y2=2,y3=2∣x)∝exp(3.2)
线性链条件随机场的简化形式
假设我们有K1个转移特征t, K2个状态特征s,总共有K=K1+K2个特征。并且令:
fk(yi−1,yi,x,i)={tk(yi−1,yi,x,i),sl(yi,x,i),k=1,2,…,K1k=K1+l;l=1,2,…,K2
然后对两种特征函数在各个位置i求和,得到:
fk(y,x)=i=1∑nfk(yi−1,yi,x,i),k=1,2,…,K
同时我们也统一fk(yi−1,yi,x,i)对应的权重系数wk如下:
wk={λk,μl,k=1,2,…,K1k=K1+l;l=1,2,…,K2
于是条件随机场可以表示为
P(y∣x)Z(x)=Z(x)1expk=1∑Kwkfk(y,x)=y∑expk=1∑Kwkfk(y,x)
其中Z(x)为规范化因子。
若以w表示权值向量, 即
w=(w1,w2,…,wK)T
以F表示全局特征向量,即
F(y,x)=(f1(y,x),f2(y,x),…,fK(y,x))T
条件随机场可以表示成向量内积的形式
Pw(y∣x)Zw(x)=Zw(x)exp(w⋅F(y,x))=y∑exp(w⋅F(y,x))
以上便得到了向量形式的表示。
线性链条件随机场的矩阵形式
上面的表示形式还可以再加以整理,变为矩阵的形式。为此定义一个m×m的矩阵M,m为y所有可能状态的个数。M定义如下:
Mi(x)Mi(yi−1,yi)Wi(yi−1,yi∣x)=[Mi(yi−1,yi∣x)]=exp(Wi(yi−1,yi∣x))=k=1∑Kwkfk(yi−1,yi∣x)
Mi(x)是m×m的矩阵,对上文提到的实例而言,M为2x2的矩阵。角标i表示是第i个位置的矩阵。
Mi(yi−1,yi)是构成矩阵Mi(x)的元素,其在矩阵中的位置为:(yi−1,yi)。例如(yi−1=1,yi=2)表示是矩阵第一行,第二列的位置,且取值为:exp(Wi(yi−1=1,yi=2∣x))。
引入起点和终点状态标记y0=start=1,yn+1=end=1, 则有下图所示的状态路径:

这时Pw(y∣x)可以矩阵形式表示:
Pw(y∣x)=Zw(x)1i=1∏n+1Mi(yi−1,yi∣x)Zw(x)=(M1(x)M2(x)…Mn+1(x))start,stop
其中Zw(x)为规范化因子,是n+1个矩阵乘积结果在(start=1,stop=1)位置上的元素,也就是计算结果对应的矩阵在左上角位置的元素值。
为什么是n+1个矩阵?因为从start到stop之间有n+1=3+1=4个转移状态:
M1(y0,y1),M2(y1,y2),M3(y2,y3),M4(y3,y4)
回顾之前做的例题,有观测序列x,状态序列y,i=1,2,3,n=3,标记yi∈{1,2},假设y0=start=1,y4=stop=1,各个位置的随机矩阵(可以理解为状态转移矩阵)为:
M1(x)=[a110a120]M3(x)=[c11c21c12c22],M2(x)=[b11b21b12b22],M4(x)=[1100]
其中:
Mi(x)=[exp(k=1∑Kwkfk(yi−1,yi∣x))],i=1,2,…,n+1
例如M1(x):
M1(x)=⎣⎡a11=exp(∑k=1Kwkfk(y0=1,y1=1∣x))a21=exp(∑k=1Kwkfk(y0=2,y1=1∣x))a12=exp(∑k=1Kwkfk(y0=1,y1=2∣x))a22=exp(∑k=1Kwkfk(y0=2,y2=1∣x))⎦⎤
显然,a21,a22为0。
将上述矩阵相乘:
i=1∏4Mi(yi−1,yi∣x)
可以得到各个路径的非规范化概率为:
a11b11c11,a11b11c12,a11b12c21,a11b12c22,a12b21c11,a12b21c12,a12b22c21,a12b22c22,
规范化因子,即最终计算结果左上角的元素,为:
a11b11c11+a11b11c12+a11b12c21+a11b12c22+a12b21c11+a12b21c12+a12b22c21+a12b22c22
linear-CRF的三个基本问题
1,概率计算问题
即给定 linear-CRF的条件概率分布P(y|x), 在给定输入序列x和输出序列y时,计算条件概率P(yi∣x)和P(yi−1,yi∣x)以及对应的期望。
前向后向概率概述
要计算条件概率P(yi∣x)和P(yi−1,yi∣x),可以使用前向后向算法来完成。
前向概率
定义αi(yi∣x)表示序列位置i的标记是yi时,在位置i之前的部分标记序列的非规范化概率。
而我们在上面定义了:
Mi(yi−1,yi∣x)=exp(k=1∑Kwkfk(yi−1,yi,x,i))
用于计算在给定yi−1时,从yi−1转移到yi的非规范化概率。
那么在得知在位置i+1处标记为yi+1时,位置i+1之前的标记序列非规范化概率αi+1(yi+1∣x)的递推公式:
αi+1(yi+1∣x)=αi(yi∣x)Mi+1(yi+1,yi∣x)i=1,2,...,n+1
特别的,在起点处,我们令:
α0(y0∣x)={10y0=startelse
由于在位置i+1处,yi+1的可能取值有m种,我们用αi(x)表示这m个可能取值对应的前向向量:
αi(x)=(αi(yi=1∣x),αi(yi=2∣x),...αi(yi=m∣x))T
则递推公式可以表示为:
αi+1T(x)=αiT(x)Mi+1(x)
后向概率
同样定义βi(yi∣x)表示序列位置i的标记是yi时,在位置i之后的部分(i+1到n的部分)标记序列的非规范化概率。
那么在得知i+1处标记为y(i+1)时,位置i之后的部分标记序列的非规范化概率βi(yi∣x)的递推公式:
βi(yi∣x)=Mi+1(yi,yi+1∣x)βi+1(yi+1∣x)
特别的,在终点处定义:
βn+1(yn+1∣x)={10yn+1=stopelse
如果用向量表示则有:
βi(x)=Mi+1(x)βi+1(x)
规范化因子Z(x)的表达式为:
Z(x)=c=1∑mαn(yc∣x)=c=1∑mβ1(yc∣x)
向量化的表示为:
Z(x)=αnT(x)∙1=1T∙β1(x)
其中,1是m维全1向量。
前向后向概率计算
有了前向后向概率的定义和计算方法,我们就很容易计算序列位置i的标记是yi时的条件概率P(yi∣x):
P(yi∣x)=Z(x)αiT(yi∣x)βi(yi∣x)=αnT(x)∙1αiT(yi∣x)βi(yi∣x)
也容易计算序列位置i的标记是yi,位置i−1的标记是yi−1时的条件概率P(yi−1,yi∣x):
P(yi−1,yi∣x)=Z(x)αi−1T(yi−1∣x)Mi(yi−1,yi∣x)βi(yi∣x)=αnT(x)∙1αi−1T(yi−1∣x)Mi(yi−1,yi∣x)βi(yi∣x)
linear-CRF的期望计算
有了上一节计算的条件概率,我们也可以很方便的计算联合分布P(x,y)与条件分布P(y∣x)的期望。
特征函数fk(x,y)关于条件分布P(y∣x)的期望表达式是:
EP(y∣x)[fk]=EP(y∣x)[fk(y,x)]=i=1∑n+1yi−1yi∑P(yi−1,yi∣x)fk(yi−1,yi,x,i)=i=1∑n+1yi−1yi∑fk(yi−1,yi,x,i)αnT(x)∙1αi−1T(yi−1∣x)Mi(yi−1,yi∣x)βi(yi∣x)
同样可以计算联合分布P(x,y)的期望:
EP(x,y)[fk]=x,y∑P(x,y)i=1∑n+1fk(yi−1,yi,x,i)=x∑P(x)y∑P(y∣x)i=1∑n+1fk(yi−1,yi,x,i)=x∑P(x)i=1∑n+1yi−1yi∑fk(yi−1,yi,x,i)αnT(x)∙1αi−1T(yi−1∣x)Mi(yi−1,yi∣x)βi(yi∣x)
假设一共有K个特征函数,则k=1,2,...K。
2,学习问题
在linear-CRF模型参数学习问题中,我们给定训练数据集X和对应的标记序列Y,K个特征函数fk(x,y),需要学习linear-CRF的模型参数wk和条件概率Pw(y∣x),其中条件概率Pw(y∣x)和模型参数wk满足以下关系:
Pw(y∣x)=P(y∣x)=Zw(x)1expk=1∑Kwkfk(x,y)=y∑expk=1∑Kwkfk(x,y)expk=1∑Kwkfk(x,y)
所以我们的目标就是求出所有的模型参数wk,这样条件概率Pw(y∣x)可以从上式计算出来。
梯度下降法
在使用梯度下降法求解模型参数之前,我们需要定义我们的优化函数,一般极大化条件分布Pw(y∣x)的对数似然函数如下:
L(w)=logx,y∏Pw(y∣x)P(x,y)=x,y∑P(x,y)logPw(y∣x)
其中P(x,y)为经验分布,可以从先验知识和训练集样本中得到,这点和最大熵模型类似。为了使用梯度下降法,我们现在极小化f(w)=−L(Pw)如下:
f(w)=−x,y∑P(x,y)logPw(y∣x)=x,y∑P(x,y)logZw(x)−x,y∑P(x,y)k=1∑Kwkfk(x,y)=x∑P(x)logZw(x)−x,y∑P(x,y)k=1∑Kwkfk(x,y)=x∑P(x)logy∑expk=1∑Kwkfk(x,y)−x,y∑P(x,y)k=1∑Kwkfk(x,y)
对w求导可以得到:
∂w∂f(w)=x,y∑P(x)Pw(y∣x)f(x,y)−x,y∑P(x,y)f(x,y)
有了w的导数表达式,就可以用梯度下降法来迭代求解最优的w了。注意在迭代过程中,每次更新w后,需要同步更新Pw(x,y)以用于下一次迭代的梯度计算。
拟牛顿法
条件随机场模型的学习通过拟牛顿法进行。
CRF的模型:
P(y∣x)Z(x)=Z(x)1expi=1∑nwifi(y,x)=y∑expi=1∑nwifi(y,x)
已知训练数据的经验概率分布P(x,y),条件概率分布的对数似然函数表示为:
LP(Pw)=logx,y∏P(y∣x)P(x,y)=x,y∑P(x,y)logP(y∣x)
所以
LP(Pw)=x,y∑P(x,y)logP(y∣x)=x,y∑P(x,y)i=1∑nwifi(x,y)−x,y∑P(x,y)log(Zw(x))=x,y∑P(x,y)i=1∑nwifi(x,y)−x,y∑P(x)P(y∣x)log(Zw(x))=x,y∑P(x,y)i=1∑nwifi(x,y)−x∑P(x)log(Zw(x))y∑P(y∣x)=x,y∑P(x,y)i=1∑nwifi(x,y)−x∑P(x)log(Zw(x))
以上推导用到了y∑P(y∣x)=1
要极大化似然函数,即极小化−LP(Pw)。
所以学习的优化目标是:
w∈Rnminf(w)=x∑P(x)logy∑exp(i=1∑nwifi(y,x))−x,y∑P(x,y)i=1∑nwifi(x,y)
其梯度函数是
g(w)=(∂w1∂f(w),∂w2∂f(w),…∂wn∂f(w))T
其中:
∂wi∂f(w)=x,y∑P(x)Pw(y∣x)fi(y,x)−x,y∑P(x,y)fi(x,y)
向量化:
∂w∂f(w)=x,y∑P(x)Pw(y∣x)f(y,x)−x,y∑P(x,y)f(x,y)
条件随机场学习的BFGS算法:
输入:特征函数f1,f2,…,fn ;经验分布P(x,y);
输出:最优参数w^ ; 最优模型Pw(y∣x) 。
(1)选定初始点w(0) 取 B0 为正定对称矩阵,k=0。
(2)计算gk=g(w(k)) 。若gk=0 则停止计算,否则转(3)。
(3)由Bkpk=−gk 求出pk
(4)一维搜索:求λk 使得:
f(w(k)+λkpk)=λ≥0minf(w(k)+λpk)
(5)置 w(k+1)=w(k)+λkpk
(6)计算 gk+1=g(w(k+1)) ,若gk+1=0 ,则停止计算,否则,按下式更新Bk+1:
Bk+1=Bk+ykTδkykykT−δkTBkδkBkδkδkTBk
其中:
yk=gk+1−gk,δk=w(k+1)−wk
(7)置 k=k+1 , 转(3)
3,预测问题
维特比算法解码思路
预测问题也可以理解为解码问题:给定条件随机场的条件概率P(y∣x)和一个观测序列x,要求出满足P(y∣x)最大的序列y。这个解码算法最常用的还是和HMM解码类似的维特比算法。
对于我们linear-CRF中的维特比算法,我们定义一个局部状态δi(l),表示在位置i标记l各个可能取值(1,2…m)对应的非规范化概率的最大值。之所以用非规范化概率是,规范化因子Z(x)不影响最大值的比较。根据δi(l)的定义,我们递推在位置i+1标记l的表达式为:
δi+1(l)=1≤j≤mmax{δi(j)+k=1∑Kwkfk(yi=j,yi+1=l,x,i)},l=1,2,...m
我们需要用另一个局部状态Ψi+1(l)来记录使δi+1(l)达到最大的位置i的标记取值,这个值用来最终回溯最优解,Ψi+1(l)的递推表达式为:
Ψi+1(l)=arg1≤j≤mmax{δi(j)+k=1∑Kwkfk(yi=j,yi+1=l,x,i)},l=1,2,...m
维特比算法流程
linear-CRF模型维特比算法流程:
输入:模型的K个特征函数,和对应的K个权重。观测序列x=(x1,x2,...xn),可能的标记个数m
输出:最优标记序列y∗=(y1∗,y2∗,...yn∗)
具体而言:
1,初始化:
δ1(l)=k=1∑Kwkfk(y0=start,y1=l,x,i)},l=1,2,...mΨ1(l)=start,l=1,2,...m
2,对于i=1,2...n−1进行递推:
δi+1(l)=1≤j≤mmax{δi(j)+k=1∑Kwkfk(yi=j,yi+1=l,x,i)},l=1,2,...m
Ψi+1(l)=arg1≤j≤mmax{δi(j)+k=1∑Kwkfk(yi=j,yi+1=l,x,i)},l=1,2,...m
3,i迭代到n-1时停止:
yn∗=arg1≤j≤mmaxδn(j)
4,回溯:
yi∗=Ψi+1(yi+1∗),i=n−1,n−2,...1
最终得到的标记序列为:
y∗=(y1∗,y2∗,...yn∗)
linear-CRF模型维特比算法实例
假设输入的都是三个词的句子,即X=(X1,X2,X3),输出的词性标记为Y=(Y1,Y2,Y3),其中Y∈{1(名词),2(动词)}。
这里只标记出取值为1的特征函数如下:
t1=t1(yi−1=1,yi=2,x,i),i=2,3,λ1=1t2=t2(y1=1,y2=1,x,2)λ2=0.6t3=t3(y2=2,y3=1,x,3)λ3=1t4=t4(y1=2,y2=1,x,2)λ4=1t5=t5(y2=2,y3=2,x,3)λ5=0.2s1=s1(y1=1,x,1)μ1=1s2=s2(yi=2,x,i),i=1,2,μ2=0.5s3=s3(yi=1,x,i),i=2,3,μ3=0.8s4=s4(y3=2,x,3)μ4=0.5
求标记(1,2,2)的最可能的标记序列。
首先初始化:
δ1(1)=μ1s1=1δ1(2)=μ2s2=0.5Ψ1(1)=Ψ1(2)=start
接下来开始递推,先看位置2的:
δ2(1)=max{δ1(1)+t2λ2+μ3s3,δ1(2)+t4λ4+μ3s3}=max{1+0.6+0.8,0.5+1+0.8}=2.4
Ψ2(1)=1
δ2(2)=max{δ1(1)+t1λ1+μ2s2,δ1(2)+μ2s2}=max{1+1+0.5,0.5+0.5}=2.5
Ψ2(2)=1
再看位置3的:
δ3(1)=max{δ2(1)+μ3s3,δ2(2)+t3λ3+μ3s3}=max{2.4+0.8,2.5+1+0.8}=4.3
Ψ3(1)=2
δ3(2)=max{δ2(1)+t1λ1+μ4s4,δ2(2)+t5λ5+μ4s4}=max{2.4+1+0.5,2.5+0.2+0.5}=3.9
Ψ3(2)=1
最终得到y3∗=argmax{δ3(1),δ3(2)}递推回去,得到:
y2∗=Ψ3(1)=2y1∗=Ψ2(2)=1
即最终的结果为(1,2,1),即标记为(名词,动词,名词)。
参考文章:
《统计学习方法 第二版》
条件随机场CRF(一)从随机场到线性链条件随机场
条件随机场CRF(二) 前向后向算法评估标记序列概率
条件随机场CRF(三) 模型学习与维特比算法解码