条件随机场CRF(二) 前向后向算法评估标记序列概率
在条件随机场CRF(一)中我们总结了CRF的模型,主要是linear-CRF的模型原理。本文就继续讨论linear-CRF需要解决的三个问题:评估,学习和解码。这三个问题和HMM是非常类似的,本文关注于第一个问题:评估。第二个和第三个问题会在下一篇总结。
linear-CRF的三个基本问题
在隐马尔科夫模型HMM中,我们讲到了HMM的三个基本问题,而linear-CRF也有三个类似的的基本问题。不过和HMM不同,在linear-CRF中,我们对于给出的观测序列$x$是一直作为一个整体看待的,也就是不会拆开看$(x_1,x_2,…)$,因此linear-CRF的问题模型要比HMM简单一些,如果你很熟悉HMM,那么CRF的这三个问题的求解就不难了。
linear-CRF第一个问题是评估,即给定 linear-CRF的条件概率分布$P(y|x)$, 在给定输入序列$x$和输出序列$y$时,计算条件概率$P(yi|x)$和$P(y{i-1},y_i|x)$以及对应的期望. 本文接下来会详细讨论问题一。
linear-CRF第二个问题是学习,即给定训练数据集$X$和$Y$,学习linear-CRF的模型参数$w_k$和条件概率$P_w(y|x)$,这个问题的求解比HMM的学习算法简单的多,普通的梯度下降法,拟牛顿法都可以解决。
linear-CRF第三个问题是解码,即给定 linear-CRF的条件概率分布$P(y|x)$,和输入序列$x$, 计算使条件概率最大的输出序列$y$。类似于HMM,使用维特比算法可以很方便的解决这个问题。
linear-CRF的前向后向概率概述
要计算条件概率$P(yi|x)$和$P(y{i-1},y_i|x)$,我们也可以使用和HMM类似的方法,使用前向后向算法来完成。首先我们来看前向概率的计算。
我们定义$\alpha_i(y_i|x)$表示序列位置𝑖的标记是$y_i$ 时,在位置$i$之前的部分标记序列的非规范化概率。之所以是非规范化概率是因为我们不想加入一个不影响结果计算的规范化因子$Z(x)$在分母里面。
在条件随机场CRF(一)第八节中,我们定义了下式:
这个式子定义了在给定$y{i-1}$时,从$y{i-1}$转移到$y_i$的非规范化概率。
这样,我们很容易得到序列位置$i+1$的标记是$y{i+1}$时,在位置$i+1$之前的部分标记序列的非规范化概率$\alpha{i+1}(y_{i+1}|x)$的递推公式:
在起点处,我们定义:
假设我们可能的标记总数是$m$, 则$y_i$的取值就有$m$个,我们用$\alpha_i(x)$表示这$m$个值组成的前向向量如下:
同时用矩阵$Mi(x)$表示由$M_i(y{i-1},y_i |x) $形成的$m \times m$阶矩阵:
这样递推公式可以用矩阵乘积表示:
同样的。我们定义$\beta_i(y_i|x)$表示序列位置$i$的标记是$y_i$时,在位置$i$之后的从$i+1$到$n$的部分标记序列的非规范化概率。
这样,我们很容易得到序列位置$i+1$的标记是$y{i+1}$时,在位置$i$之后的部分标记序列的非规范化概率$\beta{i}(y_{i}|x)$的递推公式:
在终点处,我们定义:
如果用向量表示,则有:
由于规范化因子$Z(x)$的表达式是:
也可以用向量来表示$Z(x)$:
其中,$\mathbf{1}$是$m$维全1向量。
linear-CRF的前向后向概率计算
有了前向后向概率的定义和计算方法,我们就很容易计算序列位置$i$的标记是$y_i$时的条件概率$P(y_i|x)$:
也容易计算序列位置𝑖的标记是$yi$,位置$i-1$的标记是$y{i-1}$时的条件概率$P(y_{i-1},y_i|x)$:
linear-CRF的期望计算
有了上一节计算的条件概率,我们也可以很方便的计算联合分布$P(x,y)$与条件分布$P(y|x)$的期望。
特征函数$f_k(x,y)$关于条件分布$P(y|x)$的期望表达式是:
同样可以计算联合分布$P(x,y)$的期望:
假设一共有$K$个特征函数,则$k=1,2,…K$
linear-CRF前向后向算法总结
以上就是linear-CRF的前向后向算法,个人觉得比HMM简单的多,因此大家如果理解了HMM的前向后向算法,这一篇是很容易理解的。
注意到我们上面的非规范化概率$M{i+1}(y{i+1},y_i|x)$起的作用和HMM中的隐藏状态转移概率很像。但是这儿的概率是非规范化的,也就是不强制要求所有的状态的概率和为1。而HMM中的隐藏状态转移概率也规范化的。从这一点看,linear-CRF对序列状态转移的处理要比HMM灵活。
install_url
to use ShareThis. Please set it in _config.yml
.