同上一篇《以序列标注为例学习隐马尔可夫模型HMM》一样,仍旧以序列标注问题为例。
序列标注问题是给定一个序列
X
X
X,求一个函数
f
f
f,使得
X
X
X通过
f
f
f映射得到想要的序列
Y
Y
Y,即:
f
:
X
→
Y
f:X \rightarrow Y
f:X→Y
1.CRF基本假设
与HMM模型认为P(x,y)是转移概率和发射概率的乘积不同,CRF认为:
P
(
x
,
y
)
∝
e
x
p
(
ω
ϕ
(
x
,
y
)
)
P(x,y) \varpropto exp(\omega \phi(x,y))
P(x,y)∝exp(ωϕ(x,y))
其中
ω
\omega
ω 代表一个权重,
ϕ
(
x
,
y
)
\phi(x,y)
ϕ(x,y)是关于x,y序列的特征向量。由于
e
x
p
(
ω
ϕ
(
x
,
y
)
)
exp(\omega \phi(x,y))
exp(ωϕ(x,y))可以大于1,因此不能假设它等于这个概率,而是正比于概率。
因此:
P
(
y
∣
x
)
=
P
(
x
,
y
)
P
(
x
)
=
P
(
x
,
y
)
∑
y
′
P
(
x
,
y
)
=
e
x
p
(
ω
ϕ
(
x
,
y
)
)
/
R
∑
y
′
e
x
p
(
ω
ϕ
(
x
,
y
′
)
)
/
R
=
e
x
p
(
ω
ϕ
(
x
,
y
)
)
∑
y
′
e
x
p
(
ω
ϕ
(
x
,
y
′
)
)
P(y|x) = \frac{P(x,y)}{P(x)} = \frac{P(x,y)}{\sum_{y^{'}} P(x,y)} = \frac{exp(\omega\phi(x,y))/R}{\sum_{y^{'}}exp(\omega\phi(x,y^{'}))/R} = \frac{exp(\omega\phi(x,y))}{\sum_{y^{'}}exp(\omega\phi(x,y^{'}))}
P(y∣x)=P(x)P(x,y)=∑y′P(x,y)P(x,y)=∑y′exp(ωϕ(x,y′))/Rexp(ωϕ(x,y))/R=∑y′exp(ωϕ(x,y′))exp(ωϕ(x,y))
2.HMM和CRF本质相同
HMM和CRF模型的其实是同一个东西,可以认为CRF是HMM模型的另一种表示和训练方法,只是两者略有不同。
在HMM中:
P
(
x
,
y
)
=
P
(
y
1
∣
s
t
a
r
t
)
∏
l
=
1
L
−
1
P
(
y
l
+
1
)
P
(
y
L
∣
e
n
d
)
∏
l
=
1
L
P
(
x
L
∣
y
L
)
P(x,y) = P(y_1|start)\prod_{l=1}^{L-1}P(y_{l+1})P(y_L|end)\prod_{l=1}^LP(x_L|y_L)
P(x,y)=P(y1∣start)l=1∏L−1P(yl+1)P(yL∣end)l=1∏LP(xL∣yL)
对等式两边取log对数:
l
o
g
P
(
x
,
y
)
=
l
o
g
P
(
y
1
∣
s
t
a
r
t
)
+
∑
l
=
1
L
−
1
l
o
g
P
(
y
l
+
1
)
+
l
o
g
P
(
y
L
∣
e
n
d
)
+
∑
l
=
1
L
l
o
g
P
(
x
L
∣
y
L
)
logP(x,y) = logP(y_1|start)+\sum_{l=1}^{L-1}logP(y_{l+1})+logP(y_L|end)+\sum_{l=1}^LlogP(x_L|y_L)
logP(x,y)=logP(y1∣start)+l=1∑L−1logP(yl+1)+logP(yL∣end)+l=1∑LlogP(xL∣yL)
以
∑
l
=
1
L
l
o
g
P
(
x
L
∣
y
L
)
\sum_{l=1}^LlogP(x_L|y_L)
∑l=1LlogP(xL∣yL)为例:
∑
l
=
1
L
l
o
g
P
(
x
L
∣
y
L
)
=
∑
s
,
t
l
o
g
P
(
t
∣
s
)
×
N
s
,
t
(
x
,
y
)
\sum_{l=1}^LlogP(x_L|y_L) = \sum_{s,t}logP(t|s)\times N_{s,t}(x,y)
l=1∑LlogP(xL∣yL)=s,t∑logP(t∣s)×Ns,t(x,y)
即序列中标签序列元素
y
L
y_L
yL对应单词序列元素
x
L
x_L
xL的概率累加等于单词t被标记为标签s的概率乘以序列中单词t被标记为标签s的次数。
下例演示了该公式的一个实例:
l
o
g
P
(
x
,
y
)
logP(x,y)
logP(x,y)中其他公式同理可得:
因此
l
o
g
P
(
x
,
y
)
logP(x,y)
logP(x,y)可以写成:
其中紫色部分及代表1中的权重
ω
\omega
ω,红色部分代表1中关于x,y的特征向量
ϕ
(
x
,
y
)
\phi(x,y)
ϕ(x,y)。
3. CRF的训练
给定数据集
{
(
x
1
,
y
ˇ
1
)
,
(
x
2
,
y
ˇ
2
)
,
.
.
.
,
(
x
n
,
y
ˇ
n
)
}
\{(x^1,\check{y}^1),(x^2,\check{y}^2),...,(x^n,\check{y}^n)\}
{(x1,yˇ1),(x2,yˇ2),...,(xn,yˇn)},要训练
ω
∗
\omega^*
ω∗,使得
ω
∗
=
a
r
g
m
a
x
ω
O
(
ω
)
\omega^* = argmax_\omega O(\omega)
ω∗=argmaxωO(ω)
O
(
ω
)
=
∑
n
=
1
N
l
o
g
P
(
y
ˇ
n
∣
x
n
)
O(\omega) = \sum_{n=1}^N logP(\check{y}^n|x^n)
O(ω)=n=1∑NlogP(yˇn∣xn)
有1中: P ( y ∣ x ) = e x p ( ω ϕ ( x , y ) ) ∑ y ′ e x p ( ω ϕ ( x , y ′ ) ) P(y|x) =\frac{exp(\omega\phi(x,y))}{\sum_{y^{'}}exp(\omega\phi(x,y^{'}))} P(y∣x)=∑y′exp(ωϕ(x,y′))exp(ωϕ(x,y))
l
o
g
P
(
y
ˇ
n
∣
x
n
)
=
l
o
g
P
(
x
n
,
y
ˇ
n
)
−
l
o
g
∑
y
′
P
(
x
n
,
y
′
)
logP(\check{y}^n|x^n) = logP(x^n,\check{y}^n)-log\sum_{y^{'}}P(x^n,y^{'})
logP(yˇn∣xn)=logP(xn,yˇn)−logy′∑P(xn,y′)
也就是最大化我们序列中看到的标记,最小化那些不仅在正确序列中能看到,在其他可能的错误序列中也经常出现的标记。
计算梯度:
由于是最大化目标函数,因此是梯度上升而非梯度下降:
w
s
,
t
=
w
s
,
t
+
η
∂
O
(
ω
)
∂
ω
s
,
t
w_{s,t} = w_{s,t} + \eta \frac{\partial O(\omega)}{\partial\omega_{s,t}}
ws,t=ws,t+η∂ωs,t∂O(ω)
训练得到
ω
\omega
ω后
y
=
a
r
g
m
a
x
y
∈
Y
P
(
y
∣
x
)
=
a
r
g
m
a
x
y
∈
Y
P
(
x
,
y
)
=
a
r
g
m
a
x
y
∈
Y
ω
ϕ
(
x
,
y
)
y = argmax_{y\in Y}P(y|x) = argmax_{y\in Y}P(x,y) = argmax_{y\in Y}\omega \phi(x,y)
y=argmaxy∈YP(y∣x)=argmaxy∈YP(x,y)=argmaxy∈Yωϕ(x,y)
可以使用维特比算法得到最优序列。