一种利用ngram模型来消除歧义的中文分词方法

这里的歧义是指:一样的一句话,可能有两种或者更多的切分方法,这些切分结果,有的正确,有的不正确。java

消除歧义的目的就是从切分结果中挑选切分正确的。git

假设咱们要切分句子:结婚的和还没有结婚的,使用逆向最大匹配正向最大匹配算法的结果以下:github

逆向最大匹配:[结婚, 的, 和, 还没有, 结婚, 的]
正向最大匹配:[结婚, 的, 和尚, 未结, 婚, 的]

再好比,这几块地面积还真不小算法

逆向最大匹配:[这, 几块, 地, 面积, 还真, 不小]
正向最大匹配:[这, 几块, 地面, 积, 还真, 不小]

这里就出现了歧义现象,这种歧义现象称为交集型歧义。spa

交集型歧义的特色是,其中的一个字既能够和前面的字结合成词,也能够和后面的字结合成词,如上面所说的和还没有"中就是这样的字,既能够和前面的字结合成“和尚”也能够和后面的字结合成“还没有”。还有“地面积”中的,既能够是地面,也能够是面积code

那么咱们该选择哪个分词结果呢?内存

咱们能够利用ngram模型来消除歧义,咱们看第一个例子的分词过程:get

初始化bigram
bigram初始化完毕,bigram数据条数:1519443

利用bigram为逆向最大匹配算法的分词结果进行评分:

二元模型 结婚:的 得到分值:16.970562
二元模型 和:还没有 得到分值:2.0
二元模型 还没有:结婚 得到分值:1.4142135
二元模型 结婚:的 得到分值:16.970562

逆向最大匹配:[结婚, 的, 和, 还没有, 结婚, 的] : ngram分值=37.35534

利用bigram为正向最大匹配算法的分词结果进行评分:

二元模型 结婚:的 得到分值:16.970562
二元模型 的:和尚 得到分值:3.0

正向最大匹配:[结婚, 的, 和尚, 未结, 婚, 的] : ngram分值=19.970562

最大分值:37.35534, 消歧结果:[结婚, 的, 和, 还没有, 结婚, 的]

接着看第二个例子:it

利用bigram为逆向最大匹配算法的分词结果进行评分:

二元模型 地:面积 得到分值:1.7320508

逆向最大匹配:[这, 几块, 地, 面积, 还真, 不小] : ngram分值=1.7320508

利用bigram为正向最大匹配算法的分词结果进行评分:

正向最大匹配:[这, 几块, 地面, 积, 还真, 不小] : ngram分值=0.0

最大分值:1.7320508, 消歧结果:[这, 几块, 地, 面积, 还真, 不小]

这里要解释的是,ngram中的n>1,咱们这里取2(bi),咱们看到bigram中数据的条数有1519443,bigram须要从人工标注的语料库中提取,提取方法参考word分词项目,bigram中的数据格式以下:io

结婚:登记 91
结婚:的 288
地:面积 3
和:还没有 4
还没有:结婚 2
的:和尚 9

表示的含义是在人工标注的语料库中,结婚这个词后面跟着登记这个词的出现次数是91次,结婚这个词后面跟着这个词的出现次数是288次。

若是ngram中的n为3,则数据格式以下:

结婚:的:事情 3
结婚:的:人 4
结婚:的:信念 2
结婚:的:决定 13

表示的含义和bigram一致。

经过分析bigram和trigram,咱们知道,在ngram中,n越大,消歧的效果就越好,可是数据也越大,耗费的内存就更多了。

利用ngram模型来消除歧义,依赖人工标注的语料库,利用了统计学的大数定律,这种方法的缺点在于没法处理少见的语言现象,以及没法处理样本覆盖不到的状况。

相关文章
相关标签/搜索