1适用场景
CRF是用于序列标注的模型,区别于其他算法对一个随机变量建模,CRF是对一组随机变量的联合概率分布进行建模。
2算法原理
CRF做了一下假设:
1假设联合概率分布是指数族分布
p
(
y
1
,
y
2
,
.
.
.
,
y
n
∣
X
)
=
1
Z
(
x
)
e
x
p
(
f
(
y
1
,
y
2
,
.
.
.
,
y
n
;
X
)
)
p(y_1,y_2,...,y_n|X)=\frac{1}{Z(x)}exp(f(y_1,y_2,...,y_n;X))
p(y1,y2,...,yn∣X)=Z(x)1exp(f(y1,y2,...,yn;X))
2成对/局部/全局马尔科夫假设
先给出一些概念定义
(1)如果联合概率分布 p ( Y ) p(Y) p(Y)满足成对/局部/全局马尔科夫性,则称该联合分布为概率无向图模型,或马尔科夫随机场。
(2)马尔科夫随机场的因子分解:概率无向图(马尔科夫随机场)的概率分布可表示为最大团上的随机变量函数乘积的形式(由Hammersley-Clifford定理保证)。
(3)在给定随机变量 X X X的情况下,随机变量 Y Y Y的马尔科夫随机场称为条件随机场。
一般常用的是用于序列标注的线性链条件随机场。每两个相邻节点构成极大团。根据线性链条件随机场的因子分解,可将联合概率分布表示为:
p
(
y
1
,
y
2
,
.
.
.
,
y
n
∣
x
)
=
1
Z
(
x
)
e
x
p
(
∑
i
=
1
n
−
1
(
h
(
y
i
;
x
)
+
g
(
y
i
,
y
i
+
1
;
x
)
+
h
(
y
n
;
x
)
)
p(y_1,y_2,...,y_n|x)=\frac{1}{Z(x)}exp(\sum_{i=1}^{n-1}(h(y_i;x)+g(y_i,y_{i+1};x)+h(y_n;x))
p(y1,y2,...,yn∣x)=Z(x)1exp(i=1∑n−1(h(yi;x)+g(yi,yi+1;x)+h(yn;x))
一般将CRF用于神经网络中时,为简化在
g
(
y
i
,
y
i
+
1
;
x
)
g(y_i,y_{i+1};x)
g(yi,yi+1;x)中不考虑x的影响。即:
p
(
y
1
,
y
2
,
.
.
.
,
y
n
∣
x
)
=
1
Z
(
x
)
e
x
p
(
∑
i
=
1
n
−
1
(
h
(
y
i
;
x
)
+
g
(
y
i
,
y
i
+
1
)
+
h
(
y
n
;
x
)
)
p(y_1,y_2,...,y_n|x)=\frac{1}{Z(x)}exp(\sum_{i=1}^{n-1}(h(y_i;x)+g(y_i,y_{i+1})+h(y_n;x))
p(y1,y2,...,yn∣x)=Z(x)1exp(i=1∑n−1(h(yi;x)+g(yi,yi+1)+h(yn;x))
其中:
h ( y i ; x ) h(y_i;x) h(yi;x)发射得分由神经网络(多分类)给出,网络考虑X的上下文给出每一个时刻的标签。
g ( y i , y i + 1 ) g(y_i,y_{i+1}) g(yi,yi+1)转移得分由CRF给出,CRF考虑标签label的上下文。
3算法优化
用对数似然作为损失函数,然后可以使用梯度下降进行优化。
L
L
(
θ
)
=
−
∑
j
=
i
N
l
o
g
p
(
y
1
j
,
y
2
j
,
.
.
.
,
y
n
j
∣
x
)
=
−
∑
i
=
1
N
[
∑
i
=
1
n
−
1
(
h
(
y
i
j
;
x
)
+
g
(
y
i
j
,
y
i
+
1
j
)
+
h
(
y
n
j
;
x
)
)
+
l
o
g
Z
(
x
)
]
LL(\theta)=-\sum_{j=i}^N\mathop{log}p(y_1^j,y_2^j,...,y_n^j|x)\\ =-\sum_{i=1}^N[\sum_{i=1}^{n-1}(h(y_i^j;x)+g(y_i^j,y_{i+1}^j)+h(y_n^j;x))+\mathop{logZ(x)}]
LL(θ)=−j=i∑Nlogp(y1j,y2j,...,ynj∣x)=−i=1∑N[i=1∑n−1(h(yij;x)+g(yij,yi+1j)+h(ynj;x))+logZ(x)]
这个Loss函数的难点在于计算归一化因为Z(x)上。因为联合概率共有
K
n
K^n
Kn种可能(K是y可能取值的个数,n是序列长度)。一般使用动态规划将其复杂度降为
n
K
2
nK^2
nK2。
3.1 归一化因子的计算
归一化因子Z(x)共有 K n K^n Kn可能,计算复杂,但是由于只考虑相邻节点的联系,所以可以递推的算出Z(x)。具体过程如下:
(1)计算 Z 0 Z_0 Z0递推出 Z 1 Z_1 Z1,然后一次递推出 Z 2 , Z 3 , . . . , Z n Z_2,Z_3,...,Z_n Z2,Z3,...,Zn。
(2) Z 0 = Z 0 1 + Z 0 2 + Z 0 3 + . . . + Z 0 k Z_0=Z_0^1+Z_0^2+Z_0^3+...+Z_0^k Z0=Z01+Z02+Z03+...+Z0k。 Z i Z_i Zi每一个时刻是对其每一种可能取值计算后求和。
(3) Z i j Z_i^j Zij的计算。
根据对CRF的定义。已知
Z
t
Z_t
Zt,具有以下递推关系
Z
t
+
1
1
=
(
Z
t
0
G
11
+
Z
t
1
G
21
+
.
.
.
+
Z
t
k
G
k
1
)
H
t
+
1
(
1
∣
x
)
Z
t
+
1
2
=
(
Z
t
0
G
12
+
Z
t
1
G
22
+
.
.
.
+
Z
t
k
G
k
2
)
H
t
+
1
(
2
∣
x
)
.
.
.
Z
t
+
1
k
=
(
Z
t
0
G
1
k
+
Z
t
1
G
2
k
+
.
.
.
+
Z
t
k
G
k
k
)
H
t
+
1
(
k
∣
x
)
Z_{t+1}^1=(Z_t^0G_{11}+Z_t^1G_{21}+...+Z_t^kG_{k1})H_{t+1}(1|x)\\ Z_{t+1}^2=(Z_t^0G_{12}+Z_t^1G_{22}+...+Z_t^kG_{k2})H_{t+1}(2|x)\\ ...\\ Z_{t+1}^k=(Z_t^0G_{1k}+Z_t^1G_{2k}+...+Z_t^kG_{kk})H_{t+1}(k|x)
Zt+11=(Zt0G11+Zt1G21+...+ZtkGk1)Ht+1(1∣x)Zt+12=(Zt0G12+Zt1G22+...+ZtkGk2)Ht+1(2∣x)...Zt+1k=(Zt0G1k+Zt1G2k+...+ZtkGkk)Ht+1(k∣x)
G
G
G是kxk的状态转移矩阵,
G
i
j
G_{ij}
Gij代表从状态i转移到状态j的得分(注意区别于hmm不是概率)。
Z
t
=
[
Z
t
1
,
Z
t
2
,
Z
t
3
,
.
.
.
,
Z
t
k
]
Z_t=[Z_t^1,Z_t^2,Z_t^3,...,Z_t^k]
Zt=[Zt1,Zt2,Zt3,...,Ztk]代表在递推过程中t时刻计算的结果(行向量)。
H
t
+
1
=
[
H
t
+
1
(
1
∣
x
)
,
H
t
+
1
(
1
∣
x
)
,
.
.
.
,
H
t
+
1
(
1
∣
x
)
]
H_{t+1}=[H_{t+1}(1|x),H_{t+1}(1|x),...,H_{t+1}(1|x)]
Ht+1=[Ht+1(1∣x),Ht+1(1∣x),...,Ht+1(1∣x)]代表t+1时刻各状态可能取值的得分(行向量)。那么以上的递推关系可以用矩阵形式表示
Z
t
+
1
=
Z
t
G
⊗
H
t
+
1
(
y
∣
x
)
Z_{t+1}=Z_tG{\otimes}H_{t+1}(y|x)
Zt+1=ZtG⊗Ht+1(y∣x)
按以上递推关系依次计算
Z
1
,
Z
2
,
.
.
.
,
Z
n
Z_1,Z_2,...,Z_n
Z1,Z2,...,Zn,然后对最后的
Z
n
Z_n
Zn各分量求和即得到最终的结果
3.2类比softmax多分类
4其他
模型预测:使用维特比算法。