条件随机场模型(CRF)学习笔记(一)

条件随机场(Conditional random field,CRF)是给定一组输入随机变量条件下另一组输出随机变量条件概率分布模型,其特点是假设输出随机变量构成马尔可夫随机场。条件随机场常用于序列标注问题,比如命名实体识别等。从下面几个方面入手:

一、 条件随机场的概念
二、条件随机场的公式
三、 条件随机场的求解
四、 条件随机场与HMM的区别
五、 条件随机场的Python实现
一、 条件随机场的概念

一个例子:理解条件随机场最好的办法就是用一个现实的例子来说明它,假如我们有小明同学一天不同时间段的照片,从早上提裤子起床到晚上脱裤子睡觉的都用。现在的任务是对小明的这些图片进行打标分类;比如吃饭的照片打为吃饭,跑步时候拍的照片打为跑步类型,开会时候拍的照片打标为开会。那好,我们要怎么做呢?
一个简单直观的办法就是,不管这些照片之间的时间顺序,想办法训练出一个多元分类器。就是用一些打好标签的照片作为训练数据,训练出一个模型,直接根据照片的特征来分类。例如,如果照片是早上6:00拍的,且画面是黑暗的,那就给它打上睡觉的标签;如果照片上有车,那就给它打上开车的标签。
这样可行吗?
乍一看可以!但实际上,由于我们忽略了这些照片之间的时间顺序这一重要信息,我们的分类器会有缺陷的。举个例子,假如有一张小明闭着嘴的照片,怎么分类?显然难以直接判断,需要参考闭嘴之前的照片,如果之前的照片显示小明在吃饭,那这个闭嘴的照片很可能是小明在咀嚼食物准备下咽,可以给它打上吃饭的标签;如果之前的照片显示小明在唱歌,那这个闭嘴的照片很可能是小明唱歌瞬间的抓拍,可以给它打上唱歌的标签。
所以,为了让我们的分类器能够有更好的表现,在为一张照片分类时,我们必须将与它相邻的照片的标签信息考虑进来。这——就是**条件随机场(CRF)**大显身手的地方!

概念 : 条件随机场的应用场景是给定输入的随机变量 X = { x 1 , x 2 , . . . x n } X=\left \{ x_1,x_2,...x_n \right \} X={x1,x2,...xn},预测随机变量 Y = { y 1 , y 2 , . . . y n } Y=\left \{ y_1,y_2,...y_n \right \} Y={y1,y2,...yn},当输出随机变量是离散值时,应用领域就是我们熟知的词性标注和语音识别,是不是和隐马尔科夫模型很相似?

在理解条件随机场的定义之前需要理解两个重要的知识点:(1)邻近,(2)马尔科夫随机场
(1)邻近
要理解下面是
在这里插入图片描述
y 1 y_1 y1的邻近点为 y 2 , y 3 , y 4 , y 5 y_2, y_3, y_4, y_5 y2,y3,y4,y5 y 4 y_4 y4的邻近点为 y 1 , y 6 , y 7 y_1, y_6, y_7 y1,y6,y7 y 6 y_6 y6的邻近点为 y 4 y_4 y4,邻近点的含义就是无向边(没有方向,比如 y 1 y_1 y1 Y 2 Y_2 Y2的方向性)相连,存在相关的两个随机变量。
(2)马尔科夫随机场
请看另一篇文章《隐马尔可夫的前身马尔科夫随机场》
条件随机场就是在给定随机变量组X的条件下,输出随机变量组Y,且假设输出Y构成的是一个马尔科夫随机场,那么我们就可以用马尔科夫随机场的马尔科夫性质去推导条件概率分布。

二、 条件随机场的公式
一般的, 假设X和Y有相同的结构下,我们用到的条件随机场一般是指线性链条件随机场,而且在现实中,我们都是用线性条件随机场处理问题的,比如词性标注等。
在这里插入图片描述
线性链条件随机场
在这里插入图片描述
其满足马尔可夫性质(一个随机过程在给定现在状态和所有过去状态的情况下,其未来的状态的条件概率分布只和当前状态有关;在给定现在状态时,它与过去状态(即该过程的历史路径)是条件独立的,那么此随机过程即具有马尔可夫性质),公式如下:
在这里插入图片描述
我们需要将条件随机场转化为机器学习模型,那么就得给出它的算法公式,我们从一个例子出发,词性标注:
词性标注,顾名思义就是在给定一个句子(包含一些列单词和符号)情况下,标记其词性如形容词、名词、副词、动词、介词、冠词、代词等
举个例子:“我爱我家”;“我(代词)爱(动词)我家(名词)”,满足线性条件随机场的情况
所以我们使用线性条件随机场来标记句子词性,和其他的分类器一样,我们需要定义一组特征函数 f i f_i fi
我们人工在给句子进行标记时,是根据我们自己的先验知识标记的,所以条件随机场的一组特征函数也类似先验概率,那么每个特征函数的输入如下:

(1)句子s
(2)表示第几个单词的位置 i
(3)当前单词的状态 l i l_i li
(4)前一个单词的状态 l i − 1 l_{i-1} li1

得到特征函数为 f j = f j ( s , i , l i , l i − 1 ) f_j=f_{j}(s, i, l_i, l_{i-1}) fj=fj(s,i,li,li1),我们的特征函数只能取0或者1,即满足特征条件或者不满足特征条件。同时,我们可以为每个特征函数赋予一个权值,用以表达我们对这个特征函数的信任度。
我们通过把句子中所有的单词的特征加权求和,得到句子的标签 ( l ) (l) (l)分数:
在这里插入图片描述
上式,第一个积分求和表示的是每个单词的所有特征函数求和,有m个特征函数,第二个表示每个单词的求和,有n个单词。
一个句子中有多种词性,所有本质上来说是多分类问题,我们把每个标签的序列分数转化为概率进行分类,其方法就是对分数求指数后再进行归一化转化为概率,范围0~1,有:
在这里插入图片描述
给定句子s,其词性标注 l l l的分数越大,则相应得到的条件概率也就越大,选择条件概率最大的词性标注 l l l作为句子的词性标注序列。那如何根据根据自己的先验知识去设置词性的特征函数呢?下面是有个特征函数的举例过程:
(1)当 l i l_i li为副词且第 i i i个单词以“-ly”为结尾时,我们就让 f 1 = 1 f_1=1 f1=1,反之为0;如果该特征函数的权重 λ i \lambda_i λi为正数且数值越大时,我们认为单词以“-ly”结尾时是副词的可能性越大
在这里插入图片描述
(2)当第一个单词为动词且这个句子以句号为结尾,我们让 f 2 = 1 f_2=1 f2=1,反之为0,如果该特征函数的权重 λ i \lambda_i λi为正数且数值越大时,我们认为句子以句号结尾时,第一个单词为动词的可能性越大。
在这里插入图片描述
(3)当 l i − 1 l_{i-1} li1为形容词且 l i l_i li为名词时,我们让 f 3 = 1 f_3=1 f3=1,反之为0,如果该特征函数的权重 λ i \lambda_i λi为正数且数值越大时,我们认为形容词后面时名词的可能性越大
在这里插入图片描述
(4)当 l i − 1 l_{i-1} li1为介词且 l i l_i li为介词时,我们让 f 4 = 1 f_4=1 f4=1,反之为0,如果该特征函数的权重 λ i \lambda_i λi为负数且绝对值越大时,我们认为介词后面是介词的可能性越低
在这里插入图片描述
上述的特征函数符合我们对语句的先验常识,若特征函数和权重的乘积能够增大 s c o r e ( l ∣ s ) score(l|s) score(ls),那么该特征函数的词性标注序列也可能实现,反之可能性越低
小结:为了构建条件随机场,我们需要定义一组特征函数,分配给他们相应的权重,并对他们的乘积求和,然后转化为概率的形式,最终确定句子的词性标注序列:
在这里插入图片描述
三、条件随机场的公式求解
给定句子s,标注序列l的条件概率为:
在这里插入图片描述
假设我们有大量训练数据(每个训练数据包含语句和相应的词性标注),随机初始化条件随机场模型的权重参数,我们通过训练数据逐渐优化权重参数,使权重参数往最优方向移动,这一算法实现是我们常用的梯度下降算法:
(1)取条件概率的对数:
在这里插入图片描述
在这里插入图片描述
(2)令 l o g p ( l ∣ s ) logp(l|s) logp(ls)对每一个特征函数求偏导:
在这里插入图片描述
注意到等式第一项是训练数据真实标注下特征函数对梯度的贡献,等式第二项是当前模型下特征函数对梯度贡献值的期望,对数条件概率的梯度是真实标注下特征函数与当前标注下特征函数期望的差值(上面式子再取负值)。现在你应该知道该梯度的含义了吧,即梯度下降是当前标注下特征函数值增加最快的方向。
(3)梯度上升的方向迭代权重参数 λ i \lambda_i λi:
在这里插入图片描述
其中 α \alpha α为学习率,决定梯度下降的步伐大小
(4)当对数条件概率 l o g p ( l ∣ s ) logp(l|s) logp(ls)不再下降时或下降的值小于给定的阈值时,迭代结束;反之重复之前的步骤。

参考资料:
https://zhuanlan.zhihu.com/p/104562658
http://www.360doc.com/content/20/0101/18/99071_883540848.shtml
https://www.cnblogs.com/pinard/p/7048333.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值