中文分词算法 | 基于统计模型的三种分词算法

Hi,大家好,我是半亩花海。上一篇博客主要介绍了关于词表中的分词算法的内容,继续基于中文分词算法,学习统计模型中的分词算法,进一步探索自然语言处理的独特魅力!

目录

一、基于N-gram语言模型的分词方法

二、基于HMM(隐马尔科夫模型)的分词方法

三、基于CRF(条件随机场)的分词方法

四、CRF VS HMM


基于统计模型的分词算法的主要核心是:词是稳定的组合。我们知道,在上下文中相邻的字如果同时出现的次数越多,那么就越有可能构成一个词

结论:

字与字相邻出现的概率或者频率能较好地反映成词的可信度。我们可以对训练文本中相邻出现的各个字的组合的频度进行计算统计,得出它们之间的互现信息互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时,便可以认为此字组可能构成了一个词。该方法又称为无字典分词


一、基于N-gram语言模型的分词方法

统计语言模型:

  • 今天天气很好,我们去北京玩吧。
  • 今天很好天气,我们去北京玩吧。
  • 今天我们天气,很好去北京玩吧。

如何判断一个句子是否合理,很容易想到了一种很好的统计模型来解决上述问题,只需要看它在所有句子中出现的概率就行了。第一个句子出现的概率大概是80%,第二个句子出现的概率大概是50%,第三个句子出现的概率大概是20%,第一个句子出现的可能性最大,因此这个句子最为合理。

那么,如何计算一个句子出现的概率呢,我们可以把有史以来人类说过的话都统计一遍,这样就能很方便的计算概率了。然而,你我都知道这条路走不通。

假设想知道S在文本中出现的可能性,也就是数学上所说的S的概率,既然S=w1,w2,...,wn,那么不妨把S展开表示:

利用条件概率的公式,S这个序列出现的概率等于每一个词出现的条件概率的乘积,展开为:

其中,计算P(w_{1})很容易, P(w_{2}|w_{1})也还能算出来, P(w_{3}|w_{1},w_{2})已经非常难以计算了。

偷懒的马尔科夫(Andrey Markov)

假设上面的n不取很长,而只取2个,那么就可以大大减少计算量。即在此时,假设一个词w_{i}出现的概率只与它前面的w_{i-1}有关,这种假设称为1阶马尔科夫假设。现在,S的概率就变得简单了:

 那么,接下来的问题就变成了估计条件概率P(w_{i}|w_{i-1}),根据它的定义:

当样本量很大的时候,基于大数定律,一个短语或者词语出现的概率可以用其频率来表示,即:

其中,count(i)表示词i出现的次数,count表示语料库的大小。那么:

由于歧义的存在,一段文本存在多种可能的切分结果(切分路径),而基于词表的分词算法中的FMM、BMM 这两种算法使用机械规则的方法选择最优路径,而 N-gram 语言模型分词方法则是利用统计信息找出一条概率最大的路径。下图为武汉市长江大桥的全切分有向无环图(DAG)

可以看到,可能的切分路径

  • 武汉/市/长江/大桥
  • 武汉/市/长江大桥
  • 武汉市/长江/大桥
  • 武汉市/长江大桥
  • 武汉/市长/江/大桥
  • 武汉/市长/江大桥
  • 武汉市长/江/大桥
  • 武汉市长/江大桥
  • ......

假设随机变量S为一个汉字序列,W是S上所有可能的切分路径。对于分词,实际上就是求解使条件概率P(W|S)最大的切分路径W^{*},即:

根据贝叶斯公式:

由于P(S)为归一化因子,P(S|W)恒为1,因此只需要求解P(W)


二、基于HMM(隐马尔科夫模型)的分词方法

隐马尔可夫模型(Hidden Markov Model,HMM)在语音识别、机器翻译、中文分词、命名实体识别、词性标注、基因识别等领域有广泛的使用。

首先我们转换下思维,把分词问题做个转换:分词问题就是对句子中的每个字打标注,标注要么是一个词的开始(B),要么是一个词的中间位置(M),要么是一个词的结束位置(E),还有单个字的词,用S表示。

X
YSBESBES

下面对中文分词进行形式化描述

设观察集合为:

状态集合为:

问题:已知输入的观察序列为:

求对应的状态序列:

基于HMM的分词方法:

属于由字构词的分词方法,由字构词的分词方法思想并不复杂,它是将分词问题转化为字的分类问题(序列标注问题)。从某些层面讲,由字构词的方法并不依赖于事先编制好的词表,但仍然需要分好词的训练语料。
规定每个字有4个词位:词首B、词中M、词尾E、单字成词S
由于HMM是一个生成式模型,X为观测序列,Y为隐序列。

如果大家对 HMM 隐马尔可夫模型感兴趣,详细的该模型的例子、原理、计算可以参考以下文章,链接如下:HMM隐马尔可夫模型的例子、原理、计算和应用 - 知乎 (zhihu.com)


三、基于CRF(条件随机场)的分词方法

CRF 把分词当做字的词位分类问题,通常定义字的词位信息如下:

  • 词首常用B表示;
  • 词中常用M表示;
  • 词尾常用E表示;
  • 单子词,常用S表示。

CRF 分词的过程就是词位标注后,将B和E之间的字,以及S单字构成分词

  • 原始例句:我爱北京天安门
  • CRF标注后:我/S 爱/S 北/B 京/E 天/B 安/M 门/E
  • 分词结果:我/爱/北京/天安门。

基于 CRF 的分词方法与 HMM 不同,CRF 是一种判别式模型,CRF 通过定义条件概率P(Y|X)来描述模型。基于CRF的分词方法与传统的分类模型求解很相似,即给定 feature(字级别的各种信息)输出 label(词位)

简单来说,分词所使用的是 Linear-CRF,它由一组特征函数组成,包括权重 \lambda 和特征函数 f,特征函数 f 的输入是整个句子 s、当前 pos_{i} 、前一个词位 l_{i-1},当前词位 l_{i} 。


四、CRF VS HMM

  • 首先,CRF,HMM都常用来做序列标注的建模,像分词、词性标注,及命名实体标注。
  • 隐马模型一个最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择。
  • 最大熵隐马模型则解决了隐马的问题,可以任意选择特征,但由于其在每一节点都要进行归一化,所以只能找到局部的最优值,同时也带来了标记偏见的问题,即凡是训练语料中未出现的情况全都忽略掉。
  • 条件随机场则很好的解决了这一问题,他并不在每一个节点进行归一化,而是所有特征进行全局归一化,因此可以求得全局的最优值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半亩花海

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值