机器学习实战——条件随机场(CRF)

版权声明: https://blog.csdn.net/u010487568/article/details/46485673

声明:本文是在《最优化方法》课程中阅读的Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data这篇文章后的总结。

CRF由来

条件随机场(CRF)这种用来解决序列标注问题的机器学习方法是由John Lafferty于2001年发表在国际机器学习大会ICML上的一篇经典文章所引入,对后人的研究起到了非常大的引领作用。特别是标注问题在很多自然科学领域有广泛应用,在自然语言处理领域对于自动分词、命名实体标注等问题都以这篇文章作为开山之作。

CRF的特性

1.判别式模型

CRF是一种概率无向图判别式模型,解决了HMM(隐马尔科夫)和MEMM(最大熵马尔科夫)模型在序列标注中的标注偏差(bias)问题。

2. 实用性高

CRF使用一个单独的指数模型来表示在给定观测序列条件下整个序列的标签的联合概率,不同状态下的不同特征能够相互进行平衡。同时,可以把CRF当做一个具有非规范化的转移概率的有限状态模型,使用MLE或者MAP进行学习之后可以得到一个定义良好的可能标注的概率分布。同时,训练的损失函数是凸函数,保证了全局收敛性,是无约束凸优化问题,具有非常好的实用性

模型详解

模型定义

随机变量X表示待标注的序列数据,随机变量Y表示序列数据对应的标签,其中Y的每一个分量Yi取值于一个有限个标签的集合Y
定义:给定图G=(V,E)表示概率分布P(Y),即在图中顶点确定的随机变量Y=(Yv)vV属于图G,图中的边eE表示随机变量之间的依赖性。当随机变量Yv在给定条件X满足马尔科夫性质时,那么(X,Y)构成了一个条件随机场(CRF)。其中马尔科夫性质是指:

P(Yv|X,Yw,wv)=P(Yv|X,Yw,wv)
其中的wv表示图中与节点v相连的节点 。
在序列标注问题中,所有元素连接成为一条链式结构,因此定义中的图结构在处理序列标注问题时默认为线性链式结构,也就是G=(V={1,2,...m})E={(i,i+1),i=1,2...m1},定义中没有规定XY有同样的结构,但是现实中一般假定XY具有同样的结构,常使用的是X=(X1,X2,...Xm)Y=(Y1,Y2,...Ym)
根据上述假设,可以得出如下的线性链条件随机场:
X=(X1,X2,...Xn)Y=(Y1,Y2,...Yn)为线性链表示的随机变量序列,若在给定随机变量序列X的条件下,随机变量序列Y的条件概率分布P(Y|X)满足马尔科夫性
P(Yi|X,Y1,...Yi1,Yi+1,....Yn)=P(Yi|X,Yi1,Yi+1)
那么P(Y|X)成为线性链条件随机场,标注问题中X表示观测序列,Y表示对应的状态标记序列。

概率表示

根据Hammersley 和 Clifford于1971提出的随机场基本理论,可以得出上述条件概率分布由如下的形式

P(y|x)=1Z(x)(eE,kλktk(e,y|e,x)+μksk(v,y|v,x))

其中x为标记序列,y为标签序列,Z(x)是归一化因子,使得上式可以表示为一个概率分布。tksk分别表示转移特征函数和状态特征函数,前者定义在边上,后者定义在顶点上。二者都依赖于位置,是局部特征函数,一般使用取值为1和0的二值函数。λkμk分别是特征对应的权重,也是模型最终需要学习到的参数值。也就是CRF最终表示的就是上述特征和和权重的组合

优化算法

模型的学习策略是最大似然估计,在一直训练集的前提下,可以得到经验分布P^(X,Y),则训练数据的对数似然函数为

LP^=log(x,yPw(Y|X)P^(X,Y))=x,yP^(X,Y)logPw(Y|X)

将条件随机场模型Pw(Y|X)带入上式即可得到
L(w)=j=1NP^(Xj,Yj)i=1Kwifi(wj,yj)j=1NP^(xj)log(Zw(xj))

针对上述目标函数,需要求解其最大值,得到最优的权重值,从而就可以得到CRF模型。这是一个无约束优化问题,求解方式较多,但是在序列标注问题中涉及到的特征函数的维度会非常高,在实际实现中需要考虑高维问题。

IIS(论文中给出)

文中的作者给出的是改进的迭代尺度法(IIS)进行求解的,通过迭代不断优化目标函数的改变量的下界,达到最大化目标函数。详情可以参考论文介绍。

BFGS(自己给出)

由于上述问题是无约束优化问题,使用BFGS拟牛顿法可以明显降低运算步骤,同时对于数据维度特别大的问题时,可以使用有限内存的拟牛顿法L-BFGS进行计算。
最大似然函数的无约束优化问题为

maxwL(w)=maxwx,yP^(X,Y)logPw(Y|X)=maxwf(w)=x,yP^(x,y)logyexp(k=1Kwkfk(x,y))x,yP^(x,y)k=1Kwkfk(x,y)

梯度分量为
fwi=x,yP^(x,y)Pw(y|x)fi(x,y)x,yP^(x,y)fi(x,y)

上面的计算中,需要训练样本中X,Y的联合经验分布,同时需要特征函数,其中的模型Px(y|x)根据前面的随机场理论直接使用特征函数和权重表示即可得到。因此BFGS方法实现起来就比较方便了。
详细算法描述如下
输入:特征函数f1,f2….fn,经验分布P^(x,y),精度ϵ,最大迭代次数n
输出:最优参数值w,最优模型Pw(y|x)
(1)选定初始点w^(0),取H0为对称正定矩阵,k=0
(2)计算gk=g(w(0)),若gk满足精度要求或者达到最大迭代次数停止循环
(3)求出迭代更新步长pk=Hkgk
(4)使用非精确的先搜索方法求出步长αk,使得
f(w(k)+αkpk)=minα0f(w(k)+αpk)

(5)更新权重值w(k+1)=w(k)+αkpk
(6)计算gk+1=g(w(k+1)),如果gk+1达到精度要求则返回结果;否则更新
Hk+1=(IρkskyTk)Hk(IρkyksTk)+ρksksTk

其中,sk=w(k+1)w(k)yk=gk+1gkρk=1yTksk。计数器增加k=k+1,转到第(3)步进行循环。

开源工具

  1. CRF++,开源的C++实现,优化算法使用的是L-BFGS
  2. MALLET,通用的Java自然语言处理包,包含了分类、序列标注等多种算法
  3. NLTK,通用的python自然语言处理工具包,很多工具是从MALLET转换到python接口
展开阅读全文

没有更多推荐了,返回首页