上篇博文介绍了CRF的标记序列的概率计算,本片博文专注于CRF的参数学习问题和序列解码问题。
CRF模型参数学习思路
在CRF模型参数学习问题中,我们给定训练数据集
X
X
X和对应的标记序列
Y
Y
Y,
K
K
K个特征函数
f
k
(
x
,
y
)
f_k(x,y)
fk(x,y),需要学习CRF的模型参数
w
k
w_k
wk和条件概率
P
w
(
y
∣
x
)
P_w(y|x)
Pw(y∣x)其中条件概率
P
w
(
y
∣
x
)
P_w(y|x)
Pw(y∣x)和模型参数
w
k
w_k
wk满足一下关系:
P
w
(
y
∣
x
)
=
P
(
y
∣
x
)
=
1
Z
w
(
x
)
e
x
p
∑
k
=
1
K
w
k
f
k
(
x
,
y
)
=
e
x
p
∑
k
=
1
K
w
k
f
k
(
x
,
y
)
∑
y
e
x
p
∑
k
=
1
K
w
k
f
k
(
x
,
y
)
P_w(y|x) = P(y|x) = \frac{1}{Z_w(x)}exp\sum\limits_{k=1}^Kw_kf_k(x,y) = \frac{exp\sum\limits_{k=1}^Kw_kf_k(x,y)}{\sum\limits_{y}exp\sum\limits_{k=1}^Kw_kf_k(x,y)}
Pw(y∣x)=P(y∣x)=Zw(x)1expk=1∑Kwkfk(x,y)=y∑expk=1∑Kwkfk(x,y)expk=1∑Kwkfk(x,y)
所以我们的目标就是求出所有的模型参数
w
k
w_k
wk,这样条件概率
P
w
(
y
∣
x
)
P_w(y|x)
Pw(y∣x)可以从上式计算出来。求解这个问题有很多思路,比如梯度下降法,牛顿法,拟牛顿法,下面我们只简要介绍用梯度下降法的求解思路。
CRF模型参数学习之梯度下降法求解
在使用梯度下降法求解模型参数之前,我们需要定义我们的优化函数,一般极大化条件分布
P
w
(
y
∣
x
)
P_w(y|x)
Pw(y∣x)的对数似然函数如下:
L
(
w
)
=
l
o
g
∏
x
,
y
P
w
(
y
∣
x
)
P
‾
(
x
,
y
)
=
∑
x
,
y
P
‾
(
x
,
y
)
l
o
g
P
w
(
y
∣
x
)
L(w)= log\prod_{x,y}P_w(y|x)^{\overline{P}(x,y)} = \sum\limits_{x,y}\overline{P}(x,y)logP_w(y|x)
L(w)=logx,y∏Pw(y∣x)P(x,y)=x,y∑P(x,y)logPw(y∣x) 其中,
P
‾
(
x
,
y
)
\overline{P}(x,y)
P(x,y)为经验分布,可以从先验知识和训练集样本中得到,为了使用梯度下降法,我们现在极小化
f
(
w
)
=
−
L
(
P
w
)
f(w) = -L(P_w)
f(w)=−L(Pw),具体求解如下:
f
(
w
)
=
−
∑
x
,
y
P
‾
(
x
,
y
)
l
o
g
P
w
(
y
∣
x
)
=
∑
x
,
y
P
‾
(
x
,
y
)
l
o
g
Z
w
(
x
)
−
∑
x
,
y
P
‾
(
x
,
y
)
∑
k
=
1
K
w
k
f
k
(
x
,
y
)
=
∑
x
P
‾
(
x
)
l
o
g
Z
w
(
x
)
−
∑
x
,
y
P
‾
(
x
,
y
)
∑
k
=
1
K
w
k
f
k
(
x
,
y
)
=
∑
x
P
‾
(
x
)
l
o
g
∑
y
e
x
p
∑
k
=
1
K
w
k
f
k
(
x
,
y
)
−
∑
x
,
y
P
‾
(
x
,
y
)
∑
k
=
1
K
w
k
f
k
(
x
,
y
)
\begin{aligned}f(w) & = -\sum\limits_{x,y}\overline{P}(x,y)logP_w(y|x) \\ &= \sum\limits_{x,y}\overline{P}(x,y)logZ_w(x) - \sum\limits_{x,y}\overline{P}(x,y)\sum\limits_{k=1}^Kw_kf_k(x,y) \\& = \sum\limits_{x}\overline{P}(x)logZ_w(x) - \sum\limits_{x,y}\overline{P}(x,y)\sum\limits_{k=1}^Kw_kf_k(x,y) \\& = \sum\limits_{x}\overline{P}(x)log\sum\limits_{y}exp\sum\limits_{k=1}^Kw_kf_k(x,y) - \sum\limits_{x,y}\overline{P}(x,y)\sum\limits_{k=1}^Kw_kf_k(x,y) \end{aligned}
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
w求导可以得到:
∂
f
(
w
)
∂
w
=
∑
x
,
y
P
‾
(
x
)
P
w
(
y
∣
x
)
f
(
x
,
y
)
−
∑
x
,
y
P
‾
(
x
,
y
)
f
(
x
,
y
)
\frac{\partial f(w)}{\partial w} = \sum\limits_{x,y}\overline{P}(x)P_w(y|x)f(x,y) - \sum\limits_{x,y}\overline{P}(x,y)f(x,y)
∂w∂f(w)=x,y∑P(x)Pw(y∣x)f(x,y)−x,y∑P(x,y)f(x,y)
有了
w
w
w的导数表达式,就可以用梯度下降法来迭代求解最优的
w
w
w了,以上就是CRF模型参数学习之梯度下降法求解思路总结。
CRF模型维特比算法解码思路
CRF的标记序列解码问题,是指给定条件随机场的条件概率
P
(
y
∣
x
)
P(y|x)
P(y∣x)和一个观测序列
x
x
x,要求出满足
P
(
y
∣
x
)
P(y|x)
P(y∣x)最大的序列
y
y
y。维特比算法本身是一个动态规划算法,利用了两个局部状态和对应的递推公式,从局部递推到整体,进而得解。对于具体不同的问题,仅仅是这两个局部状态的定义和对应的递推公式不同而已。
对于我们CRF中的维特比算法,我们的第一个局部状态定义为
δ
i
(
l
)
\delta_i(l)
δi(l),表示在位置
i
i
i标记
l
l
l各个可能取值
(
1
,
2...
m
)
(1,2...m)
(1,2...m)对应的非规范化概率的最大值。之所以用非规范化概率是因为规范化因子
Z
(
x
)
Z(x)
Z(x)不影响最大值的比较。根据
δ
i
(
l
)
δ_i(l)
δi(l)的定义,我们递推在位置
i
+
1
i+1
i+1标记
l
l
l的表达式为:
δ
i
+
1
(
l
)
=
max
1
≤
j
≤
m
{
δ
i
(
j
)
+
∑
k
=
1
K
w
k
f
k
(
y
i
=
j
,
y
i
+
1
=
l
,
x
,
i
)
}
,
l
=
1
,
2
,
.
.
.
m
\delta_{i+1}(l) = \max_{1 \leq j \leq m}\{\delta_i(j) + \sum\limits_{k=1}^Kw_kf_k(y_{i} =j,y_{i+1} = l,x,i)\}\;, l=1,2,...m
δ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
)
\Psi_{i+1}(l)
Ψi+1(l)来记录使
δ
i
+
1
(
l
)
\delta_{i+1}(l)
δi+1(l)达到最大的位置
i
i
i的标记取值,这个值用来最终回溯最优解,
Ψ
i
+
1
(
l
)
\Psi_{i+1}(l)
Ψi+1(l)的递推表达式为:
Ψ
i
+
1
(
l
)
=
a
r
g
max
1
≤
j
≤
m
{
δ
i
(
j
)
+
∑
k
=
1
K
w
k
f
k
(
y
i
=
j
,
y
i
+
1
=
l
,
x
,
i
)
}
,
l
=
1
,
2
,
.
.
.
m
\Psi_{i+1}(l) = arg\;\max_{1 \leq j \leq m}\{\delta_i(j) + \sum\limits_{k=1}^Kw_kf_k(y_{i} =j,y_{i+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
以上就是CRF的序列解码的基本思想,总结来说,CRF的三个基本问题:标记序列的概率计算–前向后向算法,参数学习问题–梯度下降法,序列解码问题–维特比算法,其中前向后向算法和维特比算法有着异曲同工之妙,都是基于动态规划的思想。这里所述CRF的三个基本问题其实在BI-LSTM-CRF中都有涉及,在训练的过程中涉及到参数的学习,计算总路径得分就用到了类似于前向后向的算法思想,值得注意的是,BI-LSTM-CRF中并不涉及到特征函数和权重,只需要学习到一个状态转移矩阵即可,但所用思想都是一样的。
CRF跟HMM的区别
linear-CRF模型和HMM模型有很多相似之处,尤其是其三个典型问题非常类似,除了模型参数学习的问题求解方法不同以外,概率估计问题和解码问题使用的算法思想基本也是相同的。同时,两者都可以用于序列模型,因此都广泛用于自然语言处理的各个方面。
现在来看看两者的不同点。最大的不同点是linear-CRF模型是判别模型,而HMM是生成模型,即linear-CRF模型要优化求解的是条件概率
p
(
x
∣
y
)
p(x|y)
p(x∣y),则HMM要求解的是联合分布
p
(
x
,
y
)
p(x,y)
p(x,y)。第二,linear-CRF是利用最大熵模型的思路去建立条件概率模型,对于观测序列并没有做马尔科夫假设。而HMM是在对观测序列做了马尔科夫假设的前提下建立联合分布的模型。
最后想说的是,只有linear-CRF模型和HMM模型才是可以比较讨论的。但是linear-CRF是CRF的一个特例,CRF本身是一个可以适用于很复杂条件概率的模型,因此理论上CRF的使用范围要比HMM广泛的多。
更多的CRF跟HMM的区别可查看 【1】【2】
本文深入探讨了CRF模型的参数学习和序列解码问题,详细介绍了CRF模型参数学习的梯度下降法和序列解码的维特比算法。同时对比了CRF与HMM模型的异同。

958

被折叠的 条评论
为什么被折叠?



