有向图和无向图
在正式进入Linear CRF的介绍之前,我们先来看一下有向图和无向图之间的区别
有向图
我们之前介绍了HMM模型,HMM模型就是一个有向图模型
如图,我们来看一下如何计算有向图的联合概率分布
p
(
a
,
b
,
c
,
d
,
e
)
=
p
(
a
∣
b
)
p
(
c
∣
b
,
d
,
e
)
∗
p
(
b
)
p
(
d
)
p
(
e
)
p(a,b,c,d,e)=p(a|b)p(c|b,d,e)*p(b)p(d)p(e)
p(a,b,c,d,e)=p(a∣b)p(c∣b,d,e)∗p(b)p(d)p(e)
很简单,只需要根据依赖关系即可。
无向图
我们需重点来看一下无向图,因为Linear CRF就是一个无向图模型。
如图所示,就是一个无向图,我们也来考虑如何计算它的条件概率分布。无向图模型中没有像有向图中一样的依赖关系,因此我们要自己定义一种计算方式。
团和极大团
在无向图模型中,我们定义一个概念叫做团(clique),每个团内部的节点必须是两两相连的,比如上图中的a,b,e就是一个团。
极大团的定义是,如果在当前的团中再加入任意一个节点都不构成团,那么这个团就是极大团。
势函数
对于每个团,我们定义一个或多个势函数
f
f
f,也可以叫做feature function,这些势函数就是用来描述这个团的特征。我们要求每个团的势函数必须是正值,因此,我们得到每个团的势函数为
ϕ
(
x
1
,
x
2
.
.
.
x
n
)
=
e
x
p
(
∑
i
w
i
f
i
)
\phi(x_1,x_2...x_n)=exp(\sum_{i}w_if_i)
ϕ(x1,x2...xn)=exp(i∑wifi)
有了上面两个概念,我们就可以计算无向图中的联合概率分布。无向图的联合概率分布是根据图中所有的极大团进行定义的,以上图为例
p
(
a
,
b
,
c
,
d
,
e
)
=
1
Z
ϕ
(
a
,
b
,
e
)
ϕ
(
b
,
c
,
e
)
ϕ
(
c
,
d
,
e
)
p(a,b,c,d,e)=\frac{1}{Z}\phi(a,b,e)\phi(b,c,e)\phi(c,d,e)
p(a,b,c,d,e)=Z1ϕ(a,b,e)ϕ(b,c,e)ϕ(c,d,e)
其中,Z是一个归一化项,也叫做partition function,
Z
=
∑
a
,
b
,
c
,
d
,
e
ϕ
(
a
,
b
,
e
)
ϕ
(
b
,
c
,
e
)
ϕ
(
c
,
d
,
e
)
Z=\sum_{a,b,c,d,e}\phi(a,b,e)\phi(b,c,e)\phi(c,d,e)
Z=∑a,b,c,d,eϕ(a,b,e)ϕ(b,c,e)ϕ(c,d,e)
有向图与无向图的联系
这张图对于理解HMM和CRF以及有向图和无向图帮助很大。横向比较可以看出,HMM实际上就是朴素贝叶斯模型在时间维度上的展开,而Linear CRF模型就是逻辑回归模型在时间序列上的展开;纵向比较可以看出,有向图模型通常与生成模型相关,而无向图模型通常与判别模型相关(当然,没有绝对性的关系)。
MEMM
MEMM实际上是HMM和CRF之间的一个小插曲。首先来说一下HMM的缺点:HMM在预测当前状态时只能看到当前时刻以及之前的观测序列信息,而实际上,比如在词性标注任务中,我们同样也需要当前时刻之后的信息。于是,MEMM模型被设计出来
如图所示,MEMM模型实际上是将箭头方向改变,并对条件概率进行建模,转化为判别模型。
但这个模型存在一个严重的问题就是label bias problem,简言之,就是由于局部归一化导致的预测偏差问题,在这里我们不做过多解释了。
Linear-Chain CRF
Linear-Chain CRF叫做线性链条件随机场,是一个无向图、判别式模型。我们首先来介绍Log Linear Model。
Log Linear Model
顾名思义,log linear model就是取完log以后是线性函数的模型,它的标准定义是
p
(
y
∣
x
;
w
)
=
e
x
p
∑
j
=
1
m
w
j
F
j
(
x
,
y
)
Z
(
x
;
w
)
p(y|x;w)=\frac{exp\sum_{j=1}^mw_jF_j(x,y)}{Z(x;w)}
p(y∣x;w)=Z(x;w)exp∑j=1mwjFj(x,y)
其中,
F
i
(
x
,
y
)
F_i(x,y)
Fi(x,y)就是我们的feature function,
w
w
w是模型参数。feature function定义的不同可以得到不同的模型,logistic regression就是log linear model, 我们首先来看多元逻辑回归是怎么得到的。
多元逻辑回归
定义 F j ( x , y ) = x i I ( y = c ) F_j(x,y)=x_iI(y=c) Fj(x,y)=xiI(y=c),其中 I ( y = c ) I(y=c) I(y=c)是一个indicator function,取值为0/1。下面我们通过一个例子来理解多元逻辑回归。
假设我们有三个类别1、2、3,特征向量 x ∈ R d x\in{R^d} x∈Rd。
当前的y=1时:
F
j
(
x
,
y
)
=
x
j
(
1
≤
j
≤
d
)
F_j(x,y)=x_j(1\le{j}\le{d})
Fj(x,y)=xj(1≤j≤d)
F j ( x , y ) = 0 ( d < j ≤ 3 d ) F_j(x,y)=0(d\lt{j}\le{3d}) Fj(x,y)=0(d<j≤3d)
当前的y=2时:
F
j
(
x
,
y
)
=
x
j
(
d
<
j
≤
2
d
)
F_j(x,y)=x_j(d\lt{j}\le{2d})
Fj(x,y)=xj(d<j≤2d)
F j ( x , y ) = 0 ( 1 < j ≤ d , 2 d < j ≤ 3 d ) F_j(x,y)=0(1\lt{j}\le{d},2d\lt{j}\le{3d}) Fj(x,y)=0(1<j≤d,2d<j≤3d)
当前的y=3时:
F
j
(
x
,
y
)
=
x
j
(
2
d
<
j
≤
3
d
)
F_j(x,y)=x_j(2d\lt{j}\le{3d})
Fj(x,y)=xj(2d<j≤3d)
F j ( x , y ) = 0 ( 1 < j ≤ d , d < j ≤ 2 d ) F_j(x,y)=0(1\lt{j}\le{d},d\lt{j}\le{2d}) Fj(x,y)=0(1<j≤d,d<j≤2d)
因此,我们将模型的参数分成三个部分,即:
w
(
1
)
=
(
w
1
,
w
2
.
.
.
.
.
.
w
d
)
w^{(1)}=(w_1,w_2......w_d)
w(1)=(w1,w2......wd)
w ( 2 ) = ( w d + 1 , w d + 2 . . . . . . w 2 d ) w^{(2)}=(w_{d+1},w_{d+2}......w_{2d}) w(2)=(wd+1,wd+2......w2d)
w ( 3 ) = ( w 2 d + 1 , w 2 d + 2 . . . . . . w 3 d ) w^{(3)}=(w_{2d+1},w_{2d+2}......w_{3d}) w(3)=(w2d+1,w2d+2......w3d)
于是,原来的条件概率分布我们就可以写作
p
(
y
=
1
∣
x
;
w
)
=
e
w
(
1
)
x
∑
i
=
1
3
e
w
(
i
)
x
p(y=1|x;w)=\frac{e^{w^{(1)}x}}{\sum_{i=1}^{3}e^{w^{(i)}x}}
p(y=1∣x;w)=∑i=13ew(i)xew(1)x
p ( y = 2 ∣ x ; w ) = e w ( 2 ) x ∑ i = 1 3 e w ( i ) x p(y=2|x;w)=\frac{e^{w^{(2)}x}}{\sum_{i=1}^{3}e^{w^{(i)}x}} p(y=2∣x;w)=∑i=13ew(i)xew(2)x
p ( y = 3 ∣ x ; w ) = e w ( 3 ) x ∑ i = 1 3 e w ( i ) x p(y=3|x;w)=\frac{e^{w^{(3)}x}}{\sum_{i=1}^{3}e^{w^{(i)}x}} p(y=3∣x;w)=∑i=13ew(i)xew(3)x
这就是多元的逻辑回归,而这个形式刚好就是我们的softmax函数。
条件随机场
条件随机场也是log linear model的一种,只是它的feature function与多元逻辑回归不同。在之前我们讲到过,Linear CRF可以看作是逻辑回归在时间序列上的展开,而且Linear CRF的极大团其实是
y
i
−
1
,
y
i
,
x
y_{i-1},y_i,x
yi−1,yi,x,因此我们可以将feature function改写为
e
x
p
∑
j
=
1
m
w
j
F
j
(
x
,
y
)
=
e
x
p
∑
j
=
1
m
w
j
∑
t
=
2
T
f
j
(
y
t
−
1
,
y
t
,
x
)
exp\sum_{j=1}^mw_jF_j(x,y)=exp\sum_{j=1}^mw_j\sum_{t=2}^Tf_j(y_{t-1},y_t,x)
expj=1∑mwjFj(x,y)=expj=1∑mwjt=2∑Tfj(yt−1,yt,x)
我们把式子整理一下,并令
g
t
(
y
t
−
1
,
y
t
)
=
∑
j
=
1
m
w
j
f
j
(
y
t
−
1
,
y
t
,
x
)
g_t(y_{t-1},y_t)=\sum_{j=1}^mw_jf_j(y_{t-1},y_t,x)
gt(yt−1,yt)=∑j=1mwjfj(yt−1,yt,x),于是:
e
x
p
∑
j
=
1
m
w
j
F
j
(
x
,
y
)
=
∑
t
=
2
T
g
t
(
y
t
−
1
,
y
t
)
exp\sum_{j=1}^mw_jF_j(x,y)=\sum_{t=2}^Tg_t(y_{t-1},y_t)
expj=1∑mwjFj(x,y)=t=2∑Tgt(yt−1,yt)
参数学习
对于CRF的参数学习问题,我们可以采取梯度下降法来做,那么接下来最重要的问题就是如何计算梯度。我们写出梯度表达式
∂
∂
w
j
l
o
g
p
(
y
∣
x
;
w
)
=
∂
∂
w
j
l
o
g
e
x
p
(
∑
j
=
1
m
w
j
F
j
(
x
,
y
)
)
Z
(
x
;
w
)
\frac{\partial}{\partial{w_j}}logp(y|x;w)=\frac{\partial}{\partial{w_j}}log\frac{exp(\sum_{j=1}^mw_jF_j(x,y))}{Z(x;w)}
∂wj∂logp(y∣x;w)=∂wj∂logZ(x;w)exp(∑j=1mwjFj(x,y))
= ∂ ∂ w j ( ∑ j = 1 m w j F j ( x , y ) − l o g Z ( x ; w ) ) =\frac{\partial}{\partial{w_j}}(\sum_{j=1}^mw_jF_j(x,y)-logZ(x;w)) =∂wj∂(j=1∑mwjFj(x,y)−logZ(x;w))
= F j ( x , y ) − 1 Z ( x ; w ) ∂ Z ( x ; w ) ∂ w j =F_j(x,y)-\frac{1}{Z(x;w)}\frac{\partial{Z(x;w)}}{\partial{w_j}} =Fj(x,y)−Z(x;w)1∂wj∂Z(x;w)
而我们知道
Z
(
x
;
w
)
=
∑
y
,
e
x
p
∑
j
=
1
m
w
j
F
j
(
x
,
y
,
)
Z(x;w)=\sum_{y^{,}}exp\sum_{j=1}^mw_jF_j(x,y^,)
Z(x;w)=∑y,exp∑j=1mwjFj(x,y,),于是就得到:
∂
Z
(
x
;
w
)
∂
w
j
=
∑
y
,
[
e
x
p
∑
j
=
1
m
w
j
F
j
(
x
,
y
,
)
]
F
j
(
x
,
y
,
)
\frac{\partial{Z(x;w)}}{\partial{w_j}}=\sum_{y^{,}}[exp\sum_{j=1}^mw_jF_j(x,y^,)]F_j(x,y^,)
∂wj∂Z(x;w)=y,∑[expj=1∑mwjFj(x,y,)]Fj(x,y,)
代入上式后得到:
=
F
j
(
x
,
y
)
−
∑
y
,
F
j
(
x
,
y
,
)
e
x
p
∑
j
=
1
m
w
j
F
j
(
x
,
y
,
)
Z
(
x
;
w
)
=F_j(x,y)-\sum_{y^,}F_j(x,y^,)\frac{exp\sum_{j=1}^mw_jF_j(x,y^,)}{Z(x;w)}
=Fj(x,y)−y,∑Fj(x,y,)Z(x;w)exp∑j=1mwjFj(x,y,)
= F j ( x , y ) − ∑ y , F j ( x , y , ) p ( y , ∣ x ; w ) =F_j(x,y)-\sum_{y^,}F_j(x,y^,)p(y^,|x;w) =Fj(x,y)−y,∑Fj(x,y,)p(y,∣x;w)
接下来,我们关注如何计算 Z ( x ; w ) Z(x;w) Z(x;w),答案还是前向后向算法
Forward Algorithm
与HMM中的前向算法类似,我们定义
α
t
(
v
)
\alpha_t(v)
αt(v)表示1~t时刻且第t时刻的标记为
v
v
v的score,则
α
t
+
1
(
v
)
=
∑
y
1
.
.
.
y
t
e
x
p
(
∑
i
=
2
t
g
i
(
y
i
−
1
,
y
i
)
+
g
t
+
1
(
y
t
,
v
)
)
\alpha_{t+1}(v)=\sum_{y_1...y_t}exp(\sum_{i=2}^tg_i(y_{i-1},y_i)+g_{t+1}(y_{t},v))
αt+1(v)=y1...yt∑exp(i=2∑tgi(yi−1,yi)+gt+1(yt,v))
= ∑ y t = u [ ∑ y 1 . . . y t − 1 e x p ( ∑ i = 2 t − 1 g i ( y i − 1 , y i ) + g t ( y t − 1 , u ) ) ] e x p ( g t + 1 ( u , v ) ) =\sum_{y_t=u}[\sum_{y_1...y_{t-1}}exp(\sum_{i=2}^{t-1}g_i(y_{i-1},y_i)+g_{t}(y_{t-1},u))]exp(g_{t+1}(u,v)) =yt=u∑[y1...yt−1∑exp(i=2∑t−1gi(yi−1,yi)+gt(yt−1,u))]exp(gt+1(u,v))
= ∑ u α t ( u ) e x p ( g t + 1 ( u , v ) ) =\sum_{u}\alpha_t(u)exp(g_{t+1(u,v)}) =u∑αt(u)exp(gt+1(u,v))
Backward Algorithm
定义
β
t
(
v
)
\beta_t(v)
βt(v)表示t~T时刻且第t时刻的标记为
v
v
v的score,则
β
t
(
v
)
=
∑
y
t
+
1
.
.
.
y
T
e
x
p
(
∑
i
=
t
+
2
T
g
i
(
y
i
−
1
,
y
i
)
+
g
t
+
1
(
v
,
y
t
+
1
)
)
\beta_t(v)=\sum_{y_{t+1}...y_T}exp(\sum_{i=t+2}^Tg_i(y_{i-1},y_i)+g_{t+1}(v,y_{t+1}))
βt(v)=yt+1...yT∑exp(i=t+2∑Tgi(yi−1,yi)+gt+1(v,yt+1))
= ∑ y t + 1 = u [ ∑ y t + 2 . . . y T e x p ( ∑ i = t + 3 T g i ( y i − 1 , y i ) + g t + 1 ( u , y t + 2 ) ) ] e x p ( g t ( v , u ) ) =\sum_{y_{t+1}=u}[\sum_{y_{t+2}...y_{T}}exp(\sum_{i=t+3}^{T}g_i(y_{i-1},y_i)+g_{t+1}(u,y_{t+2}))]exp(g_{t}(v,u)) =yt+1=u∑[yt+2...yT∑exp(i=t+3∑Tgi(yi−1,yi)+gt+1(u,yt+2))]exp(gt(v,u))
= ∑ u β t + 1 ( u ) e x p ( g t ( v , u ) ) =\sum_{u}\beta_{t+1}(u)exp(g_t(v,u)) =u∑βt+1(u)exp(gt(v,u))
有了前向后向算法,我们就可以计算下面三个量:
- Z ( x ; w ) = ∑ u α t ( u ) β t ( u ) Z(x;w)=\sum_{u}\alpha_t(u)\beta_t(u) Z(x;w)=∑uαt(u)βt(u)
- p ( y t = u ∣ x ; w ) = α t T ( u ) β t ( u ) Z ( x ; w ) p(y_t=u|x;w)=\frac{\alpha_t^T(u)\beta_t(u)}{Z(x;w)} p(yt=u∣x;w)=Z(x;w)αtT(u)βt(u)
- p ( y t − 1 = u , y t = v ∣ x ; w ) = α t T ( u ) e x p [ g t ( u , v ) ] β t ( u ) Z ( x ; w ) p(y_{t-1}=u, y_t=v|x;w)=\frac{\alpha_t^T(u)exp[g_t(u,v)]\beta_t(u)}{Z(x;w)} p(yt−1=u,yt=v∣x;w)=Z(x;w)αtT(u)exp[gt(u,v)]βt(u)
那么我们将得到的式子代入梯度式子,整理化简后可以得到:
∂
∂
w
j
l
o
g
p
(
y
∣
x
;
w
)
=
F
j
(
x
,
y
)
−
∑
t
=
2
T
∑
y
t
−
1
=
u
∑
y
t
=
v
f
j
(
u
,
v
,
x
)
α
t
T
(
u
)
e
x
p
[
g
t
(
u
,
v
)
]
β
t
(
u
)
Z
(
x
;
w
)
\frac{\partial}{\partial{w_j}}logp(y|x;w)=F_j(x,y)-\sum_{t=2}^T\sum_{y_{t-1}=u}\sum_{y_t=v}f_j(u,v,x)\frac{\alpha_t^T(u)exp[g_t(u,v)]\beta_t(u)}{Z(x;w)}
∂wj∂logp(y∣x;w)=Fj(x,y)−t=2∑Tyt−1=u∑yt=v∑fj(u,v,x)Z(x;w)αtT(u)exp[gt(u,v)]βt(u)
预测
预测问题和HMM模型一样,也采用Viterbi算法。定义 δ ( t , v ) \delta(t,v) δ(t,v)表示1~t时刻且第t时刻标记为 v v v的最大score
递推关系与前向算法类似:
δ
(
t
+
1
,
v
)
=
max
y
1
.
.
.
y
t
e
x
p
(
∑
i
=
2
t
g
i
(
y
i
−
1
,
y
i
)
+
g
t
+
1
(
y
t
,
v
)
)
\delta(t+1,v)=\max_{y_1...y_t}exp(\sum_{i=2}^tg_i(y_{i-1},y_i)+g_{t+1}(y_{t},v))
δ(t+1,v)=y1...ytmaxexp(i=2∑tgi(yi−1,yi)+gt+1(yt,v))
= max y t = u [ max y 1 . . . y t − 1 e x p ( ∑ i = 2 t − 1 g i ( y i − 1 , y i ) + g t ( y t − 1 , u ) ) ] e x p ( g t + 1 ( u , v ) ) =\max_{y_t=u}[\max_{y_1...y_{t-1}}exp(\sum_{i=2}^{t-1}g_i(y_{i-1},y_i)+g_{t}(y_{t-1},u))]exp(g_{t+1}(u,v)) =yt=umax[y1...yt−1maxexp(i=2∑t−1gi(yi−1,yi)+gt(yt−1,u))]exp(gt+1(u,v))
δ ( t + 1 , v ) = m a x y t = u δ ( t , u ) e x p ( g t + 1 ( u , v ) ) \delta(t+1,v)=max_{y_t=u}\delta(t,u)exp(g_{t+1}(u,v)) δ(t+1,v)=maxyt=uδ(t,u)exp(gt+1(u,v))
CRF的特征函数可以人工定义,现在的常用做法是用神经网络进行特征提取,然后用CRF得到输出,例如BiLSTM+CRF