21[NLP训练营]CRF


公式输入请参考: 在线Latex公式

起源(HMM vs CRF)

可以看到下图中横向变化,和纵向的对比(有向图和无向图)。
在这里插入图片描述

求有向图和无向图联合概率

在这里插入图片描述
有向图的联合概率等于各个节点的条件概率的乘积,当然, x 4 , x 5 x_4,x_5 由于没有入度,所以不用条件。
注意,在计算条件概率的时候,只需要考虑局部的取值类型即可,例如: p ( x 2 x 3 ) p(x_2|x_3) ,只用考虑 x 3 x_3 的取值(假设它是离散型),如果有两种值,就只用考虑两种情况。
无向图相对而言麻烦点:
在这里插入图片描述
这里要引入factor/feature function,这里引入这个东西就是要把上面的无向图进行拆分。拆分的结果就是上图中的绿色圈圈,三个三个一组。这样的一组也叫做clique(可以一个点做一个clique,可以两个点做一个clique,当然也可以三个做一个clique,但是必须是两两相互关联的。)拆分好后,联合概率就可以写为:
p ( x 1 , x 2 , x 3 , x 4 , x 5 ) = ϕ 1 ( x 1 , x 2 , x 3 ) ϕ 2 ( x 2 , x 3 , x 5 ) ϕ 3 ( x 3 , x 4 , x 5 ) p(x_1,x_2,x_3,x_4,x_5)=\phi_1(x_1,x_2,x_3)\phi_2(x_2,x_3,x_5)\phi_3(x_3,x_4,x_5)
ϕ \phi 就是feature function
由于联合概率也是概率,为了保证概率的值域是[0,1],我们需要对上面的式子进行归一化,除以一个normalization term z ( x ) z(x) ,也叫做partition function:
p ( x 1 , x 2 , x 3 , x 4 , x 5 ) = ϕ 1 ( x 1 , x 2 , x 3 ) ϕ 2 ( x 2 , x 3 , x 5 ) ϕ 3 ( x 3 , x 4 , x 5 ) z ( x ) p(x_1,x_2,x_3,x_4,x_5)=\cfrac{\phi_1(x_1,x_2,x_3)\phi_2(x_2,x_3,x_5)\phi_3(x_3,x_4,x_5)}{z(x)}
partition function不好求。。。因为它是依赖于全局的变量(有向图是局部依赖)。

Log-Linear Model

逻辑回归和CRF都属于Log-Linear Model的一个特例,因此我们先来看看Log-Linear Model是什么。
p ( y x ; w ) = e x p j = 1 J w j F j ( x , y ) Z ( x , w ) p(y|x;w)=\cfrac{exp\sum_{j=1}^Jw_jF_j(x,y)}{Z(x,w)}
其中: F j ( x , y ) F_j(x,y) 是feature function, w j w_j 是模型参数, Z ( x , w ) Z(x,w) 是normalization term。
给出feature function的定义:
F j ( x , y ) = x i I ( y = c ) F_j(x,y)=x_i\cdot I(y=c)
x是d维的特征向量
y是分类,取值范围: { 1 , 2 , . . . , c } \{1,2,...,c\}
I是indicator function,意思是当函数中的条件满足的时候函数取值为1,否则取值为0.
假设现在 c = 3 c=3 ,那么特征函数的维度是 3 × d 3\times d 也就是 j 1 , 2 , 3 , . . . , 3 d j\in1,2,3,...,3d ,同样的参数 w w 的维度也是 3 × d 3\times d
下面是不同的分类的时候,特征函数的取值情况如下:
在这里插入图片描述
下面来看看当分类为1的时候模型概率的计算:
p ( y = 1 x ; w ) = e x p j = 1 3 d w j F j ( x , y ) Z ( x , w ) = e x p j = 1 d w j x j Z ( x , w ) p(y=1|x;w)=\cfrac{exp\sum_{j=1}^{3d}w_jF_j(x,y)}{Z(x,w)}=\cfrac{exp\sum_{j=1}^{d}w_jx_j}{Z(x,w)}
下面来看看当分类为2的时候模型概率的计算:
p ( y = 2 x ; w ) = e x p j = 1 3 d w j F j ( x , y ) Z ( x , w ) = e x p j = d + 1 2 d w j x j d Z ( x , w ) p(y=2|x;w)=\cfrac{exp\sum_{j=1}^{3d}w_jF_j(x,y)}{Z(x,w)}=\cfrac{exp\sum_{j=d+1}^{2d}w_jx_{j-d}}{Z(x,w)}
注意这里的x的下标是j-d,因为x的下标范围是1-d,但是j是从d+1到2d,所以这里要减去一个d,避免数组越界。
下面来看看当分类为3的时候模型概率的计算:
p ( y = 3 x ; w ) = e x p j = 1 3 d w j F j ( x , y ) Z ( x , w ) = e x p j = 2 d + 1 3 d w j x j 2 d Z ( x , w ) p(y=3|x;w)=\cfrac{exp\sum_{j=1}^{3d}w_jF_j(x,y)}{Z(x,w)}=\cfrac{exp\sum_{j=2d+1}^{3d}w_jx_{j-2d}}{Z(x,w)}
为了进一步展开,我们把参数写开:
w = ( w 1 , w 2 , . . . , w d , w d + 1 , . . . , w 2 d , w 2 d + 1 , . . . , w 3 d ) T w=(w_1,w_2,...,w_d,w_{d+1},...,w_{2d},w_{2d+1},...,w_{3d})^T
把它每d个分一个段,写成:
w = ( w ( 1 ) , w ( 2 ) , w ( 3 ) ) T w=(w^{(1)},w^{(2)},w^{(3)})^T
那么,上面的分类的模型概率计算可以写为:
p ( y = 1 x ; w ) = e x p ( w ( 1 ) T x ) Z ( x , w ) p(y=1|x;w)=\cfrac{exp(w^{(1)T}\cdot x)}{Z(x,w)}
p ( y = 2 x ; w ) = e x p ( w ( 2 ) T x ) Z ( x , w ) p(y=2|x;w)=\cfrac{exp(w^{(2)T}\cdot x)}{Z(x,w)}
p ( y = 3 x ; w ) = e x p ( w ( 3 ) T x ) Z ( x , w ) p(y=3|x;w)=\cfrac{exp(w^{(3)T}\cdot x)}{Z(x,w)}
normalization term z ( x , w ) z(x,w) 可以写成:
Z ( x , w ) = w ( 1 ) T x + w ( 2 ) T x + w ( 3 ) T x Z(x,w)=w^{(1)T}\cdot x+w^{(2)T}\cdot x+w^{(3)T}\cdot x
模型概率写成:
p ( y = 1 x ; w ) = e w ( 1 ) T x i = 1 3 e w ( i ) T x p(y=1|x;w)=\cfrac{e^{w^{(1)T\cdot x}}}{\sum_{i=1}^3e^{w^{(i)T\cdot x}}}
p ( y = 2 x ; w ) = e w ( 2 ) T x i = 1 3 e w ( i ) T x p(y=2|x;w)=\cfrac{e^{w^{(2)T\cdot x}}}{\sum_{i=1}^3e^{w^{(i)T\cdot x}}}
p ( y = 2 x ; w ) = e w ( 3 ) T x i = 1 3 e w ( i ) T x p(y=2|x;w)=\cfrac{e^{w^{(3)T\cdot x}}}{\sum_{i=1}^3e^{w^{(i)T\cdot x}}}
以上实际上就是多元逻辑回归的形式。

feature function

上面定义的feature function是:
F j ( x , y ) = x i I ( y = c ) F_j(x,y)=x_i\cdot I(y=c)
实际上,我们的feature function通常可以定义为:
F j ( x , y ) = A a ( x ) B b ( y ) F_j(x,y)=A_a(x)B_b(y)
其中: B b ( y ) B_b(y) 是标签。
A a ( x ) A_a(x) 是特征,例如:
在这里插入图片描述
不同的feature function得到的模型也不一样。

CRF:Log-Linear Model for Sequential Data

CRF其实就是Log-Linear Model处理时序数据的特例,因此,我们把Log-Linear Model的条件概率模型写出来,然后假设数据x是一个序列,来进行推导。原型
p ( y x ; w ) = 1 Z ( x , w ) e x p j = 1 J w j F j ( x , y ) p(y|x;w)=\cfrac{1}{Z(x,w)}exp\sum_{j=1}^Jw_jF_j(x,y)
我们假设: x ˉ \bar x 是观测到的时序数据,类似一句话。
相应的有: y ˉ \bar y 是观测到的时序数据对应的标签。
新的模型:
p ( y ˉ x ˉ ; w ) = 1 Z ( x , w ) e x p j = 1 J w j F j ( x ˉ , y ˉ ) p(\bar y|\bar x;w)=\cfrac{1}{Z(x,w)}exp\sum_{j=1}^Jw_jF_j(\bar x,\bar y)
由于不同的 F j ( x ˉ , y ˉ ) F_j(\bar x,\bar y) 可以得到不同类型的模型,因此我们先从最简单的CRF来开始推。
linear chain CRF,考虑到时序数据的特征,对特征函数做相应的定义:
p ( y ˉ x ˉ ; w ) = 1 Z ( x , w ) e x p j = 1 J w j F j ( x ˉ , y ˉ ) = 1 Z ( x , w ) e x p j = 1 J w j i = 2 n f j ( y i 1 , y i , x ˉ , i ) p(\bar y|\bar x;w)=\cfrac{1}{Z(x,w)}exp\sum_{j=1}^Jw_jF_j(\bar x,\bar y)\\ =\cfrac{1}{Z(x,w)}exp\sum_{j=1}^Jw_j\sum_{i=2}^nf_j(y_{i-1},y_i,\bar x,i)
相当于把第j个特征函数看做是一个核时序有关的特征,然后把这个时序展开,并和 x ˉ \bar x 组成之前说过的factor
在这里插入图片描述
接下来看linear chain CRF两个重要问题:inference和参数估计

Inference Problem

问题描述:给定 w , x ˉ w,\bar x ,求 y ˉ \bar y
y ^ = a r g m a x y ˉ p ( y ˉ x ˉ ; w ) = a r g m a x y ˉ j = 1 J w j F j ( x ˉ , y ˉ ) \widehat y=arg\underset{\bar y}{max}p(\bar y|\bar x;w)=arg\underset{\bar y}{max}\sum_{j=1}^Jw_jF_j(\bar x,\bar y)
这里省略掉了一部分,因为 w , x ˉ w,\bar x 可以看做常量。继续写:
y ^ = a r g m a x y ˉ j = 1 J w j i = 2 n f j ( y i 1 , y i , x ˉ , i ) \widehat y=arg\underset{\bar y}{max}\sum_{j=1}^Jw_j\sum_{i=2}^nf_j(y_{i-1},y_i,\bar x,i)
我们定义:
g i ( y i 1 , y i ) = j = 1 J w j f j ( y i 1 , y i , x ˉ , i ) g_i(y_{i-1},y_i)=\sum_{j=1}^Jw_jf_j(y_{i-1},y_i,\bar x,i)
因此:
y ^ = i = 2 n g i ( y i 1 , y i ) \widehat y=\sum_{i=2}^ng_i(y_{i-1},y_i)
这里借鉴上节HMM中维特比算法,求当前点的最优解,是在前一个时刻的最优解的基础上进行求极值即可:
在这里插入图片描述
在这里插入图片描述
写成数学表达:
u ( k , v ) = m a x y 1 , . . . , y k 1 s u m i = 1 k 1 g i ( y i 1 , y i ) + g k ( y k 1 , v ) u(k,v)=\underset{y_1,...,y_{k-1}}{max}sum_{i=1}^{k-1}g_i(y_{i-1},y_i)+g_k(y_{k-1},v)
y k 1 y_{k-1} 单独拿出来,中括号里面就是上面的子问题。
u ( k , v ) = m a x y k 1 [ m a x y 1 , . . . , y k 2 s u m i = 1 k 2 g i ( y i 1 , y i ) + g k 1 ( y k 2 , y k 1 ) ] + g k ( y k 1 , v ) u(k,v)=\underset{y_{k-1}}{max}[\underset{y_1,...,y_{k-2}}{max}sum_{i=1}^{k-2}g_i(y_{i-1},y_i)+g_{k-1}(y_{k-2},y_{k-1})]+g_k(y_{k-1},v)
根据函数u的定义,上面可以写成;
u ( k , v ) = m a x u [ u ( k 1 , u ) + g k ( u , v ) ] u(k,v)=\underset{u}{max}[u(k-1,u)+g_k(u,v)]
所以整个u就可以做是一个序列的动态规划求解:
在这里插入图片描述

估计参数w

大概思路是第一步先看按log-linear 模型如何来求w,然后第二步再看特例CRF的w怎么求
先写出公式:
p ( y x ; w ) = 1 Z ( x , w ) e x p j = 1 J w j F j ( x , y ) (1) p(y|x;w)=\cfrac{1}{Z(x,w)}exp\sum_{j=1}^Jw_jF_j(x,y)\tag1
按梯度下降的思想来求w,实际上要计算梯度(条件概率p对 w j w_j 的偏导)
log p ( y x ; w ) w j (2) \cfrac{\partial{\text{log}p(y|x;w)}}{\partial{w_j}}\tag2
这里加一个log对求梯度没有影响,方便去掉后面e。
把公式2带入公式1:
( 2 ) = w j log p ( y x ; w ) = w j [ j = 1 J w j F j ( x , y ) log Z ( x , w ) ] (2)=\cfrac{\partial}{\partial{w_j}}\text{log}p(y|x;w)=\cfrac{\partial}{\partial{w_j}}[\sum_{j=1}^Jw_jF_j(x,y)-\text{log}Z(x,w)]
然后中括号每项分别对w求导
= F j ( x , y ) 1 Z ( x , w ) w j Z ( x , w ) (3) =F_j(x,y)-\cfrac{1}{Z(x,w)}\cdot\cfrac{\partial}{\partial{w_j}}Z(x,w)\tag3
之前说过,Z是一个归一化项,因此可以按类别求和后,把它写出来
Z ( x , w ) = y e x p j = 1 J w j F j ( x , y ) (4) Z(x,w)=\sum_{y'}exp\sum_{j=1}^Jw_jF_j(x,y')\tag4
然后我们根据公式4来对 Z ( x , w ) Z(x,w) 求w的偏导。
w j Z ( x , w ) = w j y e x p j = 1 J w j F j ( x , y ) \cfrac{\partial}{\partial{w_j}}Z(x,w)=\cfrac{\partial}{\partial{w_j}}\sum_{y'}exp\sum_{j=1}^Jw_jF_j(x,y')
上面的 y y' 与求偏导的对象无关,可以挪到前面,并且为了和前面的 j j 区分,这里把求和的 j j 写成 j j'
= y w j e x p j w j F j ( x , y ) = y e x p j w j F j ( x , y ) w j j w j F j ( x , y ) =\sum_{y'}\cfrac{\partial}{\partial{w_j}}exp\sum_{j'}w_{j'}F_{j'}(x,y')\\ =\sum_{y'}exp\sum_{j'}w_{j'}F_{j'}(x,y')\cfrac{\partial}{\partial{w_j}}\sum_{j'}w_{j'}F_{j'}(x,y')
这里,因为 w j j w j F j ( x , y ) \cfrac{\partial}{\partial{w_j}}\sum_{j'}w_{j'}F_{j'}(x,y') 求导过程中,只对第j个有结果,其他项对 w j w_j 求导都变0了,所以上面:
= y [ e x p j w j F j ( x , y ) ] F j ( x , y ) (5) =\sum_{y'}[exp\sum_{j'}w_{j'}F_{j'}(x,y')]F_{j}(x,y')\tag5
把公式5带入3:
= F j ( x , y ) 1 Z ( x , w ) y [ e x p j w j F j ( x , y ) ] F j ( x , y ) = F j ( x , y ) y F j ( x , y ) e x p j w j F j ( x , y ) Z ( x , w ) =F_j(x,y)-\cfrac{1}{Z(x,w)}\sum_{y'}[exp\sum_{j'}w_{j'}F_{j'}(x,y')]F_{j}(x,y')\\ =F_j(x,y)-\sum_{y'}F_{j}(x,y')\cfrac{exp\sum_{j'}w_{j'}F_{j'}(x,y')}{Z(x,w)}
根据Log-Linear Model条件概率的定义最后一个分式可以写为 p ( y x ; w ) p(y'|x;w) ,因此上式写成:
= F j ( x , y ) y F j ( x , y ) p ( y x ; w ) =F_j(x,y)-\sum_{y'}F_{j}(x,y')p(y'|x;w)
后面这项是考虑了 y y' 的各个可能,按期望的概率,可以写为:
= F j ( x , y ) E y p ( y x ; w ) { F j ( x , y ) } (6) =F_j(x,y)-\underset{y'\sim p(y'|x;w)}{E}\{F_{j}(x,y')\}\tag6
把这个结论先记下来。
在来看如何计算 Z ( x ˉ , w ) Z(\bar x,w) ,这个后面要用到。把它写为考虑所有的 y ˉ \bar y 的情况:
Z ( x ˉ , w ) = y ˉ e x p j = 1 J w j F j ( x ˉ , y ˉ ) = y ˉ e x p j = 1 J w j i = 2 n f j ( y i 1 , y i , x ˉ , i ) = y ˉ e x p i = 2 n g i ( y i 1 , y i ) Z(\bar x,w)=\sum_{\bar y}exp\sum_{j=1}^Jw_jF_j(\bar x,\bar y)\\ =\sum_{\bar y}exp\sum_{j=1}^Jw_j\sum_{i=2}^nf_j(y_{i-1},y_i,\bar x,i)\\ =\sum_{\bar y}exp\sum_{i=2}^ng_i(y_{i-1},y_i)
要解这个,一种考虑所有的组合: O ( m n ) O(m^n) ,其中n是序列的长度,m是状态个数
另外一种是用HMM里面的FB算法。
Forward algorithm:先定义
α ( k + 1 , v ) = y 1 , . . . , y k e x p [ i = 2 k g i ( y i 1 , y i ) + g k + 1 ( y k , v ) ] \alpha(k+1,v)=\sum_{y_1,...,y_k}exp[\sum_{i=2}^kg_i(y_{i-1},y_i)+g_{k+1}(y_{k},v)]
意思是考虑1到k+1的子序列,前面是1到k,后面一项是k+1项,我们把这项设置为v
在这里插入图片描述
再把 y k y_k 分出来,变成 y 1 , . . . , y k 1 y_1,...,y_{k-1} y k y_k y k y_k 设置为u:
α ( k + 1 , v ) = u y 1 , . . . , y k 1 e x p [ i = 2 k 1 g i ( y i 1 , y i ) ] e x p [ g k ( y k 1 , u ) ] e x p [ g k + 1 ( u , v ) ] \alpha(k+1,v)=\sum_u\sum_{y_1,...,y_{k-1}}exp[\sum_{i=2}^{k-1}g_i(y_{i-1},y_i)]exp[g_{k}(y_{k-1},u)]exp[g_{k+1}(u,v)]
上式中: y 1 , . . . , y k 1 e x p [ i = 2 k 1 g i ( y i 1 , y i ) ] e x p [ g k ( y k 1 , u ) ] \sum_{y_1,...,y_{k-1}}exp[\sum_{i=2}^{k-1}g_i(y_{i-1},y_i)]exp[g_{k}(y_{k-1},u)] 实际上是 α ( k + 1 , v ) \alpha(k+1,v) 的子问题。因此:
α ( k + 1 , v ) = u α ( k , u ) e x p [ g k + 1 ( u , v ) ] \alpha(k+1,v)=\sum_u\alpha(k,u)exp[g_{k+1}(u,v)]
类似的,Backward algorithm可以定义:
β ( u , k ) = v [ e x p g k + 1 ( u , v ) ] β ( v , k + 1 ) \beta(u,k)=\sum_v[expg_{k+1}(u,v)]\beta(v,k+1)
在这里插入图片描述
最后:
Z ( x ˉ , w ) = u α ( k , u ) β ( u , k ) Z(\bar x,w)=\sum_u\alpha(k,u)\beta(u,k)
这里是考虑离散型变量的序列的估计,如果是连续型,要使用蒙特卡洛方法进行估计。
有了上面的结论,我们可以很容易的计算出类似HMM某一个时刻隐变量的概率:
p ( y k = u x ˉ ; w ) = α ( k , u ) β ( u , k ) Z ( x ˉ , w ) p(y_k=u|\bar x;w)=\cfrac{\alpha(k,u)\beta(u,k)}{Z(\bar x,w)}
类似的
p ( y k = u , y k + 1 = v x ˉ ; w ) = α ( k , u ) [ e x p g k + 1 ( u , v ) ] β ( v , k + 1 ) Z ( x ˉ , w ) p(y_k=u,y_{k+1}=v|\bar x;w)=\cfrac{\alpha(k,u)[expg_{k+1}(u,v)]\beta(v,k+1)}{Z(\bar x,w)}
下面可以开始解决公式6
w j log p ( y ˉ x ˉ ; w ) = F j ( x ˉ , y ˉ ) E y p ( y x ˉ ; w ) { F j ( x ˉ , y ) } = F j ( x ˉ , y ˉ ) E y ˉ [ i = 2 n f j ( y i 1 , y i , x ˉ , i ) ] = F j ( x ˉ , y ˉ ) i = 2 n E y ˉ [ f j ( y i 1 , y i , x ˉ , i ) ] \cfrac{\partial}{\partial{w_j}}\text{log}p(\bar y|\bar x;w)=F_j(\bar x,\bar y)-\underset{y'\sim p(y'|\bar x;w)}{E}\{F_{j}(\bar x,y')\}\\ =F_j(\bar x,\bar y)-\underset{\bar y}{E}[\sum_{i=2}^nf_j(y_{i-1},y_i,\bar x,i)]\\ =F_j(\bar x,\bar y)-\sum_{i=2}^n\underset{\bar y}{E}[f_j(y_{i-1},y_i,\bar x,i)]
这里有个trick,期望本来是对于所有的y,也就是 y ˉ \bar y ,但是这里只有 y i 1 , y i y_{i-1},y_i ,所以上面可以写为:
= F j ( x ˉ , y ˉ ) i = 2 n E y ˉ i 1 , y i [ f j ( y i 1 , y i , x ˉ , i ) ] =F_j(\bar x,\bar y)-\sum_{i=2}^n\underset{\bar y_{i-1},y_i}{E}[f_j(y_{i-1},y_i,\bar x,i)]
按期望展开:
= F j ( x ˉ , y ˉ ) i = 2 n y i 1 y i f j ( y i 1 , y i , x ˉ , i ) p ( y i , y i 1 x ˉ ; w ) =F_j(\bar x,\bar y)-\sum_{i=2}^n\sum_{y_{i-1}}\sum_{y_i}f_j(y_{i-1},y_i,\bar x,i)\cdot p(y_i,y_{i-1}|\bar x;w)
最后:
w j log p ( y ˉ x ˉ ; w ) = F j ( x ˉ , y ˉ ) i = 2 n y i 1 y i f j ( y i 1 , y i , x ˉ , i ) α ( i 1 , y i 1 ) [ e x p g i ( y i 1 , y i ) ] β ( y i , i ) Z ( x ˉ , w ) \cfrac{\partial}{\partial{w_j}}\text{log}p(\bar y|\bar x;w)=F_j(\bar x,\bar y)-\sum_{i=2}^n\sum_{y_{i-1}}\sum_{y_i}f_j(y_{i-1},y_i,\bar x,i)\cdot \cfrac{\alpha(i-1,y_{i-1})[expg_{i}(y_{i-1},y_i)]\beta(y_i,i)}{Z(\bar x,w)}
有了上面的结果,我们就可以计算梯度:
w j t + 1 = w j t η t w j log p ( y ˉ x ˉ ; w ) w_j^{t+1}=w_j^t-\eta_t\cfrac{\partial}{\partial{w_j}}\text{log}p(\bar y|\bar x;w)

发布了172 篇原创文章 · 获赞 40 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/oldmao_2001/article/details/104906365