条件随机场Conditional Random Field-CRF入门级理解
条件随机场Conditional Random Field-CRF入门级理解
有向图与无向图模型
CRF模型是一个无向概率图模型,更宽泛地说,它是一个概率图模型。现实世界的一些问题可以用概率图模型表示。这里可以用一个简单的例子说明:建立一个简单的图模型来分析一部电影是否会获得高票房。这个例子主要用于介绍概率图模型,其中的观点内容纯属编造。经过“认真”分析,发现一部电影的票房和以下因素有很大的关系:
- 剧本是否精彩,内容是否充实;
- 演员阵容是否强大,是否有可以吸引票房的明星;
- 演员表演是否精彩到位;
- 前期宣传是否到位;
- 上映时间是否合适,同期是否有其他实力强劲的电影;
- 投资。
上面的这些因素可以转化成一个个随机变量,将它们按照彼此之间的依赖关系进行连线,就得到了下图:

从模型图中可以很清晰看出每一个项目与电影票房之间的关系。拥有了这些关系,就可以根据其中一些变量推断出其他变量的情况。这里将每一个变量都离散化为2个等级——好和差,然后就可以根据分析得到的经验构建心目中的条件概率分布表,如下图所示:

有了这个图和对应的表格,整个概率图模型就变得十分明确,这个图模型可以帮助完成很多事情,读者可以使用它在概率图模型的小世界中完成各种各样的推断,例如:
计算联合概率(Joint Probability)。一个投资少、宣传弱、阵容弱、表演弱且票房好的电影出现的概率有多大?公式如下:

计算边际概率(Marginal Probability)。投资多,阵容强,票房好,其他无所谓的电影出现的概率有多大?公式如下:

计算条件概率(Conditional Probability)。当一个电影宣传强、阵容强、表演强、票房好时,它(竟然)投资少的概率有多大?公式如下:

可以看出,这些推断都可以通过上面的图模型很好地推断出来,为理解这个模型提供更多的帮助。以上是一个简单的概率图模型的例子。当然,上面这个模型是一个有向图模型,还不是CRF归属的无向图模型。
概率图模型主要由有向图和无向图两部分组成。那么无向图和有向图有什么区别呢?就是随机变量的依赖关系。方向有什么好处和坏处呢?有了方向,整个概率图中概率或者信念(belief)的流动方向就可以确定,就能知道一个个随机变量之间的依赖关系,例如在上面的例子中,好几个因素和投资都有依赖关系,所以在求解时,投资这个因素需要首先明确。
在有向图模型中,每一个随机变量都拥有自己的条件概率分布(Conditional Probablistic Distribution,CPD),这些随机变量的概率依赖于它的父辈随机变量的取值。这样的局部条件概率是很有用的,它使得计算联合概率和边际概率时变得比较容易。以上面的那些例子为例,在计算时我们只需要将这些CPD的取值连乘起来就可以了。
无向图因为没有方向,也就没有CPD,但是无向图模型还是有自己的办法。无向图模型中同样的一个个类似CPD的东西被称作Factor,像有向图中的节点拥有自己的CPD一样,Factor也有自己的表示形式。它也可以像CPD一样用表格的形式表示。
例如空间内有四个粒子,每个粒子都有两种状态,它们之间还存在着一定的相互影响关系,这个关系由Factor来就如下图所示:

从上面的例子可以看出,Factor和CPD相比有一个明显的不同。CPD中所有的概率和为1,而Factor里所有的条目-entry没有和且和并不为1。
和不为1并不是很好理解,概率的基本原则就是需要所有事件发生的概率和为1。当然这没有错,因为无向图的Factor表示的并不是条件概率,而是一种更为对称的亲密关系(affinities)。求解无向图的联合概率需要换一种方法,那就是把所有的Factor像有向图模型的贝叶斯网络那样都连乘起来,再进行归一化。
在上面的例子中,如果要求P(A=1,B=1,C=1,D=1)的概率,那么有:

上面的计算也可以用代码的形式进行计算:

这样就得到了所有的联合概率:

从代码中可以看出,没有了有向图的依赖,无向图少了很多约束,计算公式反而更简洁。当完成归一化后,这些计算结果就可以像有向图那样表示随机变量的联合概率。这些联合概率实际上代表了无向图模型的概率分布,这种分布被称为Gibbs分布 。Gibbs分布就是利用Factor表示的无向图模型的概率分布,它的形式如下所示:

实际上Gibbs分布的形式展示了利用无向图模型计算联合概率的过程。得到了联合概率,就可以计算边际概率和条件概率。通过上面的计算,无向图模型和有向图模型又走到同一起跑线。由于两者确实存在明显不同,因此两者的名字也有些不同,有向图网络一般被称为“贝叶斯网络”(Bayesian Network),而无向图网络一般被称为“马尔可夫随机场”(Markov Random Field)。
为什么会有无向图和有向图这两类图模型,两者能不能合二为一?实际上这两种模型有各自的应用领域,有向图模型虽然清晰简单,但它并不能表示所有的真实场景,有向图模型通常需要一个有顺序的推断过程,这里暗示了一些依赖关系和独立条件,而无向图模型由于没有方向,也就没那么多限制,所以无向图模型可以用来对更多更复杂的问题进行建模。但是放弃了方向,也就意味着放弃了条件依赖和一些条件独立的特性,于是只能用Factor的形式和Gibbs分布进行表示,表示形式有些复杂。
除了上述介绍的区别,Factor和CPD相比也有很大不同。因为没有和为1的限制,所以整体上看它对数值要求很宽松,但是它也有自己的坏处,那就是想从Factor的表格形式中读出一些有价值的信息是比较困难的,这个困难有两个方面:
首先,因为不具有和为1的限制,无向图模型的概率比较抽象。对比贝叶斯网络的CPD,就会发现CPD描述得更加清楚。
其次,由于Factor的依赖关系不明朗,表格中记述的一些关系和全局状态下的关系有时是相反的。当读者具体观察某个Factor时,会觉得某组随机变量比另外一组亲密度高,产生的概率一定更高;但是如果站在全局观察,把联合概率计算出来再去计算它们的边际概率,就会发生Factor内表述的关系和全局信息相反。CPD在这方面具有绝对优势,局部的条件概率放在全局还是合理的。
这里举一个例子,如果将上面的代码做一些改动,去求A、B的边际概率,就有:

和A、B所在的Factor相比,Ф(A=1, B=1)在Factor中第二大,但是到了边际概率中它却成了第三大,说明从Factor中分析有时并不能看出某个事件的边际概率。
至此,概率图模型和有向无向图模型相关的基本内容就介绍完了。
Log-Linear Model
在了解无向图模型和Gibbs分布相关概念后,可以针对具体问题进行建模了,但是实际上,上述表格形式的模型并不好用。因为采用表格的形式去表达模型,需要将随机变量的所有取值形式都写出来,如果变量的取值范围不大还可以接受,如果取值范围非常大,那么这种表格形式对建模者来说就是个不小的负担,所以表示Factor形式需要改变。为了解决这个问题,Factor的形式需要被重新定义,首先需要把Factor函数转换成能量函数:

我们把Ф(X)称作Factor函数,把ξ(X)称作能量函数(Energy Function)。在物理学中,能量越大的物质存在的概率越小,能量越小的物质存在的概率越大。这个性质很符合函数的关系。这个函数带来了两个好处:
首先,Factor函数中的每一项表示了随机变量间的亲密关系,一般来说这个值是非负的,这个限制会对建模造成困扰,因此利用指数函数变换,现在的Energy函数摆脱了非负数的限制,变得可正可负。
另外还有一个十分重要的特性:原来的乘法关系变成了现在的加法关系。现在有:

变成加法关系后,建模求解都变得简单了不少,因为加法的关系更利于分析和计算。当然,模型形式变换到这一步还不够,想要得到进一步的化简,就要引入Feature这个概念。
我们已经了解了Factor的一般表现形式--表格的形式,但很多时候Factor的表格是比较稀疏的。虽然参与一个Factor的随机变量很多,但是真正有意义的亲密关系其实没几个。这样表格的形式就变得不再实用,Feature表示的形式更适合这种场景,那么Feature形式是什么样的呢?
举个例子,有一个由两个灰白像素随机变量组成的Factor,每个变量的取值范围为[0,255]的整数。如果用Factor表示,这个Table将会有256*256=65536个条目,但是如果这个Factor中表示的亲密关系和两个像素的值是否相等有关,像素值相等是关系为1,不相等为0,那么用Feature表示需要写成:

这种写法只要用两个条目就可以表述清楚。所以Feature就是通过尽可能地合并相同结果使Factor的表示变得简洁。以上就是Log-Linear模型的特点,可以看出它对无向图模型进行了极大的化简。未来的模型主要基于这一个框架进行构建。
条件随机场
条件随机场的全称是Conditional Random Field(CRF)。它是马尔可夫随机场的一种特殊形式。前面说到了马尔可夫随机场和联合概率分布之间的计算关系,这里的条件随机场则主要对应了条件概率分布。条件随机场中参与计算的有两部分随机变量—X和Y。一般来说X被称作观察变量,也就是已知的变量,Y被称作目标变量或者隐含变量,是需要通过模型求解的变量。CRF的出现与贝叶斯公式有关:

其中,P(X,Y)就是图模型的联合概率分布,而在有些问题中,对X单独建模十分困难,而对X,Y联合建模则相对容易些,这样的问题需要特殊的条件约束。条件随机场不允许任何一个Factor中只包含X的节点,Factor中要么包X和Y,要么只包含Y。于是上面的公式就可以做一定的修改,使得在建模时避免这些问题。这里给出一种相对简单的条件随机场,如下图所示:

它的形式如下所示:

从图中可以观察出,它确实没有只包含X的Factor。模型的条件概率通过计算联合概率和边际概率得到,而边际概率又是通过联合概率得到,这样难以建模的边际概率就通过联合概率得到解决。
采用无向图模型建模的CRF具有很强的表达能力和灵活性,但是计算起来却不那么容易。所有的概率推断必须从求解联合概率入手,还要计算非常复杂归一化项,所以计算是无向图模型的一大难题。
学习来源:《深度学习轻松学》第九章—图像的语义分割,作者冯超
条件随机场Conditional Random Field-CRF入门级理解的更多相关文章
- 条件随机场conditional random field
主要翻译自http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/,原作者是MIT的大神,加入了一些我自己的 ...
- 条件随机场(Conditional random field)
条件随机场真是把我给折磨坏了啊,本以为一本小小的<统计学习方法>攻坚剩下最后一章,心情还是十分愉悦的,打算一口气把它看完,结果真正啃起来真是无比的艰难啊,每一句对我都好像是天书一般,怎么这 ...
- 条件随机场 Conditional Random Fields
简介 假设你有冠西哥一天生活中的照片(这些照片是按时间排好序的),然后你很无聊的想给每张照片打标签(Tag),比如这张是冠西哥在吃饭,那张是冠西哥在睡觉,那么你该怎么做呢? 一种方法是不管这些照片的序 ...
- Conditional Random Fields (CRF) 初理解
1,Conditional Random Fields
- 条件随机场(Conditional random field,CRF)
- 随机场(Random field)
一.随机场定义 http://zh.wikipedia.org/zh-cn/随机场 随机场(Random field)定义如下: 在概率论中, 由样本空间Ω = {0, 1, …, G − 1}n取样 ...
- NLP —— 图模型(二)条件随机场(Conditional random field,CRF)
本文简单整理了以下内容: (一)马尔可夫随机场(Markov random field,无向图模型)简单回顾 (二)条件随机场(Conditional random field,CRF) 这篇写的非常 ...
- 条件随机场(conditional random field,CRF)模型初探
0. 引言 0x1:为什么会有条件随机场?它解决了什么问题? 在开始学习CRF条件随机场之前,我们需要先了解一下这个算法的来龙去脉,它是在什么情况下被提出的,是从哪个算法演进而来的,它又解决了哪些问题 ...
- CRF(Conditional Random Field)
条件随机场是近几年自然语言处理领域常用的算法之一,常用于句法分析.命名实体识别.词性标注等.在我看来,CRF就像一个反向的隐马尔可夫模型(HMM),两者都是用了马尔科夫链作为隐含变量的概率转移模型,只 ...
随机推荐
- Android性能优化问题总结
性能优化这块,分为UI性能优化.内存优化.数据库优化.网络优化.耗电优化等等.可以从1.如何发现问题,2.怎么解决问题,3.解决效果对比,这几个方面去描述.举个简单例子——UI优化,可以从 UI出现什 ...
- <自动化测试方案_5>第五章、代码单元自动化测试
第五章.代码单元自动化测试 代码单元测试需要根据编程语言,选择单元测试框架,然后访问类方法,函数.代码单元测试做自动化,相比API.UI自动化做起来更加麻烦,建议放到待API自动化测试.UI自动化测试 ...
- Verilog实现模长等于六十的二进制编码计数器
注释都加上了 由于参考网上的代码,其实现了置数 ,使能等功能,一并加上了 编译结果能通过 百度网盘文件下载:https://pan.baidu.com/s/1IVTD19NRk-s2dKBXtATkA ...
- MySQL5.7 搭建主从同步
性能更好的新服务器申请下来了,我们决定在2台新服务器上使用mysql5.7,并且使用主从同步.读写分离架构,很不幸这个任务落到了我的头上.读写分离是在业务代码中实现的,在此不做详述,介绍一下我搭建My ...
- [20190213]测试服务端打开那些端口.txt
[20190213]测试服务端打开那些端口.txt --//前几天测试使用发送信息到/dev/tcp/ip_address/port,测试端口是否打开.写简单写一个脚本验证看看. $ seq 1 65 ...
- 洗礼灵魂,修炼python(90)-- 知识拾遗篇 —— 协程
协程 1.定义 协程,顾名思义,程序协商着运行,并非像线程那样争抢着运行.协程又叫微线程,一种用户态轻量级线程.协程就是一个单线程(一个脚本运行的都是单线程) 协程拥有自己的寄存器上下文和栈.协程调度 ...
- 洗礼灵魂,修炼python(68)--爬虫篇—番外篇之webbrowser模块
题外话: 爬虫学到这里,我想你大部分的网站已经不再话下了对吧?有检测报文头的,我们可以伪造报文头为浏览器,有检测IP,我们可以用代理IP,有检测请求速度的,我们可以用time模块停顿一下,需要登录验证 ...
- adb错误处理
C:\Users\****\source\****>adb connect 192.168.10.* adb server version () doesn't match this clien ...
- jQuery设置radio、select、checkbox只读属性后,如何在后台得到数据
1 设置表单的readonly属性 对于radio.select.checkbox来说,readonly属性对这三个标签不起什么作用. 2 设置表单的disabled属性 以radio为例说明. 代码 ...
- ELK收集tomcat访问日志并存取mysql数据库案例
这个案例中,tomcat产生的日志由filebeat收集,然后存取到redis中,再由logstash进行过滤清洗等操作,最后由elasticsearch存储索引并由kibana进行展示. 1.配置t ...