转载自  如何轻松愉快的理解条件随机场(CRF)

如何轻松愉快的理解条件随机场(CRF)?

理解条件随机场最好的办法就是用一个现实的例子来说明它。

但是目前中文的条件随机场文章鲜有这样干的,可能写文章的人都是大牛,不屑于举例子吧。

于是乎,我翻译了这篇文章。希望对其他伙伴有所帮助。
原文在这里[http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/]

想直接看英文的朋友可以直接点进去了。我在翻译时并没有拘泥于原文,许多地方都加入了自己的理解,用学术点的话说就是意译。(画外音:装什么装,快点开始吧。)好的,下面开始翻译!

假设你有许多小明同学一天内不同时段的照片,从小明提裤子起床到脱裤子睡觉各个时间段都有(小明是照片控!)。

现在的任务是对这些照片进行分类。比如有的照片是吃饭,那就给它打上吃饭的标签;有的照片是跑步时拍的,那就打上跑步的标签;有的照片是开会时拍的,那就打上开会的标签。问题来了,你准备怎么干?

一个简单直观的办法就是,不管这些照片之间的时间顺序,想办法训练出一个多元分类器。就是用一些打好标签的照片作为训练数据,训练出一个模型,直接根据照片的特征来分类。

例如,如果照片是早上6:00拍的,且画面是黑暗的,那就给它打上睡觉的标签;如果照片上有车,那就给它打上开车的标签。

这样可行吗?

乍一看可以!但实际上,由于我们忽略了这些照片之间的时间顺序这一重要信息,我们的分类器会有缺陷的。

举个例子,假如有一张小明闭着嘴的照片,怎么分类?显然难以直接判断,需要参考闭嘴之前的照片,如果之前的照片显示小明在吃饭,那这个闭嘴的照片很可能是小明在咀嚼食物准备下咽,可以给它打上吃饭的标签;如果之前的照片显示小明在唱歌,那这个闭嘴的照片很可能是小明唱歌瞬间的抓拍,可以给它打上唱歌的标签。

所以,为了让我们的分类器能够有更好的表现,在为一张照片分类时,我们必须将与它相邻的照片的标签信息考虑进来。

这——就是条件随机场(CRF)大显身手的地方!

1、从例子说起-词性标注问题

啥是词性标注问题?

非常简单的,就是给一个句子中的每个单词注明词性。

比如这句话:“Bob drank coffee at Starbucks”,注明每个单词的词性后是这样的:“Bob (名词)  drank(动词)   coffee(名词)   at(介词)    Starbucks(名词)”。

下面,就用条件随机场来解决这个问题。

以上面的话为例,有5个单词,我们将:(名词,动词,名词,介词,名词)作为一个标注序列,称为l,可选的标注序列有很多种,比如l还可以是这样:(名词,动词,动词,介词,名词),我们要在这么多的可选标注序列中,挑选出一个最靠谱的作为我们对这句话的标注。

怎么判断一个标注序列靠谱不靠谱呢?

就我们上面展示的两个标注序列来说,第二个显然不如第一个靠谱,因为它把第二、第三个单词都标注成了动词,动词后面接动词,这在一个句子中通常是说不通的。

假如我们给每一个标注序列打分,打分越高代表这个标注序列越靠谱,我们至少可以说,凡是标注中出现了动词后面还是动词的标注序列,要给它负分!!

上面所说的动词后面还是动词就是一个特征函数,我们可以定义一个特征函数集合,用这个特征函数集合来为一个标注序列打分,并据此选出最靠谱的标注序列。

也就是说,每一个特征函数都可以用来为一个标注序列评分,把集合中所有特征函数对同一个标注序列的评分综合起来,就是这个标注序列最终的评分值。

2、定义CRF中的特征函数

现在,我们正式地定义一下什么是CRF中的特征函数,所谓特征函数,就是这样的函数,它接受四个参数:

  • 句子s(就是我们要标注词性的句子)

  • i,用来表示句子s中第i个单词

  • l_i,表示要评分的标注序列给第i个单词标注的词性

  • l_i-1,表示要评分的标注序列给第i-1个单词标注的词性

它的输出值是0或者1,0表示要评分的标注序列不符合这个特征,1表示要评分的标注序列符合这个特征。

Note:这里,我们的特征函数仅仅依靠当前单词的标签和它前面的单词的标签对标注序列进行评判,这样建立的CRF也叫作线性链CRF,这是CRF中的一种简单情况。

为简单起见,本文中我们仅考虑线性链CRF。

3、从特征函数到概率

定义好一组特征函数后,我们要给每个特征函数f_j赋予一个权重λ_j。

现在,只要有一个句子s,有一个标注序列l,我们就可以利用前面定义的特征函数集来对l评分。

上式中有两个求和,外面的求和用来求每一个特征函数f_j评分值的和,里面的求和用来求句子中每个位置的单词的的特征值的和。

对这个分数进行指数化和标准化,我们就可以得到标注序列l的概率值p(l|s),如下所示:

4、几个特征函数的例子

前面我们已经举过特征函数的例子,下面我们再看几个具体的例子,帮助增强大家的感性认识。

当l_i是“副词”并且第i个单词以“ly”结尾时,我们就让f1 = 1,其他情况f1为0。不难想到,f1特征函数的权重λ1应当是正的。而且λ1越大,表示我们越倾向于采用那些把以“ly”结尾的单词标注为“副词”的标注序列

如果i=1,l_i=动词,并且句子s是以“?”结尾时,f2=1,其他情况f2=0。同样,λ2应当是正的,并且λ2越大,表示我们越倾向于采用那些把问句的第一个单词标注为“动词”的标注序列。

当l_i-1是介词,l_i是名词时,f3 = 1,其他情况f3=0。λ3也应当是正的,并且λ3越大,说明我们越认为介词后面应当跟一个名词。

如果l_i和l_i-1都是介词,那么f4等于1,其他情况f4=0。

这里,我们应当可以想到λ4是负的,并且λ4的绝对值越大,表示我们越不认可介词后面还是介词的标注序列。

好了,一个条件随机场就这样建立起来了,让我们总结一下:
为了建一个条件随机场,我们首先要定义一个特征函数集,每个特征函数都以整个句子s,当前位置i,位置i和i-1的标签为输入。

然后为每一个特征函数赋予一个权重,然后针对每一个标注序列l,对所有的特征函数加权求和,必要的话,可以把求和的值转化为一个概率值。

5、CRF与逻辑回归的比较
观察公式:

是不是有点逻辑回归的味道?
事实上,条件随机场是逻辑回归的序列化版本。

逻辑回归是用于分类的对数线性模型,条件随机场是用于序列化标注的对数线性模型。

6、CRF与HMM的比较

对于词性标注问题,HMM模型也可以解决。HMM的思路是用生成办法,就是说,在已知要标注的句子s的情况下,去判断生成标注序列l的概率,如下所示:

这里:
p(l_i|l_i-1)是转移概率,比如,l_i-1是介词,l_i是名词,此时的p表示介词后面的词是名词的概率。
p(w_i|l_i)表示发射概率(emission probability),比如l_i是名词,w_i是单词“ball”,此时的p表示在是名词的状态下,是单词“ball”的概率。

那么,HMM和CRF怎么比较呢?
答案是:CRF比HMM要强大的多,它可以解决所有HMM能够解决的问题,并且还可以解决许多HMM解决不了的问题。事实上,我们可以对上面的HMM模型取对数,就变成下面这样:

我们把这个式子与CRF的式子进行比较:

不难发现,如果我们把第一个HMM式子中的log形式的概率看做是第二个CRF式子中的特征函数的权重的话,我们会发现,CRF和HMM具有相同的形式。

换句话说,我们可以构造一个CRF,使它与HMM的对数形式相同。怎么构造呢?

对于HMM中的每一个转移概率p(l_i=y|l_i-1=x),我们可以定义这样的一个特征函数:

该特征函数仅当l_i = y,l_i-1=x时才等于1。这个特征函数的权重如下:

同样的,对于HMM中的每一个发射概率,我们也都可以定义相应的特征函数,并让该特征函数的权重等于HMM中的log形式的发射概率。

用这些形式的特征函数和相应的权重计算出来的p(l|s)和对数形式的HMM模型几乎是一样的!

用一句话来说明HMM和CRF的关系就是这样:
每一个HMM模型都等价于某个CRF
每一个HMM模型都等价于某个CRF
每一个HMM模型都等价于某个CRF

但是,CRF要比HMM更加强大,原因主要有两点:

  • CRF可以定义数量更多,种类更丰富的特征函数。HMM模型具有天然具有局部性,就是说,在HMM模型中,当前的单词只依赖于当前的标签,当前的标签只依赖于前一个标签。

  • 这样的局部性限制了HMM只能定义相应类型的特征函数,我们在上面也看到了。但是CRF却可以着眼于整个句子s定义更具有全局性的特征函数,如这个特征函数:

如果i=1,l_i=动词,并且句子s是以“?”结尾时,f2=1,其他情况f2=0。

CRF可以使用任意的权重 将对数HMM模型看做CRF时,特征函数的权重由于是log形式的概率,所以都是小于等于0的,而且概率还要满足相应的限制,如

但在CRF中,每个特征函数的权重可以是任意值,没有这些限制。

如何轻松愉快的理解条件随机场(CRF)相关推荐

  1. 如何轻松愉快地理解条件随机场(CRF)?

    转自:http://www.jianshu.com/p/55755fc649b1 理解条件随机场最好的办法就是用一个现实的例子来说明它.但是目前中文的条件随机场文章鲜有这样干的,可能写文章的人都是大牛 ...

  2. 如何轻松愉快地理解条件随机场

    https://blog.csdn.net/shyjhyp11/article/details/109529359 BILSTM+CRF实战 https://www.jianshu.com/p/45c ...

  3. 简单理解条件随机场CRF

    一.条件随机场是什么? 什么是条件随机场?我们先从它的命名开始说起,为什么是条件随机场这么奇怪的名字,为什么不叫飞机场.火葬场?通常数学上的命名是简单而直白的,大家听我一一解释. 条件 "条 ...

  4. 全网最通俗的条件随机场CRF

    前言 本文是我尽量以通俗易懂的口吻来讲解CRF的一篇博文,标题虽然取得有点自不量力,但也是我付出了十分心血总结出来的,如果你还是没能看懂那说明我能力不够没能讲清楚,烦请不要在我的留言区展现出你的杠精本 ...

  5. 轻松理解条件随机场(CRF)

    理解条件随机场最好的办法就是用一个现实的例子来说明它.但是目前中文的条件随机场文章鲜有这样干的,可能写文章的人都是大牛,不屑于举例子吧.于是乎,我翻译了这篇文章.希望对其他伙伴有所帮助. 原文在这里[ ...

  6. 条件随机场CRF的理解

    1.个人理解和总结 对比HMM的状态转移概率矩阵和发射概率矩阵CRF有自己的定义在边上的特征函数(相当于转移概率)和定义在节点上的特征函数(相当月发射概率) 序列标注HMM可以根据转移概率矩阵和发射概 ...

  7. 条件随机场(CRF) - 1 - 简介

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...

  8. NLP --- 条件随机场CRF详解 重点 特征函数 转移矩阵

    20210517 http://www.tensorinfinity.com/paper_170.html 上一节我们介绍了CRF的背景,本节开始进入CRF的正式的定义,简单来说条件随机场就是定义在隐 ...

  9. 条件随机场(CRF) - 2 - 定义和形式

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xueyingxue001/article/details/51498968 声明: 1,本篇为个人对 ...

最新文章

  1. ASP.netcore MVC钉钉H5微应用(二)鉴权
  2. 礼让行人监控系统+政策助力,共建城市文明交通
  3. python中如何创建包_如何在Python中创建命名空间包?
  4. python_day1
  5. 划时代的项目管理核心引擎——DynamicGantt 动态图甘特图
  6. ubuntu16.04无法连接WiFi搜索不到网络网卡驱动
  7. 摄像头分辨率怎么调整_亿联CAM50 - 智能话机专属高清摄像头
  8. php访问服务器文件路径,PHP与服务器文件系统的简单交互
  9. Stanley-系列一
  10. RocketMQ 源码学习笔记 Producer 是怎么将消息发送至 Broker 的?
  11. spring security 2.x HttpSessionEventPublisher 以及listener配置
  12. yarn在vscode里启动报错
  13. golang数据库的操作,更新删除增加单行查找与多行查找
  14. vc运行库各版本下载
  15. 微信网页授权并获取用户信息
  16. 饥荒为啥显示专用服务器,饥荒服务器和专用服务器有什么区别 | 手游网游页游攻略大全...
  17. CCAI 2017 | 中国工程院院士李德毅:L3的挑战与量产
  18. 【工具封装】Python 字典列表按中文姓名首字母排序
  19. 基于Spark框架的大型分布式矩阵求逆运算实现(二)——大型下三角矩阵求逆运算
  20. java.lang.IllegalArgumentException: View=DecorView not attached to window manager(Android Dialog崩溃)

热门文章

  1. java编写记事本程序出现图形,高手帮忙啊,老师布置了一个作业,要用java编写一个记事本程序...
  2. 数据结构与算法--二叉树的深度问题
  3. 得到选择框句柄 怎么操作_知道借名买房有风险,只能选择借名买房该怎么操作?...
  4. word List 45
  5. java printf 版本_java – PrintStream类型中的printf(String,Object ...
  6. P1848 [USACO12OPEN]Bookshelf G(线段树优化 DP)
  7. Codeforces Round #733 (Div. 1 + Div. 2) E. Minimax 分情况讨论 + 思维
  8. HTTP协议支持的方法
  9. Double Strings
  10. Acwing 273. 分级