转:https://www.cnblogs.com/pinard/p/7055072.html
linear-CRF的三个基本问题
linear-CRF也有三个类似的的基本问题。不过和HMM不同,在linear-CRF中,我们对于给出的观测序列 x 是一直作为一个整体看待的,也就是不会拆开看 ( x 1 , x 2 , . . . ) (x_1,x_2,...) (x1,x2,...) ,因此linear-CRF的问题模型要比HMM简单一些,如果你很熟悉HMM,那么CRF的这三个问题的求解就不难了。
linear-CRF第一个问题是评估,即给定 linear-CRF的条件概率分布P(y|x)P(y|x), 在给定输入序列xx和输出序列yy时,计算条件概率P(yi|x)P(yi|x)和P(yi−1,yi|x)P(yi−1,yi|x)以及对应的期望. 本文接下来会详细讨论问题一。
linear-CRF第二个问题是学习,即给定训练数据集XX和YY,学习linear-CRF的模型参数wkwk和条件概率Pw(y|x)Pw(y|x),这个问题的求解比HMM的学习算法简单的多,普通的梯度下降法,拟牛顿法都可以解决。
linear-CRF第三个问题是解码,即给定 linear-CRF的条件概率分布P(y|x)P(y|x),和输入序列xx, 计算使条件概率最大的输出序列yy。类似于HMM,使用维特比算法可以很方便的解决这个问题。
linear-CRF的前向后向概率概述
要计算条件概率 P ( y i ∣ x ) P(y_i|x) P(yi∣x) 和 P ( y i − 1 , y i ∣ x ) P(y_{i-1},y_i|x) P(yi−1,yi∣x) ,我们也可以使用和HMM类似的方法,使用前向后向算法来完成。首先我们来看前向概率的计算。
定义 α i ( y i ∣ x ) \alpha_i(y_i|x) αi(yi∣x) 表示序列位置 i 的标记是 y i y_i yi 时,在位置 i 之前的部分标记序列的非规范化概率。之所以是非规范化概率是因为我们不想加入一个不影响结果计算的规范化因子 Z ( x ) Z(x) Z(x) 在分母里面。
在上一篇,我们定义了下式:
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
在起点处,我们定义:
α 0 ( y 0 ∣ x ) = { 1 y 0 = s t a r t 0 e l s e \alpha_0(y_0|x)= \begin{cases} 1 & {y_0 =start}\\ 0 & {else} \end{cases} α0(y0∣x)={10y0=startelse
假设我们可能的标记总数是 m, 则 y i y_{i} yi 的取值就有 m 个,我们用 α i ( x ) \alpha_i(x) αi(x) 表示这 m 个值组成的前向向量如下:
α i ( x ) = ( α i ( y i = 1 ∣ x ) , α i ( y i = 2 ∣ x ) , . . . α i ( y i = m ∣ x ) ) T \alpha_i(x) = (\alpha_i(y_i=1|x), \alpha_i(y_i=2|x), ... \alpha_i(y_i=m|x))^T αi(x)=(αi(yi=1∣x),αi(yi=2∣x),...αi(yi=m∣x))T
同时用矩阵 M i ( x ) M_i(x) Mi(x) 表示由 M i ( y i − 1 , y i ∣ x ) M_i(y_{i-1},y_i |x) Mi(yi−1,yi∣x) 形成的 m × m m \times m m×m 阶矩阵:
M i ( x ) = [ M i ( y i − 1 , y i ∣ x ) ] M_i(x) = \Big[ M_i(y_{i-1},y_i |x)\Big] Mi(x)=[Mi(yi−1,yi∣x)]
这样递推公式可以用矩阵乘积表示:
α i + 1 T ( x ) = α i T ( x ) M i + 1 ( x ) \alpha_{i+1}^T(x) = \alpha_i^T(x)M_{i+1}(x) αi+1T(x)=αiT(x)Mi+1(x)
同样的。我们定义 β i ( y i ∣ x ) \beta_i(y_i|x) βi(yi∣x) 表示序列位置 i 的标记是 y i y_{i} yi 时,在位置 i 之后的从 i + 1 i+1 i+1 到 n 的部分标记序列的非规范化概率。
这样,我们很容易得到序列位置 i + 1 i+1 i+1 的标记是 y i + 1 y_{i+1} yi+1 时,在位置 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)
在终点处,我们定义:
β n + 1 ( y n + 1 ∣ x ) = { 1 y n + 1 = s t o p 0 e l s e \beta_{n+1}(y_{n+1}|x)= \begin{cases} 1 & {y_{n+1} =stop}\\ 0 & {else} \end{cases} βn+1(yn+1∣x)={10yn+1=stopelse
如果用向量表示,则有:
β i ( x ) = M i + 1 ( x ) β i + 1 ( x ) \beta_i(x) = M_{i+1}(x)\beta_{i+1}(x) βi(x)=Mi+1(x)βi+1(x)
由于规范化因子 Z ( x ) Z(x) Z(x) 的表达式是:
Z ( x ) = ∑ c = 1 m α n ( y c ∣ x ) = ∑ c = 1 m β 1 ( y c ∣ x ) Z(x) = \sum\limits_{c=1}^m\alpha_{n}(y_c|x) = \sum\limits_{c=1}^m\beta_{1}(y_c|x) Z(x)=c=1∑mαn(yc∣x)=c=1∑mβ1(yc∣x)
也可以用向量来表示 Z ( x ) Z(x) Z(x) :
Z ( x ) = α n T ( x ) ∙ 1 = 1 T ∙ β 1 ( x ) Z(x) = \alpha_{n}^T(x) \bullet \mathbf{1} = \mathbf{1}^T \bullet \beta_{1}(x) Z(x)=αnT(x)∙1=1T∙β1(x)
其中,1 是 m 维全1向量.
linear-CRF的前向后向概率计算
有了前向后向概率的定义和计算方法,我们就很容易计算序列位置 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 的标记是 y i y_{i} yi ,位置 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)
linear-CRF的期望计算
有了上一节计算的条件概率,我们也可以很方便的计算联合分布 P ( x , y ) P(x,y) P(x,y) 与条件分布 P ( y ∣ x ) P(y|x) P(y∣x) 的期望。
特征函数 f k ( x , y ) f_k(x,y) fk(x,y) 关于条件分布 P ( y ∣ x ) P(y|x) P(y∣x) 的期望表达式是:
E P ( y ∣ x ) [ f k ] = E P ( y ∣ x ) [ f k ( y , x ) ] = ∑ i = 1 n + 1 ∑ y i − 1 y i P ( y i − 1 , y i ∣ x ) f k ( y i − 1 , y i , x , i ) = ∑ i = 1 n + 1 ∑ y i − 1 y i f k ( y i − 1 , y i , x , i ) α i − 1 T ( y i − 1 ∣ x ) M i ( y i − 1 , y i ∣ x ) β i ( y i ∣ x ) α n T ( x ) ∙ 1 \begin{aligned} E_{P(y|x)}[f_k] & = E_{P(y|x)}[f_k(y,x)] \\ & = \sum\limits_{i=1}^{n+1} \sum\limits_{y_{i-1}\;\;y_i}P(y_{i-1},y_i|x)f_k(y_{i-1},y_i,x, i) \\ & = \sum\limits_{i=1}^{n+1} \sum\limits_{y_{i-1}\;\;y_i}f_k(y_{i-1},y_i,x, i) \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}} \end{aligned} EP(y∣x)[fk]=EP(y∣x)[fk(y,x)]=i=1∑n+1yi−1yi∑P(yi−1,yi∣x)fk(yi−1,yi,x,i)=i=1∑n+1yi−1yi∑fk(yi−1,yi,x,i)αnT(x)∙1αi−1T(yi−1∣x)Mi(yi−1,yi∣x)βi(yi∣x)
同样可以计算联合分布 P ( x , y ) P(x,y) P(x,y) 的期望:
E P ( x , y ) [ f k ] = ∑ x , y P ( x , y ) ∑ i = 1 n + 1 f k ( y i − 1 , y i , x , i ) = ∑ x P ‾ ( x ) ∑ y P ( y ∣ x ) ∑ i = 1 n + 1 f k ( y i − 1 , y i , x , i ) = ∑ x P ‾ ( x ) ∑ i = 1 n + 1 ∑ y i − 1 y i f k ( y i − 1 , y i , x , i ) α i − 1 T ( y i − 1 ∣ x ) M i ( y i − 1 , y i ∣ x ) β i ( y i ∣ x ) α n T ( x ) ∙ 1 \begin{aligned} E_{P(x,y)}[f_k] & = \sum\limits_{x,y}P(x,y) \sum\limits_{i=1}^{n+1}f_k(y_{i-1},y_i,x, i) \\& = \sum\limits_{x}\overline{P}(x) \sum\limits_{y}P(y|x) \sum\limits_{i=1}^{n+1}f_k(y_{i-1},y_i,x, i) \\& = \sum\limits_{x}\overline{P}(x)\sum\limits_{i=1}^{n+1} \sum\limits_{y_{i-1}\;\;y_i}f_k(y_{i-1},y_i,x, i) \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}} \end{aligned} EP(x,y)[fk]=x,y∑P(x,y)i=1∑n+1fk(yi−1,yi,x,i)=x∑P(x)y∑P(y∣x)i=1∑n+1fk(yi−1,yi,x,i)=x∑P(x)i=1∑n+1yi−1yi∑fk(yi−1,yi,x,i)αnT(x)∙1αi−1T(yi−1∣x)Mi(yi−1,yi∣x)βi(yi∣x)
假设一共有 K 个特征函数,则 k = 1 , 2 , . . . K k=1,2,...K k=1,2,...K
linear-CRF前向后向算法总结
以上就是linear-CRF的前向后向算法,个人觉得比HMM简单的多,因此大家如果理解了HMM的前向后向算法,这一篇是很容易理解的。
注意到我们上面的非规范化概率 M i + 1 ( y i + 1 , y i ∣ x ) M_{i+1}(y_{i+1},y_i|x) Mi+1(yi+1,yi∣x) 起的作用和HMM中的隐藏状态转移概率很像。但是这儿的概率是非规范化的,也就是不强制要求所有的状态的概率和为1。而HMM中的隐藏状态转移概率也规范化的。从这一点看,linear-CRF对序列状态转移的处理要比HMM灵活。