NLP学习笔记35 CRF

一 序

  本文属于贪心NLP训练营学习笔记系列。

二 有向图与无向图模型

横向: 贝叶斯模型 -> HMM时序模型 -> 图模型 2. 纵向: 有向 -> 无向

有向图和无向图联合概率

有向图的联合概率等于各个节点的条件概率的乘积.x_4,x_5无关,直接乘。在计算条件概率的时候,只需要考虑局部的取值类型即可,

例如:p(x_2|x_3)只用考虑x_3取值(假设它是离散型),同理p(x_3|x_4,x_5)只需要考虑.x_4,x_5所有的可能性。

无向图相对复杂,为了吧联合概率拆分,需要引入factor/feature function,拆分的结果就是上图中的绿色圈圈,三个一组。这样的一组也叫做clique(两两连接)

概率性质

  • 0\leq p(x)\leq1
  • \Sigma _x p(x)=1

拆分好后,联合概率就可以写为:

p(x_1,x_2,x_3,x_4,x_5)= \frac{ \phi_1(x_1,x_2,x_5)\phi_2(x_2,x_3,x_5) \phi_3(x_3,x_4,x_5) }{z(x)}

\phi就是feature function,为了保证概率的值域是[0,1],需要除以z(x)进行归一化normalization.也叫做partition function。

partition function 计算困难,因为它是依赖于全局的变量(有向图是局部依赖)。

生成模型与判别模型Generative VS Discriminative Model

Generative 是P(x,y),Discriminative 是p(y|x).

HMM 是生成模型,CRF是判别模型。

HMM的局限

1观测独立性假设:主要是指观测值之间假设是独立的。x1,x2 之间假设是独立的,这个假设在nlp中有一些不合理,比如给定的观测值是一句话

2 一阶的马尔科夫假设:意思是每种状态只依赖与前面一种状态,也有一定局限性。

三 对数线性模型Log-linear Model

逻辑回归和CRF都属于Log-Linear Model的一个特例。

 

p(y|x;w)= \frac{ exp\sum_{j=1}^{J}w_jF_j(x,y) }{ Z(x,w) }  

其中:p(y|x;w) 是条件概率,判别模型。

F_j(x,y)是feature function,表示x和y的关系,简单理解为第j个特征。

w_j是模型参数,

Z(x,w)归一Normalization / Partition function。

Multinomial Logistic Regression

Fj(x,y)=Xi\cdot I(y=c) \: \: \: \: \: \: x \in Rd,y\in1,2,..,c

x是d维的特征向量,y是分类。

I是indicator function,意思是当函数中的条件满足的时候函数取值为1,否则取值为0.

假设现在c=3,那么特征函数的维度3*d,就是 j \in 1,2,3,...3d,同样的参数w维度也是3*d

下面的截图,左侧是y是不同的分类的时候,特征函数的取值情况.右侧是对应的模型概率的计算。

p(y=1|x;w)=\frac{exp\sum_{j=1 }^{3d} w_jF_j(x,y) }{ Z(x,w)}=\frac{exp\sum_{j=1 }^{d} w_jx_j }{ Z(x,w)}

p(y=2|x;w)=\frac{exp\sum_{j=1 }^{3d} w_jF_j(x,y) }{ Z(x,w)}=\frac{exp\sum_{j=d+1 }^{2d} w_jx_{j-d} }{ Z(x,w)}

注意这里的x的下标是j-d,因为x的下标范围是1-d,但是j是从d+1到2d,所以这里要减去一个d,保持范围一致。

p(y=3|x;w)=\frac{exp\sum_{j=1 }^{3d} w_jF_j(x,y) }{ Z(x,w)}=\frac{exp\sum_{j=2d+1 }^{3d} w_jx_{j-2d} }{ Z(x,w)}

我们把参数w写开,把它每d个分一个段,写成:

w=(w^{(1)} ,w^{(2)},w^{(3)})^T

上面的分类的模型概率计算可以写为:

p(y=1|x;w)=\frac{exp(w^{(1)T}\cdot x)}{ Z(x,w)}

p(y=2|x;w)=\frac{exp(w^{(2)T}\cdot x)}{ Z(x,w)}

p(y=3|x;w)=\frac{exp(w^{(3)T}\cdot x)}{ Z(x,w)}

Z(x,w)可以写成:Z(x,w)=w^{(1)T} \cdot x+w^{(2)T} \cdot x+w^{(3)T} \cdot x

模型概率写成:

\large p(y=1|x;w)=\frac{e^{w^{(1)T}\cdot x}}{ \sum_{i=1}^{3} e^{w^{(i)T}\cdot x} }

\large p(y=2|x;w)=\frac{e^{w^{(2)T}\cdot x}}{ \sum_{i=1}^{3} e^{w^{(i)T}\cdot x} }

\large p(y=3|x;w)=\frac{e^{w^{(3)T}\cdot x}}{ \sum_{i=1}^{3} e^{w^{(i)T}\cdot x} }

这种模型叫做多元逻辑回归的形式。

feature function

\large A_a(x)是特征 \large B_b(y)是标签. 我们认为F_j(x,y)是已知的,求解\large w_j

四 CRF: Log-linear Model for sequential data

我们把Log-Linear Model的条件概率模型写出来,然后假设数据x是一个时序类序列,来进行推导CRF。

p(y|x;w)= \frac{ 1 }{ Z(x,w) } exp\sum_{j=1}^{J}w_jF_j(x,y)

我们假设:\bar{x}是观测到的时序数据,类似一个句子(可看做多个单词组成的序列)

\bar{y}是观测到的时序数据对应的标签(可能是词性或者实体类别)。则:

p(\bar{y}|\bar{x};w)= \frac{ 1 }{ Z(\bar{x},w) } exp\sum_{j=1}^{J}w_jF_j(\bar{x},\bar{y})

由于不同的feature function得到不同类型的模型,先从最简单的linear chain CRF看。(就是针对不同的时序,怎么抽取特征出来)

p(\bar{y}|\bar{x};w)= \frac{ 1 }{ Z(\bar{x},w) } exp\sum_{j=1}^{J}w_jF_j(\bar{x},\bar{y}) \\= \frac{ 1 }{ Z(\bar{x},w) } exp\sum_{j=1}^{J}w_j \sum_{i=2}^{n}f_j(y_{i-1},y_i,\bar{x},i)

就是本能是整体的y与x的关系,现在拆分开很多的factor(每个factor只依赖把当前时刻、跟下一时刻tag,跟\bar{x}(观测值)组成),提取完特征后做一个相加的操作。

当我们处理CRF时,把\sum_{i=2}^{n}f_j(y_{i-1},y_i,\bar{x},i)当做已知变量处理。

与HMM算法一样,我们在这里也要解决同样的两个问题1、inference问题,也就是给定参数w和数据x求出对应状态y 。

2、参数优化的问题,也就是给定数据和标签优化参数

接下来看看怎么解决。

Inference Problem

给定参数w,\bar{x}观测值,求\bar{y},这个和HMM的情况是类似的,我们也是采用的维特比算法,先看公式推导:

​\bar{y}=argmax_{\bar{y}}p(\bar{y}|\bar{x};w) =argmax_{\bar{y}} \sum_{j=1}^{J} w_jF_j(\bar{x},\bar{y}) 

对比标准公式,去掉了Partition functionZ(x,w)e,因为对于任何的\bar{y} ,Z(x,w)只依赖w,\bar{x}可看做常数。

=argmax_{\bar{y}}\sum_{j=1}^{J} w_j\sum_{i=2}^{n}f_j(y_{i-1},y_i,\bar{x},i)

=argmax_{\bar{y}}\sum_{i=2}^{n}g_i(y_{i-1},y_i)  其中g_i(y_{i-1},y_i)=\sum_{j=1}^{J}w_jf_j(y_{i-1},y_i,\bar{x},i)

这里借鉴上节HMM中维特比算法,求当前点的最优解,是在前一个时刻的最优解的基础上进行求极值即可,这里设置函数u(k,v),k表示的是当前时刻,v表示的是对应当前时刻选择的标签也就是y_v ,那么u(k,v)表示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}拆出来,

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)

中括号[ ] 内部相当于求k−1时刻所有点的最优路径,也是子问题。根据u(k,v)的函数定义

u(k,v)= \underset{u}{max}[ u(k-1,u)+g_k(u,v)]

所以整个u就可以做是一个序列的动态规划求解.

优化参数问题

按梯度下降的思想来求,实际上要计算梯度也就是对参数求导,找到收敛的方向。先看看log-linear 模型的公式

p(y|x;w)= \frac{ 1 }{ Z(x,w) } exp\sum_{j=1}^{J}w_jF_j(x,y) (1)

按梯度下降的思想来求w(条件概率p对w_j的偏导,这里我们加一个log对求梯度没有影响,方便去掉后面e)

\frac{\partial log p(y|x;w) }{ \partial w_j} (2)

把式子1代入2.

=\frac{\partial }{ \partial w_j}[ \sum_{j=1}^{J} w_jF_j(x,y)-logZ(x,w) ]

=F_j(x,y)-\cfrac{1}{Z(x,w)}\cdot\cfrac{\partial}{\partial{w_j}}Z(x,w)  (3)

之前说过Z(x,w)的目的是为了做normlazation。所以它是一个全局的变量,CRF它就是考虑到的所有y的集合,把它写出来

Z(x,w)=\sum_{​{y}'}exp\sum_{j=1}^Jw_jF_j(x,y')  (4)

我们先来求\dfrac{\partial Z(x,w)}{\partial w}
\dfrac{\partial Z(x,w)}{\partial w}=\dfrac{\partial }{\partial w}\sum_{​{y}'}exp\sum_{j=1}^Jw_jF_j(x,y')

=\sum_{​{y}'}\dfrac{\partial }{\partial w}exp\sum_{j=1}^Jw_jF_j(x,y')   y'与求偏导的对象无关,可以挪到前面

=\sum_{y'}^{ }exp\sum_{j=1}^Jw_jF_j(x,y') \frac{ \partial }{ \partial w}\sum_{j=1}^Jw_jF_j(x,y')

=\sum_{y'}^{ } [exp\sum_{j=1}^Jw_jF_j(x,y') ]F_j(x,y')  (5) 因为\frac{ \partial }{ \partial w}\sum_{j=1}^Jw_jF_j(x,y')求导过程中,只对第j个有结果,其他项对w_j求导都变成0了。

把式子5  代入3

=F_j(x,y)-\cfrac{1}{Z(x,w)}\cdot\sum_{y'}^{ } [exp\sum_{j=1}^Jw_jF_j(x,y') ]F_j(x,y')

=F_j(x,y)- \sum_{y'}^{ } F_j(x,y') \cfrac{exp\sum_{j=1}^Jw_jF_j(x,y') }{Z(x,w)}

根据Log-Linear Model条件概率,最后一项可写为p(y'|x;w)

F_j(x,y)-\sum_{y'}^{} F_j(x,y')p(y'|x;w)

后面这项是考虑了y'的各种可能,按照期望的形式表达。

F_j(x,y)-\underset{y'\sim p(y'|x;w)}{E}\{F_{j}(x,y')\}  (6)

在来看如何计算Z(x,w)

Z(x,w)=\sum_{​{y}'}exp\sum_{j=1}^Jw_jF_j(x,y')

=\sum_{​{y}'}exp\sum_{j=1}^Jw_j \sum_{i=2}^{n} f_j(y_{i-1},y_i,\bar{x},i)

=\sum_{y'}^{ }exp\sum _{i=2}^{n} g_i(y_{i-1},y_i)

上面 式子的意思是考虑到了所有y的组合,假设y有m种,时长为n.考虑所有的组合O(m^n)

用HMM里面的FB算法。先看前向算法:

\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_1,....,y_{k-1}y_k,把y_k 设置为u.

\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)]

因为\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)] 是\alpha (k,u),

=\sum_u\alpha(k,u)exp[g_{k+1}(u,v)] 

同理我们也可以使用后向算法从后往前推导,把y_k 设置为u.考虑的子序列是y_k,y_{k+1},...,y_n

\beta(u,k)=\sum_v[expg_{k+1}(u,v)]\beta(v,k+1)

所以

Z(\bar x,w)=\sum_u\alpha(k,u)\beta(u,k)

以上是针对离散型随机变量。如果是连续型,要复杂的多需使用蒙特卡洛方法进行估计。

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|\bar x;w)=\cfrac{\alpha(k,u)[expg_{k+1}(u,v)]\beta(v,k+1)}{Z(\bar x,w)} (这里需要对比HMM来看)

最后回到我们的公式6:

\cfrac{\partial}{\partial{w_j}}\text{log}p(\bar y|\bar x;w)=F_j(x,y)-\underset{y'\sim p(y'|x;w)}{E}\{F_{j}(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)]  这里\underset{\bar{y}}{E} 放到里面

这里有个trick,\underset{\bar{y}}{E}期望本来是对于所有的y,但是这里只有y_{i-1},y_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(\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) 这里是\underset{y_{i-1},y_i}{E}按期望展开 

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)} 这里吧前面的p(y_i,y_{i-1}|\bar x;w)代入

有了上面,可以怎么进行更新参数 

w_j^{t+1}=w_j^t-\eta_t\cfrac{\partial}{\partial{w_j}}\text{log}p(\bar y|\bar x;w)

***************************

本篇学的很吃力,尤其是后面对着老师讲的的公式推导,需要再看看数学。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值