这里的歧义是指:同样的一句话,可能有两种或者更多的切分方法,这些切分结果,有的正确,有的不正确。
消除歧义的目的就是从切分结果中挑选切分正确的。
假设我们要切分句子:结婚的和尚未结婚的,使用逆向最大匹配和正向最大匹配算法的结果如下:
1
2
|
逆向最大匹配:[结婚, 的, 和, 尚未, 结婚, 的]
正向最大匹配:[结婚, 的, 和尚, 未结, 婚, 的]
|
再比如,这几块地面积还真不小:
1
2
|
逆向最大匹配:[这, 几块, 地, 面积, 还真, 不小]
正向最大匹配:[这, 几块, 地面, 积, 还真, 不小]
|
这里就出现了歧义现象,这种歧义现象称为交集型歧义。
交集型歧义的特点是,其中的一个字既可以和前面的字结合成词,也可以和后面的字结合成词,如上面所说的“和尚未"中尚就是这样的字,既可以和前面的字结合成“和尚”也可以和后面的字结合成“尚未”。还有“地面积”中的面,既可以是地面,也可以是面积。
那么我们该选择哪一个分词结果呢?
我们可以利用ngram模型来消除歧义,我们看第一个例子的分词过程:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
初始化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
, 消歧结果:[结婚, 的, 和, 尚未, 结婚, 的]
|
接着看第二个例子:
1
2
3
4
5
6
7
8
9
10
11
|
利用bigram为逆向最大匹配算法的分词结果进行评分:
二元模型 地:面积 获得分值:
1.7320508
逆向最大匹配:[这, 几块, 地, 面积, 还真, 不小] : ngram分值=
1.7320508
利用bigram为正向最大匹配算法的分词结果进行评分:
正向最大匹配:[这, 几块, 地面, 积, 还真, 不小] : ngram分值=
0.0
最大分值:
1.7320508
, 消歧结果:[这, 几块, 地, 面积, 还真, 不小]
|
这里要解释的是,ngram中的n>1,我们这里取2(bi),我们看到bigram中数据的条数有1519443,bigram需要从人工标注的语料库中提取,提取方法参考word分词项目,bigram中的数据格式如下:
1
2
3
4
5
6
|
结婚:登记
91
结婚:的
288
地:面积
3
和:尚未
4
尚未:结婚
2
的:和尚
9
|
表示的含义是在人工标注的语料库中,结婚这个词后面跟着登记这个词的出现次数是91次,结婚这个词后面跟着的这个词的出现次数是288次。
如果ngram中的n为3,则数据格式如下:
1
2
3
4
|
结婚:的:事情
3
结婚:的:人
4
结婚:的:信念
2
结婚:的:决定
13
|
表示的含义和bigram一致。
通过分析bigram和trigram,我们知道,在ngram中,n越大,消歧的效果就越好,但是数据也越大,耗费的内存就更多了。
利用ngram模型来消除歧义,依赖人工标注的语料库,利用了统计学的大数定律,这种方法的缺点在于无法处理少见的语言现象,以及无法处理样本覆盖不到的情况。