CRF主要涉及到三个问题,标记序列概率的计算、参数的学习、序列的预测(解码),本片博文主要介绍第一个问题:标记序列概率的计算–前向后向算法,在博文中提到,在BI-LSTM-CRF模型框架的CRF层,当计算序列所有路径的总得分时就用到了前向后向算法的思想。
CRF前向后向概率计算
首先定义αi(yi∣x)表示序列位置i的标记是yi时,在位置i之前的部分标记序列的非规范化概率。之所以是非规范化概率是因为我们不想加入一个不影响结果计算的规范化因子Z(x)在分母里面。
在条件随机场CRF(一)中,我们定义了下式:
Mi(yi−1,yi∣x)=exp(k=1∑Kwkfk(yi−1,yi,x,i))
这个式子定义了在给定yi−1时,从yi−1转移到yi的非规范化概率。
这样,我们很容易得到序列位置i+1的标记是yi+1时,在位置i+1之前的部分标记序列的非规范化概率αi+1(yi+1∣x)的递推公式:
αi+1(yi+1∣x)=αi(yi∣x)Mi+1(yi+1,yi∣x)i=1,2,...,n+1
同样的,我们定义βi(yi∣x)表示序列位置i的标记是yi时,在位置i之后的从i+1到n的部分标记序列的非规范化概率。这样,我们很容易得到序列位置i+1的标记是yi+1时,在位置i之后的部分标记序列的非规范化概率βi(yi∣x)的递推公式:
βi(yi∣x)=Mi+1(yi,yi+1∣x)βi+1(yi+1∣x)
有了前向后向概率的定义和计算方法,我们就很容易计算序列位置i的标记是yi时的条件概率P(yi∣x):
P(yi∣x)=Z(x)αiT(yi∣x)βi(yi∣x)=αnT(x)∙1αiT(yi∣x)βi(yi∣x)
也容易计算序列位置i的标记是yi,位置i−1的标记是yi−1时的条件概率P(yi−1,yi∣x):
P(yi−1,yi∣x)=Z(x)αi−1T(yi−1∣x)Mi(yi−1,yi∣x)βi(yi∣x)=αnT(x)∙1αi−1T(yi−1∣x)Mi(yi−1,yi∣x)βi(yi∣x)
以上就是精简的CRF的前向后向算法。