目录
概率图模型(Probabilistic Graphical Model)
条件随机场(Conditional Random Field)
概率图模型(Probabilistic Graphical Model,PGM)、隐马尔科夫模型(Hidden Markov Model,HMM)、最大熵模型(Maximum Entropy Model,MaxEnt)、最大熵马尔科夫模型(Maximum Entropy Markov Model,MEMM)和条件随机场(Conditional Random Fields,CRF)之间有不可分割的联系,在翻阅了很多此类模型的文章后,有很多收获,但有些地方还一知半解,决定先记录。此文完成后,还是有很多细节不能让自己满意,但是知识的熟悉是循序渐进的,不是么,以后有新的理解再加入。遂成此文。
我们从概率图模型说起。
概率图模型(Probabilistic Graphical Model)
这里提到的概率图模型实际是一类模型的总称,比如后面说到的HMM、CRF等都属于概率图模型,概率图模型的核心是概率图,而概率图是建立在图理论和概率理论两者之上的。对于不了解图理论的读者,我们有必要先认识一些关于图的基本概念。一个图G=<V,E>是由顶点集和连接顶点的边(edge)的集合构成。这里V是图G中顶点的集合,E是边的集合,连接两个顶点的边一条边记作。根据图中的边是否有方向分为有向图和无向图,有向图根据是否含有环分为有向无环图和有向有环图。环是指从某个顶点出发按照边的方向可以再回到该顶点,无论是无向图,还是有向图,它们的边可以赋予一个权重值,所以又可以分为有权图和无权图。如图:
图(a)中的所有边都没有方向,是一个无向图。它有4个顶点和4条边,对于无向图来说,边和是一个意思;
图(b)中含有有方向的边,是一个有向图,图中没有环,所以是一个有向无环图(DAG),顶点集,边集,对于有向图来说,边和就是两个意思了;
图(c)是一个有向图,而且含有环(比如从顶点出发沿着,,可以再次回到),所以是一个有向有环图
图(d)是在无向图的基础之上,给图中的边赋予了一个数值(通常称为权重值),使用表示,比如连接和的边的权重值,所以是一个赋权无向图;
图(e)是在有向图的基础之上,给图中的边赋予了一个权重,比如连接和的边的权重值,所以是一个赋权有向图。
下面来说概率图模型就容易理解些了,概率图模型是基于概率的一种图模型,所以说它是一种特殊的图。下面我们看看概率图模型特殊在哪里。如果图中的每个顶点都表示一个随机变量,而图中的一条边表示两个随机变量间存在依赖关系,这就得到了概率图。举个例子,比如现在有两个随机变量,随机变量表示天气情况,取值={下雨,晴天},y表示进行的活动,取值={外出,在家},而进行什么活动看天气情况而定。随机变量x的概率分布如下:
x | 下雨 | 晴天 |
P(x) | 0.6 | 0.4 |
随机变量y的概率分布如下:
y | 外出 | 在家 |
P(y) | 0.3 | 0.7 |
可以使用如下概率图表示:
看上去也没啥,不就是上面说的图么,确实是这样,不过不同的是,图中的每个顶点表示一个随机变量,边表示两个随机变量存在依赖关系。同样地,概率图根据随机变量间的依赖关系分为:有向概率图和无向概率图。有向概率图表示顶点之间的依赖关系是有因果关系的,而无向概率图表示顶点之间的依赖关系并没有因果关系,存在相互依赖关系。如图:
下面给出有向概率图和无向概率图的一般表述:
有向概率图
一个有向无环图G=<V,E>,对于一个n元随机变量,使用顶点表示随机变量,边表示随机变量和随机变量之间具有概率因果关系,是因,为果,顶点集合记为V,边集合记为E,则G=<V,E>构成有向概率图,也称为贝叶斯网络(Bayesian network)。
下面举个例子来理解下,考虑n元随机变量的联合概率分布,根据链式法则,有
上式就可以使用有n个顶点的概率图来表示,为了方便,我们取n=4,即
概率图如下:
再举个例子,如下:
对应的概率图如下:
通常情况下,如果相互独立,联合概率可以写成给个随机变量的乘积,即:
如果他们不独立呢?比如:
但我们同样发现右边可以写成一些随机变量条件概率的乘积,类似地,我们说它们条件独立。比如条件独立,记作,表示在给定情况下,独立。两个随机变量条件独立在概率图中没有边连接,否则存在边连接。
我们看个有趣的问题:假设有四个随机变量,它们关系如下:
,
我们发现使用一个有向无环图是无法表示上面的这个条件独立关系,如图:
图中使用两个有向无环图(DAG)分别表示了两个条件独立关系,无法在同一个有向无环图中表示,否则存在环。对此,有必要引入无向概率图模型(Undirected graphical models),也称为马尔科夫网络(Markov network)。这样上面的这个例子,可以使用如下无向概率图模型表示了:
这样就可以如下表述:
无向概率图
对于一个n元随机变量,使用n个顶点分别表示这n个随机变量,边表示随机变量和随机变量之间具有的依赖关系,顶点集合记为V,边集合记为E,则G=<V,E>构成无向概率图,也称为马尔科夫网络(Markov network)
HMM模型
隐马尔科夫模型,也是一个概率图模型,我们在《隐马尔可夫链真相——从理论证明、算法实现到实际应用》一文中已经详细介绍过。不再累述。这里给出HMM模型的概率图,如下:
也就是状态随机变量只依赖于前一个状态随机变量,观测值随机变量只依赖于当前状态随机变量。
再介绍MEMM模型之前,我们介绍一个相关的模型——最大熵模型(MaxEnt),它基于最大熵原理。通过它可以解释为什么MEMM模型可以表示成指数形式,具体如下:
MaxEnt模型
该模型可以使用GIS算法、IIS算法求解。以后有时间再补上,它说明了为什么MEMM模型可以写成指数形式。
MEMM模型
在HMM模型中,当前的观测值只依赖于当前的状态,也就是,而在MEMM模型中,当前的观测值值不仅依赖于当前的状态,而且还依赖之前的状态,也就是说不仅和状态有关,而且和状态的转移有关。MEMM模型对应的概率图,如下:
仍然以词性标注为例。假设是个定的句子,词性标注以后我,也就是每个词标注一个词性。
为了容易看,上式可以把x去掉,式子第一步是基于条件概率的链式法则:
第二步是基于马尔科夫假设,即状态只和有关。
下面给定其中任意一项的假设,如下:
这样
关于指数部分,后面在条件随机场再解释。特征函数刻画了状态的局部特征(第和第个位置)。
条件随机场(Conditional Random Field)
基本概念
经常在很多地方看到这些概念:随机场、条件随机场、线性链条件随机场、马尔科夫条件随机场。关于他们并未找到充足的文献来支撑。本文给出作者的一个理解。本文根据这些概念的范围从大到小依次为:
随机场 条件随机场 线性链条件随机场 马尔科夫条件随机场
符号表示包含的意思,也就是右边是左边的特例。即马尔科夫条件随机场是线性链条件随机场,线性链条件随机场是条件随机场,条件随机场是随机场。下面给出解释:
随机场是指现在有若干个位置(概率图的顶点)组成的整体,当给每个位置按照某种概率分布随机赋予一个值后,这个整体就被称为随机场。
随机场的这个说法是从一些文章中摘录过来的,大致理解是指:随机场和随机变量有关。具体不用理解太细,本文不关注。条件随机场是有文献依据的,如下:
条件随机场是由John Lafferty、Andrew McCallum和Fernando C.N. Pereira在《Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data》一文中首次提出的,原文定义如下:
看完这段描述,我不知道说了啥。之后理解如下:
(1)首先都是随机向量,由随机变量构成,比如:
,
m和n可以相同,也可以不同。比如对于词性标注,m=n,举个例子,对如下句子进行词性标注:
我是中国人
先分词得到:我/ 是/ 中国人/
这对应随机向量,每个代表位置i出现的词,每个词的词性构成随机向量对应,每个表示的词性(比如名次,动词,代词等)。因为在条件随机场中,通常先给定的,所以在概率图中使用一个顶点表示。
(2)条件随机场对应的概率图G是一个无向图(也可以看成有向图,但是有向的部分不影响概率图,可忽略),如图:
X是随机向量,在图中使用一个顶点表示,它与每个随机变量使用有向边连接。每个随机变量使用一个顶点表示,它们之间如果有依赖,使用无向边连接(图中不好表示,所以未画出)。因为X对图不影响,所以任务G是一个无向概率图。
(3)定义中给出了概率图需要满足马尔科夫性质(Markov property),如下:
先看等式右边,表示顶点和有连接,与有连接的,称为顶点的邻居,的所有邻居使用表示,那这个条件概率就表示在给定和的情况下,出现出现的概率,可等价记为:
不是的那些顶点也构成一个集合记为
等式左边表示在给定随机向量和随机向量中除去随机变量后的随机变量的情况下,出现的概率,实际就是:
等价于
那定义中等式就等价于
这不就表明在给定领域的情况下,与无关么?也就是条件独立,使用之前说的条件独立记法就是
卧槽,我在想作者直接这么写,大家不就明白了吗?足以看出作者很有深度和风度。
所以马尔科夫性质可表述为:对于任何一个顶点,在给定它的邻居情况下,与它的非邻居条件独立。
特别地,如果随机向量的结构相同,也就是m=n,通常称为线性链条件随机场(Linear-chain Conditional Random Field),比如上面说的词性标注就是一个线性链条件随机场的例子。为啥称为线性链?我猜测是因为一个随机变量对应一个随机变量。
马尔科夫随机场是指随机变量不仅和前一个随机变量有关,而且和后一个随机变量有关。用概率图表示就是:
如果没有特别说明,后面我们说到的条件随机场指的就是马尔科夫条件随机场了。
我整理它们的区别如下:
(1)随机场
随机场的随机变量可能很多,不仅仅只局限在,它对应一般的概率图;
(2)条件随机场
条件随机场中,随机变量为随机向量,两个随机向量的结构是否相同,不明确,之间关系不明确,而依赖,它们之间存在有向边;
(3)线性链条件随机场
在条件随机场基础上明确随机向量具有相同的数据结构;
(4)马尔科夫条件随机场
在线性链条件随机场基础上,再明确之间关系为:与和有关。
参数化
如果条件随机场的概率图是一个树,根据随机场的基础理论,可以得到如下的结论:
这个到底怎么证明的,暂就不用深根刨地了,下面做些解释,帮助理解:
(1)是随机向量的某个取值,比如:;
(2)表示参数的集合;
(3)分别表示条件随机场对应的概率图G=<V,E>的所有边集合和顶点集合;
(4)表示与边有关的特征函数,表示与顶点有关的特征函数,特征函数是一个二值函数,要么取0,要么取1,自个儿定义;
特征函数中表示中与边e相关的那些分量集合,同理表示中与顶点v相关的那些分量集合。特征函数怎么去呢?这里举个例子:
对于词性标注问题,如果单词为大写,而且对应的词性为专有名词,假设这个特征是,那么如下:
特征函数定义多个个,根据实际情况定。
(5)上面表示概率正比于一个指数,我们把这个比率加上,变成等式,如下:
Z是常数。
(6)和是实现给定的,可以看成常数,这样指数里面的部分实际就是一个超平面,它可以取到任何一个实数,这样任意给定一个
,总是能够找到参数使得上面这个等式成立。
下面我们看下马尔科夫条件随机场的这个概率如何。如下:
式子里面的各个参数不再解释,与上面类似。这里说明下,它是规范化因子,规范化啥呢?就是让概率之和为1,即
上式两边对y求和得到
解得,如下:
是事先给定的,所以可以看成常数。这和sofmax函数有些类似,举个例子:
比如对于向量,怎么规范化呢,先变成指数,然后规范化
每个分量可以看成上面的概率P,。
下面举个例子,理解一下特征函数。还是以词性标注为例,假设给定一个分词后句子如下:
我/ 是/ 中国人/
即:我,是,中国人。为了简化假设只有两种词性{1(名词),2(动词)}。这样标注的话,总共有6中可能,我们来计算标注为122的非规范化的概率。首先我们需要人为设定一些特征。这里为了简化,和分别只设定一个特征函数。如下:
注意特征函数,我们只写出了取值为1的情况,其余情况值为0.
则。这只是求出一种一种词性标记,可能还有其他的,哪种比较好呢?我们通常认为概率大的较好,也就是在句子中出现的可能越大。用数学表述,就是如下这样的优化问题:
即:
与HMM模型中三个经典问题对应,CRF中也有这三个经典问题,分别如下:
(1)评估问题
给定条件概率,计算概率和。利用前向后向算法求解。
(2)学习问题
给定训练数据,对应标记数据,事先认为定义的一些特征函数,利用这些已知数据求解模型中的参数。比如梯度下降法,牛顿法,拟牛顿法等可以求解。
(3)解码问题
已知第(2)个问题中已经学习好的模型,给定数据,如何预测条件概率,也就是求解与与数据对应的?使用viterbi算法。
参看HMM模型,关于具体的细节,有时间再补上。
一般CRF
同样以词性标注为例。在CRF中,不像MEMM模型中使用指数函数刻画局部状态转移,在CRF中,使用指数函数刻画整体:
其中
而这里的特征函数可以理解成局部特征函数的和,即
其中就是MEMM模型中的局部特征函数。
总结
到这,概率图模型、HMM模型、MaxEnt模型、MEMM模型和CRF模型介绍完了。我自己感觉都还是一头雾水。思考再三,还是总结下。
(1)概率图模型
概率图模型是一类模型的总称,比如HMM模型时有向概率图模型,CRF模型是无向概率图模型,它是基于概率论和图论两大理论的,本文只给了一些基本概率,概率图有自己的一套理论体系,有兴趣可以学习。
(2)HMM模型
它有两个重要假设:第一个是,当前状态只有前一个有关,第二是,当前观察值只有当前状态有关。前面画了HMM模型的概率图,它是有向概率图,箭头方向是如下流动的:从初始分布开始,根据初始分布先成第一个观察值,然后根据状态转移概率,得到第二个状态分布,依据分布生成第二个观测值,依次下去……
(3)MaxEnt模型
该模型基于最大熵理论,得到了MEMM模型的指数形式表达。
(4)MEMM模型和CRF模型
这两个模型都是使用指数形式表达,MEMM考虑局部特征,而CRF考虑整体特征。
简单应用——基于CRF地名识别
这里使用CRF++工具来实现,具体查看网址https://taku910.github.io/crfpp,CRF++分别提供了Linux和Windows版本,个人建议使用Linux版本,我这为了简单,使用的是Windows版本。
1、下载安装CRF++
将下载的zip压缩文件,解压即可,解压后目录结构如下:
我这边解压在E盘,即E:\CRF++-0.58。
2、数据预处理
使用的训练数据如下:
先将数据按一定比例划分为训练数据和测试数据,比如预处理后的训练数据如下:
每一行都是一个token,对token进行标注,分别为B,M,E,S,O。分别表示:
B:地名的开始的字
M:地名中间的字
E:地名结尾的字
S:单独的字是一个地名
O:不是地名
3、使用CRF++需要事先定义模板
比如定义的模板如下:
它对应CRF的特征函数。
模板分为两类,一类是Unigram,以字母U开头,它是一元模型特征,对应单个字,另一类是Bigram ,以字母B开头,它是二元模型特征,对应当前输出token和前一个输出token的具体,具体可参见官网。
4、训练
使用训练数据和之前定义好的模板,执行行如下命令进行训练
crf_learn -f 4 -p 8 -c 3 template train.txt model
训练输出如下:
训练结束后,模型保存在model文件中。
5、对测试数据进行识别
接下来就可以使用之前训练好的模型model对测试数据进行地名识别了,执行如下命令:
crf_test -m model test.txt > test.rst
如图:
识别后的结果保存在test.rst文件中。
6、评估
使用test.txt测试数据(真实样本)和test.rst(预测样本)进行对比统计,计算正确率等。