crf
http://blog.csdn.net/pipisorry/article/details/78397543
CRF简介
HMM的局限性
1,该模型定义的是联合概率,必须列举所有观察序列的可能值,而这对多数领域来说是比较困难的。
2,基于观察序列中的每个元素都相互条件独立。即:在任何时刻观察值仅仅与状态序列中的一个状态有关。而大多数现实世界中的真是观察序列是有多个相互作用的特征和观察序列中较长范围内的元素之间的依赖而形成的。
条件随机场就解决了第二个局限性。
词性标注问题
示例
假设你有许多小明同学一天内不同时段的照片,从提裤子起床到脱裤子睡觉各个时间段都有。现在的任务是对这些照片进行分类。比如有的照片是吃饭,那就给它打上吃饭的标签;有的照片是跑步时拍的,那就打上跑步的标签;有的照片是开会时拍的,那就打上开会的标签。
朴素方法
问题来了,你准备怎么干?一个简单直观的办法就是,不管这些照片之间的时间顺序,想办法训练出一个多元分类器。就是用一些打好标签的照片作为训练数据,训练出一个模型,直接根据照片的特征来分类。例如,如果照片是早上6:00拍的,且画面是黑暗的,那就给它打上睡觉的标签;如果照片上有车,那就给它打上开车的标签。
这样可行吗?由于我们忽略了这些照片之间的时间顺序这一重要信息,我们的分类器会有缺陷的。举个例子,假如有一张小明闭着嘴的照片,怎么分类?显然难以直接判断,需要参考闭嘴之前的照片,如果之前的照片显示小明在吃饭,那这个闭嘴的照片很可能是小明在咀嚼食物准备下咽,可以给它打上吃饭的标签;如果之前的照片显示小明在唱歌,那这个闭嘴的照片很可能是小明唱歌瞬间的抓拍,可以给它打上唱歌的标签。所以,为了让我们的分类器能够有更好的表现,在为一张照片分类时,我们必须将与它相邻的照片的标签信息考虑进来。这就是条件随机场(CRF)大显身手的地方!
CRF基本思想
应用到nlp中,就是给一个句子中的每个单词注明词性(而不是给每个单词单独预测词性)。比如这句话:“Bob drank coffee at Starbucks”,注明每个单词的词性后是这样的:“Bob (名词) drank(动词) coffee(名词) at(介词) Starbucks(名词)”。
用条件随机场来解决这个问题。这里有5个单词,我们将:(名词,动词,名词,介词,名词)作为一个标注序列,称为l,可选的标注序列有很多种,我们要在这么多的可选标注序列中,挑选出一个最靠谱的打分最高的标注序列作为我们对这句话的标注。假如我们给每一个标注序列打分,如凡是标注中出现了动词后面还是动词的标注序列,要给它负分!上面所说的动词后面还是动词就是一个特征函数,我们可以定义(或者使用神经网络学习)一个特征函数集合,用这个特征函数集合来为一个标注序列打分,并据此选出最靠谱的标注序列。也就是说,每一个特征函数都可以用来为一个标注序列评分,把集合中所有特征函数对同一个标注序列的评分综合起来,就是这个标注序列最终的评分值。
某小皮
条件随机场CRF
关于条件独立性和团(最大团)的知识可参考[马尔可夫随机场 MRF]
条件随机场CRF
如果给定的马尔可夫随机场MRF中每个随机变量下面还有观察值,那么我们的目标就是要确定给定观察集合下的MRF分布,也就是条件分布,而这种条件分布就是条件随机场。简单的说,条件随机场(CRF)类似于MRF,只不过CRF比MRF多了一个观察集合,或者说,CRF本质上就是给定了观察值集合的MRF。
设G=(V,E)是一个无向图,Y={Y_v|v∈V}是以G中节点v为索引的随机变量Y_v构成的集合。在给定X的条件下,如果每个随机变量Y_v服从马尔可夫性,即
那么条件概率分布P(Y|X)就是一个条件随机场(conditional random fields, CRF)。
上式中的w ~ v表示在图G=(V, E)中与节点v有边连接的所有节点,w≠v表示v以外的所有节点,Y_v,Y_u, Y_w为节点v,u,w对应的随机变量。
线性链条件随机场
设X = (X1, X2,..., Xn), Y = (Y1, Y2, ..., Yn)均为线性链表示的随机变量序列,若在给定随机变量序列X的条件下,随机变量序列Y的条件概率分布P(Y|X)构成条件随机场,即满足马尔可夫性:
P(Y_i| X, Y1, ..., Y_i-1, Y_i+1, ...., Y_n)= P(Y_i | X, Y_i-1, Y_i+1) i= 1, 2, ..., n (在i=1和n时只考虑单边)
则称P(Y|X)为线性链条件随机场。线性链条件随机场也是对数线性模型。
在标注问题中,X表示输入观测序列,Y表示对应的输出标记序列或状态序列。本博客也只关注线性链CRF!
线性链CRF的参数化形式
根据Hammersley-Clifford定理:概率无向图模型的联合概率分布P(Y)可以表示为如下形式[马尔可夫随机场 MRF]:
,可以给出线性链CRF P(Y | X)的因子分解式,各因子是定义在相邻两个结点上的函数。
设P(Y|X)为线性链条件随机场,则在随机变量X取值为x的条件下,随机变量Y取值为y的条件概率具有如下形式:
其中,
式中,t_k和s_l是特征函数,λ_k和μ_l是对应的权值。Z(x)是规范化因子,求和时在所有可能的输出序列上进行的(lz: 也就是将负能量函数表示为 最大团上给定X时所有t特征和所有s特征线性加和)。t_k是定义在边上的特征函数,称为转移特征,它依赖于当前和前一个位置,t(yi-1, yi, x, i)表达“在给定观测x的情况下从上个节点yi-1转移到这个节点yi的情况”。s_l是定义在节点上的特征函数,称为状态特征,依赖于当前位置,表达“当前节点yi是不是标记x的情况”。t_k和s_l都依赖于位置i,是局部特征函数。
通常,特征函数tk和sl取值为1或0;当满足特征条件时取值为1,否则为0。条件随机场完全由特征函数t_k,s_l和对应的权值λ_k,μ_l确定。
线性链CRF中的特征函数
特征函数的参数
现在,我们正式地定义一下什么是CRF中的特征函数,它接受四个参数:
- 句子s(就是我们要标注词性的句子)
- i,用来表示句子s中第i个单词(的位置)
- l_i,表示要评分的标注序列给第i个单词标注的词性
- l_i-1,表示要评分的标注序列给第i-1个单词标注的词性
它的输出值是0或者1。0表示要评分的标注序列不符合这个特征,1表示要评分的标注序列符合这个特征。
从特征函数到概率
假设已经定义好一组特征函数了,我们要给每个特征函数f_j赋予一个权重λ_j。现在,只要有一个句子s,有一个标注序列l,我们就可以利用定义好的特征函数集来对l评分。
上式中有两个求和,外面的求和用来求每一个特征函数f_j评分值的和,里面的求和用来求句子中每个位置的单词的的特征值的和。
对这个分数进行指数化和标准化,我们就可以得到标注序列l的概率值p(l|s),如下所示:
特征函数的定义
举几个特征函数(集)定义的具体的例子,帮助增强大家的感性认识。
当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,对所有的特征函数加权求和,必要的话,可以把求和的值转化为一个概率值。
非规范化条件概率计算示例1
设有一个标注问题:输入观察序列为X = (X1, X2, X3),输出标记序列为 Y = (Y1, Y2, Y3), Y1, Y2, Y3 取值空间为 {1, 2}。
假设特征t_k,s_l和对应的权值λ_k,μ_l如下:
其中,上式代表着特征值为1的条件,即:yi-1= 1, yi=2, x, i = 2, 3 时特征值取1。而特征值取0的条件被省略了。
如果写全的话是这样:
于是对给定的观测序列x,求标记序列为y =(y1, y2, y3) = (1, 2, 2)的非规范化条件概率(即没有除以规范化因子的概率)。
线性链条件随机场模型为:
于是对给定的观测序列x,标记序列y=(1, 2,2)的非规范化条件概率为
其实就是求图中s1 - t1 - s2 - t5 - s4这条路径的概率。其它标记序列同理可计算概率。从这可以看出,其实CRF的学习和预测也是和HMM一样的,分别利用前向-后向算法和维特比算法。
条件随机场的简化形式
CRF式11.10中同一特征在各个位置都有定义,可以对同一个特征在各个位置求和,将局部特征函数转化为一个全局特征函数,将CRF写成权值向量和特征向量的内积形式。
条件随机场的简化形式,即:
设有K1个转移特征,K2个状态特征,K=K1+K2,记:
然后,先对转移与状态特征在各个位置i求和,记做
用w_k表示特征f_k(y,x)的权值,即:
于是,条件随机场11.11~ 11.12 可表示为
若以w表示权值向量,即
以F(y, x)表示全局特征向量,即
则条件随机场可以写成向量w与F(y, x)的内积的形势:
条件随机场的矩阵形式
假设P_w(y|x)是由式11.15 ~ 11.16
给出的线性链条件随机场,表示对给定观测序列x,相应的标记序列y的条件概率。引进特殊的起点和终点状态标记y_0 = start,y_n+1 = stop,这时P_w(y|x) 可以通过矩阵形式表示。
对观测序列x的每一个位置i=1, 2,..., n+1,定义一个m阶矩阵(m是标记y_i取值的个数),表示隐含状态转移概率(这里不同特征不共享参数,因为M_i不相同,与位置相关)。
这样给定观测序列x,标记序列y的非规范化概率可以通过n+1个矩阵的乘积表示。
于是,条件概率P_w(y|x)是
其中,Zw(x)为规范化因子,是n+1个矩阵乘积的(start,stop)元素:
注意,y0= start,yn+1 = stop表示开始状态与终止状态,规范化因子Z_w(x)是以start为起点stop为终点通过状态的所有路径y1y2...yn的非规范化概率 之和。
非规范化条件概率计算示例2
给定一个图示的线性链条件随机场,观测序列x,状态序列y,i=1,2,3,n=3,标记yi∈{1,2},假设y0=start=1,y4=stop=1,各个位置的随机矩阵M1(x),M2(x),M3(x),M4(x)分别是
试求状态序列y以start为起点stop为终点所有路径的非规范化概率及规范化因子?
图11.6从start到stop对应于y=(1,1,1),y=(1,1,2), ..., y=(2,2,2)个路径的非规范化概率(如示例1是路径的概率)分别是:
a01b11c11,a01b11c12,a01b12c21,a01b12c22
a02b21c11,a01b21c12,a02b22c21,a02b22c22
然后按式11.12求规范化因子,通过计算矩阵乘积M1(x) M2(x) M3(x) M4(x)可知,其第一行第一列的元素为
a01b11c11+ a01b11c12 + a01b12c21+ a01b12c22 +a02b21c11 + a01b21c12+ a02b22c21 + a02b22c22
恰好等于从start到stop的所有路径的非规范化概率之和,即规范化因子Z(x)。
某小皮
CRF与其它模型的比较
Sutton, Charles, and Andrew McCallum. "An introduction to conditional random fields." Machine Learning 4.4 (2011): 267-373.
[顺序数据:状态空间模型]
CRF与逻辑回归的比较
观察公式和逻辑回归类似的形式:
多类lr:
逻辑回归是用于分类的对数线性模型,条件随机场是用于序列化标注的对数线性模型。
CRF与HMM的比较
本质区别:
CRF是判别式模型,直接构建观测序列(输入)和状态序列(输出)的条件概率分布P(y | x),因为没有y的知识,所以无法生成样本(并没有建模P(x | y)),只能判断分类;CRF并不能像HMM那样通过隐含序列推断最可能是观测序列,因为CRF模型中并没有计算p(x|y),不是生成模型。HMM是生成模型。
CRF是无向图模型,对(y1,y2 | x)建模;HMM是有向图模型,对p(x|y)和p(y2|y1)建模。
解决问题区别:
对于词性标注或者QT(query tagging)问题,CRF利用标注语料由字构词(组词)不仅考虑了文字词语出现的频率信息,也同时考虑了上下文的语境,具备较好的泛化能力,因此对歧义词和未登陆词都有较好的效果(且CRF解决这个问题并不在每一个节点进行归一化,而是由所有特征进行全局归一化,因此可以求的全局最优值),不足之处是需要一定量的歧义语料标注,线上效率略差(基于线上吞吐效率考虑,采用词CRF作为序列标注模型,之所以用词CRF是因为QT基本上是词和短语维度的识别);HMM模型也可以解决,但是隐马最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择;最大熵隐马模型解决了隐马的问题,可以任意选择特征,但由于其在每一节点上都要进行归一化,所以只能找到局部的最优值,同时也带来了标记偏见问题,即凡是语料中未出现的情况全都忽略掉。
HMM的思路是用生成办法,就是说,在已知要标注的句子s的情况下,去判断生成标注序列l的概率,如下所示:
这里:p(l_i|l_i-1)是转移概率,比如,l_i-1是介词,l_i是名词,此时表示介词后面的词是名词的概率。p(w_i|l_i)表示发射概率,比如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=y2|l_i-1=y1),我们可以定义这样的一个特征函数:
该特征函数仅当l_i = y2,l_i-1=y1时才等于1。这个特征函数的权重如下:
同样的,对于HMM中的每一个发射概率,我们也都可以定义相应的特征函数,并让该特征函数的权重等于HMM中的log形式的发射概率。用这些形式的特征函数和相应的权重计算出来的p(l|s)和对数形式的HMM模型几乎是一样的!用一句话来说明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中,每个特征函数的权重可以是任意值,没有这些限制。
from: http://blog.csdn.net/pipisorry/article/details/78397543
ref: [http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/] [如何轻松愉快地理解条件随机场(CRF)?]
[统计学习方法] [条件随机场(CRF) - 1 - 简介] [CRF分类]
相关阅读
本文框架如下:介绍——在命名实体识别任务中,BiLSTM模型中CRF层的通用思想详细的实例——通过实例来一步步展示CRF的工作原理实现—