一个实例说明输入法中分词算法与统计模型的重要性

一个实例来说明基于统计的分词算法的优点。

我手头有两种输入法,fcitx自带的拼音输入法和sunpinyin(基于统计模型),测试词是:

"中外科学名著"。

自带拼音:

sunpinyin:

自带拼音输入法不能输出正确的词条,那我们看看mingzhu在两个输入法中的排序:

自带拼音:

sunpinyin:

可以看出,明珠在两种输入法里都是第一候选词.

这说明,自带输入法的搜索结果是分词之后按照单个分词最高频的结果采纳为输出的,而基于统计模型的sunpinyin能够根据上下文判断此处出现的最佳词应该是哪个。 “科学名著”一词的出现频率远高于”科学明珠”,所以采纳为优先输出。

显然,当收录的统计数据越广泛时,输出结果越好。如果本地没有收录足够大的统计数据时,就会出现一些问题,所以云输入法出现了,它可以结合本地输入法使用,在正常的输入法里提供一个备选,这个备选就是将数据上传到服务器,利用网上的数据库来对分词进行一个搜索,得到的结果一般要比本地更优。

加载cloudpinyin之后:

可以看到,本地数据对于中值这个词不能得到最优,原因是本地并未收录该统计结果。而加载cloudpinyin之后由于利用了web上大数据库优势,得到了正确的值,当然,在离线状态下,cloudpinyin就无法工作了:

那么是什么原理导致了这样的不同呢? 吴军的这篇文章里,用一个极简单的条件概率公式,解释了这个问题。

如果我们把所有的词按顺序排开,那么就会形成一个由词组成的句子:

w1,w2,w3,w4...wn.

算法会衡量一个值:

p(w1) p(w2|w1) p(w3|w2) p(w4|w3) ... p(wn|wn-1)

该值最大得到的概率就是最佳匹配,产生该最大概率的结果就是输入法的结果。

然而,和搜索引擎不同,搜索引擎的分词是将当前句子按照统计结果,产生最大概率的分词方法。而对于输入法来说,是要根据拼音的输入,将结果分词之后对多个可能的候选结果进行概率的比较。

在”中外科学名著”一词中,搜索引擎需要做的是将该结果变换成”中外/科学/名著”,而对于输入法来说,输入是”zhongwaikexuemingzhu”,输入法根据拼音产生候选词序之后进行pk,概率最高的获胜。

所以当出现”拉格朗日种植定理”和”拉格朗日中值定理”的矛盾的时候,做法是比较

p("中值"|"拉格朗日") * p("定理"|"中值")

p("种植"|"拉格朗日") * p("定理"|"种植")

概率大者获胜,但由于这4个概率均未收录在数据库中,又因为”种植”一词本身的排名比”中值”高,所以就成了”拉格朗日种植定理”。而在添加了cloudpinyin之后,依赖于网上的大数据库优势,成功得到了”拉格朗日中值定理”。

参考资料:

  1. 数学之美 系列一 统计语言模型 by 吴军
  2. 漫话中文自动分词和语义识别(上):中文分词算法
  3. sunpinyin CodeTourOfSLMTraining

发表评论

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>