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