条件随机场的中文分词方法

Posted 互联网技术猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了条件随机场的中文分词方法相关的知识,希望对你有一定的参考价值。

关注互联网技术猿

逐梦程序猿们的思考、总结


前言

目录

CRF分词

CRF VS HMM

代码实现

前言

通过前面几篇系列文章




我们从分词中最基本的问题开始,并分别利用了1-gram和HMM的方法实现了分词demo。本篇博文在此基础上,重点介绍利用CRF来实现分词的方法,这也是一种基于字的分词方法,在将句子转换为序列标注问题之后,不使用HMM的生成模型方式,而是使用条件概率模型进行建模,即判别模型CRF。之后我们对CRF与HMM进行对比,同样的我们最终也会附上CRF分词的实现代码。

条件随机场

为了说清楚CRF(conditional random field)在分词上的应用,我们需要简单介绍下条件随机场CRF,我们不去长篇大论的展开论述,只讨论几个核心的点,并重点阐述下线性链条件随机场,也是我们在序列标注问题中经常遇到的,如分词、词性标注、韵律标注等等。

核心点

在我们简单介绍了HMM模型,是一个五元组,它的核心围绕的是一个关于序列X和Y的联合概率分布P(X,Y),而在条件随机场的核心围绕的是条件概率分布模型P(Y|X),它是一种马尔可夫随机场,满足马尔科夫性。我们这里必须搬出一张经典的图片,大家可能在网上的资料中也都看到过,来源于论文An Introduction to Conditional Random Fields:

条件随机场的中文分词方法


从图中我们可以看出模型之间的演化过程以及模型之间的区别,对于用在分类问题中的逻辑回归与CRF其实都同属于对数线性模型,这里直观的我们也很好理解,当用CRF模型对X和Y序列建模时,我们需要判断条件随机场的中文分词方法对应的标签条件随机场的中文分词方法时其实可以看做一次逻辑回归分类问题,只不过这个分类问题考虑了上下文的序列信息,也就是说单纯的回归分类会损失上下文的序列信息如:有一系列连续拍摄的照片,现在想在照片上打上表示照片里的活动内容的标记,当然可以将每张照片单独做分类,但是会损失信息,例如当有一张照片上是一张嘴,应该分类到“吃饭”还是分类到“唱K”呢?如果这张照片的上一张照片内容是吃饭或者做饭,那么这张照片表示“吃饭”的可能性就大一些,如果上一张照片的内容是跳舞,那这张照片就更有可能在讲唱K的事情。

设有联合概率分布条件随机场的中文分词方法,由无向图条件随机场的中文分词方法表示,在图条件随机场的中文分词方法中,结点表示随机变量,边表示随机变量之间的依赖关系,如果联合概率分布条件随机场的中文分词方法满足成对、局部或全局马尔可夫性,就称此联合概率分布为马尔可夫随机场(Markov random filed)也称概率无向图模型(probablistic undirected graphical model):

  • 成对马尔可夫性:设u,v是无向图条件随机场的中文分词方法中任意两个没有边连接的结点,其他所有结点表示为O,对应的随机变量分别用条件随机场的中文分词方法表示,成对马尔可夫性是指给定随机变量组条件随机场的中文分词方法的条件下随机变量条件随机场的中文分词方法是条件独立的,如下:条件随机场的中文分词方法

  • 局部马尔可夫性:设条件随机场的中文分词方法条件随机场的中文分词方法中任意一个节点,W是与v有边连接的所有节点,O是v,W以外的其他所有节点。v表示的随机变量是条件随机场的中文分词方法,W表示的随机变量是条件随机场的中文分词方法,O表示的随机变量是条件随机场的中文分词方法。局部马尔可夫性是在给定随机变量组条件随机场的中文分词方法的条件下随机变量条件随机场的中文分词方法与随机变量条件随机场的中文分词方法是独立的。
    条件随机场的中文分词方法

    条件随机场的中文分词方法
  • 全局马尔可夫性:条件随机场的中文分词方法条件随机场的中文分词方法中被C分开的任意节点集合。全局马尔科夫性是指给定条件随机场的中文分词方法条件下条件随机场的中文分词方法条件随机场的中文分词方法是条件独立的,即条件随机场的中文分词方法

    条件随机场的中文分词方法

下面我们具体阐述下一种特殊也常用的线性链条件随机场。

简化形式

对于转移特征这一项:

条件随机场的中文分词方法

可以看出外面那个求和号是套着里面的求和号的,这种双重求和就表明了对于同一个特征条件随机场的中文分词方法,在各个位置条件随机场的中文分词方法上都有定义。
基于此,很直觉的想法就是把同一个特征在各个位置条件随机场的中文分词方法求和,形成一个全局的特征函数,也就是说让里面那一层求和号消失。在此之前,为了把加号的两项合并成一项,首先将各个特征函数条件随机场的中文分词方法(设其共有条件随机场的中文分词方法个)、条件随机场的中文分词方法(设共条件随机场的中文分词方法个)都换成统一的记号条件随机场的中文分词方法 :

条件随机场的中文分词方法

相应的权重同理:

条件随机场的中文分词方法

那么就可以记为:

条件随机场的中文分词方法
条件随机场的中文分词方法

然后就可以把特征在各个位置条件随机场的中文分词方法求和,即

条件随机场的中文分词方法

其中条件随机场的中文分词方法。进而可以得到简化表示形式:

条件随机场的中文分词方法
条件随机场的中文分词方法

这个形式我们在下一节介绍CRF分词的时候会使用。

CRF分词

对于一个句子的分词问题我们在前面的系列博文中已经阐述,输入的句子条件随机场的中文分词方法相当于序列条件随机场的中文分词方法,输出的标签序列L相当于序列条件随机场的中文分词方法,我们要训练一个模型,使得在给定条件随机场的中文分词方法的前提下,找到其最优对应的条件随机场的中文分词方法
训练该模型的关键点就是特征函数条件随机场的中文分词方法的选取以及每个特征函数权重条件随机场的中文分词方法的确定,而对于每个特征函数而言,其输入有如下四个要素:

  • 句子条件随机场的中文分词方法(就是我们要标注词性的句子)

  • 条件随机场的中文分词方法,用来表示句子条件随机场的中文分词方法中第条件随机场的中文分词方法个单词

  • 条件随机场的中文分词方法,表示要评分的标注序列给第i个单词标注的词性

  • 条件随机场的中文分词方法,表示要评分的标注序列给第条件随机场的中文分词方法个单词标注的词性

它的输出值是0或者1,0表示要评分的标注序列不符合这个特征,1表示要评分的标注序列符合这个特征。我们发现这里的特征函数在选取当前条件随机场的中文分词方法的对应标签条件随机场的中文分词方法时,只考虑了其前一个标签条件随机场的中文分词方法,这就是使用了我们上一节阐述的线性链条件随机场,而公式中的f就是我们这里的特征函数。
Note:在实际的应用时,除了单一的特征选取,我们通常会通过构造复合特征的方式,考虑更多的上下文信息。

CRF VS HMM

在中我们介绍了HMM在分词中的使用,那么读者肯定会问既然HMM已经能完成任务,为什么还需要CRF来重新搞一波,原因就是CRF比HMM更强大。
对于序列条件随机场的中文分词方法条件随机场的中文分词方法,根据之前的介绍我们易知如下公式:

条件随机场的中文分词方法

其中条件随机场的中文分词方法条件随机场的中文分词方法中第条件随机场的中文分词方法个词,条件随机场的中文分词方法为第条件随机场的中文分词方法个词的标签,公式中前半部分为状态转移概率,后半部分为发射概率。我们用对数形式表示该式:

条件随机场的中文分词方法

把这个式子与CRF的简化形式比较,不难发现,如果我们把第一个HMM式子中的log形式的概率看做是第二个CRF式子中的特征函数的权重的话,我们会发现,CRF和HMM具有相同的形式。所以可以说:每一个HMM模型都等价于某个CRF。
总结下两者的区别:

  • HMM是生成模型以联合概率建模,CRF是判别模型以条件概率建模

  • HMM为了简化计算做了有限状态假设和一对一假设(当前的单词只依赖于当前的标签,当前的标签只依赖于前一个标签),所以在特征选取上会有很多限制;而CRF可以定义数量更多,种类更丰富的特征函数(如定义一个特征函数f,考虑当前词离句首的距离,来着眼于整个句子)。

  • CRF可以使用任意的权重 将对数HMM模型看做CRF时,特征函数的权重由于是log形式的概率,所以都是小于等于0的,而且概率还要满足相应的限制,但在CRF中,每个特征函数的权重可以是任意值,没有这些限制。

Note:其实在HMM和CRF之间还有一个MEMM,即最大熵马尔科夫模型,MEMM模型是对转移概率和表现概率建立联合概率,统计时统计的是条件概率,但MEMM容易陷入局部最优,是因为MEMM只在局部做归一化(标记偏置问题),不过一般用的不多我们就不过多介绍,这里不再赘述。

代码实现

下面我们利用wapiti来实现一个简单的CRF分词器。相关说明:

  • wapiti是一个开源的CRF工具,doc在这里:https://wapiti.limsi.fr/

  • 数据源来源于msr整理所得:http://sighan.cs.uchicago.edu/bakeoff2005/

  • python

  • ubuntu/macos

训练代码

https://github.com/xlturing/machine-learning-journey/tree/master/seg_crf
大家可以直接看下源代码

实验结果

  • Load model

  • Label sequences
    1000 sequences labeled 3.96%/43.30%
    2000 sequences labeled 3.89%/44.00%
    3000 sequences labeled 3.87%/44.50%
    Nb sequences : 3985
    Token error : 3.85%
    Sequence error: 44.74%

  • Per label statistics
    B Pr=0.96 Rc=0.98 F1=0.97
    E Pr=0.96 Rc=0.98 F1=0.97
    S Pr=0.97 Rc=0.95 F1=0.96
    M Pr=0.92 Rc=0.87 F1=0.90

  • Done

这个训练集和测试集都相对较小,效果还不错,读者在真正上线使用时还需要依赖词典等诸多与场景对应的分词特性,本文更加关注原理和理解。


条件随机场的中文分词方法

看完,赶紧点个“好看”鸭

点鸭点鸭

                                                                                

↓↓↓↓


以上是关于条件随机场的中文分词方法的主要内容,如果未能解决你的问题,请参考以下文章

条件随机场(CRF)-基础

NLP系列学习:CRF条件随机场

条件随机场入门 条件随机场的训练

条件随机场

条件随机场

CRF条件随机场总结