汉语自动分词基本算法

汉语自动分词基本算法

1 最大匹配法(Maximum Matching , MM)

  该方法是有词典切分,最大匹配法还可以分为正向最大匹配法(Forward MM,FMM)、逆向最大匹配法(Backward MM , BMM)、双向最大匹配法(Bi-directional MM)。
  假设句子: S = c 1 c 2 ⋯ c n S=c_1c_2\cdots c_n S=c1c2cn,其中 c i c_i ci为单个字,某一个词 w i = c 1 c 2 ⋯ c m w_i=c_1c_2\cdots c_m wi=c1c2cm m m m为词典中最长词的字数。下面给出FMM的算法描述。

1.1 FMM算法描述

  对于一个输入语句:

  1. i = 0 i=0 i=0,当前指针 p i p_i pi指向输入字串初始位置,执行以下操作:
  2. 计算当前指针 p i p_i pi到字串末端的字数 n n n,如果 n = 1 n=1 n=1,转4,结束算法。
  3. 从当前 p i p_i pi起,取 m m m个汉字作词 w i w_i wi,判断:
    (a)如果 w i w_i wi是字典中的词,则在 w i w_i wi后添加一个切分标志,转(c);
    (b)如果 w i w_i wi不是词典中的词且 w i w_i wi的长度大于1,将 w i w_i wi从右端去掉一个字,转(a);否则( w i w_i wi的长度等于1),则在 w i w_i wi后添加一个切分标志,将 w i w_i wi作为单字词添加到词典中,执行(c)步;
    (c)根据 w i w_i wi的长度修改指针 p i p_i pi的位置,如果 p i p_i pi指向字串末端,转(4),否则, i = i + 1 i=i+1 i=i+1,返回(2);
  4. 输出切分结果,结束分词程序。

1.2 例子

  假设词典中最长单词的字数为8。输入字串:他是研究生物化学的一位科学家。FMM切分过程:

他是研究生物化学的一位科学家
他是研究生物化学的一位科学家
他是研究生物化学的一位科学家
他是研究生物化学的一位科学家
他是研究生物化学的一位科学家
他是研究生物化学的一位科学家
他是研究生物化学的一位科学家
是研究生物化学的一位科学家
他/ 是研究生物化学的一位科学家

⋯ ⋯ \cdots\cdots
FMM切分结果:他/是/研究生/物化/学/的/一/位/科学家/。

1.3 优缺点

  优点有:

  • 程序简单易行,开发周期短;
  • 仅需要很少的语言资源(词表),不需要任何词法、句法、语义资源。

  弱点有:

  • 歧义消解的能力差;
  • 切分正确率不高,一般在95%左右。

2 最少分词法(最短路径法)

  基本思想是,设待切分字串 S = c 1 c 2 ⋯ c n S=c_1c_2\cdots c_n S=c1c2cn,其中 c i c_i ci为单个字, n n n为串的长度, n ≥ 1 n \ge 1 n1。建立一个节点数为 n + 1 n+1 n+1的切分有向无环图 G G G,各节点编号依次为 v 0 , v 1 , v 2 , ⋯   , v n v_0,v_1,v_2,\cdots,v_n v0,v1,v2,,vn
在这里插入图片描述

求最短路径(贪心法或简单扩展法)

2.1 算法描述

  1. 相邻节点 v k − 1 , v k v_{k-1},v_k vk1,vk之间建立有向变 < v k − 1 , v k > <v_{k-1}, v_k> <vk1,vk>,边对应的词默认为 c k c_k ck。如上图所示。
  2. 如果 w = c i c i + 1 ⋯ c j ( 0 < i < j ≤ n ) w=c_ic_{i+1}\cdots c_j(0 \lt i \lt j \le n) w=cici+1cj(0<i<jn)是一个词,则节点 v i − 1 , v j v_{i-1}, v_j vi1,vj之间建立有向边 < v i − 1 , v j > <v_{i-1}, v_j> <vi1,vj>,边对应的词为 w w w。如下图所示
    在这里插入图片描述
  3. 重复步骤2,直到没有新路径(词序列)产生。
  4. 从产生的所有路径中,选择路径最短的(词数最少的)作为最终分词结果。

2.2 例子

  输入字串:他只会诊断一般的疾病

  • 首先准备词典
  • 构建词图
    在这里插入图片描述
  • 贪婪组合
    在这里插入图片描述
  • 输出候选:(a)他/只会/诊断/一般/的/疾病/。(词个数为7)(b)他/只/会诊/断/一般/的/疾病/。(词个数为8)
  • 最终结果:他/只会/诊断/一般/的/疾病/。

  但是如果输入字串:“他说的确实在理”。通过算法也会得出两种候选:(a)他/说/的/确实/在理/。(b) 他/说/的确/实在/理/。 这两种情况的词数都是6,系统无法做出正确性判断。

2.3 优缺点

  优点:

  • 切分原则符合汉语自身规律;
  • 需要的语言资源(词表)也不多。

  弱点:

  • 对许多歧义字段难以区分,最短路径有多条时,选择最终的输出结果缺乏应有的标准;
  • 字串长度较大和选取的最短路径数增大时,长度相同的路径数急剧增加,选择最终正确的结果困难越来越大。

3 基于语言模型的分词方法

  方法描述:设对于待切分的句子 S S S W = w 1 w 2 ⋯ w k ( 1 ≤ k ≤ n ) W=w_1w_2\cdots w_k(1\le k \le n) W=w1w2wk(1kn)是一种可能的切分。则有:
W ∗ = arg max ⁡ w p ( W ∣ S ) = arg max ⁡ w p ( W ) ∗ p ( S ∣ W ) W^*=\argmax_w p(W|S)=\argmax_w p(W)*p(S|W) W=wargmaxp(WS)=wargmaxp(W)p(SW)
这里 p ( W ) p(W) p(W)就是语言模型, p ( S ∣ W ) p(S|W) p(SW)就是生成模型。
  优点:

  • 在训练语料规模足够大和覆盖领域足够多时,可以获得较高的切分正确率。

  弱点:

  • 规模性能较多地依赖于训练语料的规模和质量,训练语料的规模和覆盖领域不好把握;
  • 计算量较大。

4 基于HMM的分词方法

  基本思想是把输入字串(句子) S S S作为HMM的 μ \mu μ的输入;切分后的单词串 S w S_w Sw作为状态的输出,即观察序列 S w = w 1 w 2 ⋯ w n ( n ≥ 1 ) S_w=w_1w_2\cdots w_n(n \ge 1) Sw=w1w2wn(n1)。词性序列 S c S_c Sc为状态序列,每个词性标记 c i c_i ci对应HMM中的一个状态 q i q_i qi S c = c 1 c 2 ⋯ c n S_c=c_1c_2\cdots c_n Sc=c1c2cn。则:
S ^ w = arg max ⁡ S w p ( S w ∣ μ ) \hat S_w = \argmax_{S_w} p(S_w|\mu) S^w=Swargmaxp(Swμ)
  优点:

  • 在训练语料规模足够大和覆盖领域足够多时,可以获得较高的切分正确率。

  弱点:

  • 模型性能较多地依赖于训练语料的规模和质量,训练语料的规模和覆盖领域不好把握;
  • 模型实现复杂、计算量较大。

5 由字构词(基于字标注)的分词方法

  基本思想是,将分词过程看作是字的分类问题。该方法认为,每个字在构造一个特定的词语时都占据着一个确定的构词位置(即词位)。假定每个字只有4个词位:词首(B)、词中(M)、词尾(E)和单独成词(S),那么字归属一特定的词位。
  该方法的重要优势在于,它能够平衡地看待词表词和未登录词的识别问题,文本中的词表词和未登录词都是用同一的字标注过程来实现的。在学习构架上,既可以不必专门强调词表词信息,也不用专门设计特定的未登录词识别模块,因此,大大地简化了分词系统的设计[黄昌宁,2006]

参考资料:《统计自然语言处理》宗成庆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值