1701009276
我们来判断很容易,要交给计算机来处理就麻烦了。
1701009277
1701009278
问题的关键就是,“和尚未”里的“和尚”也是一个词,“尚未”也是一个词。从计算机的角度看上去,两者似乎都有可能。对于计算机来说,这样的分词困境就叫做“交集型歧义”。
1701009279
1701009280
有时候,交集型歧义的“歧义链”有可能会更长。
1701009281
1701009282
“中外科学名著”里,“中外”、“外科”、“科学”、“学名”、“名著”全是词,光从词库的角度来看,随便切几刀下去,得出的切分都是合理的。类似的例子数不胜数,“提高产品质量”、“鞭炮声响彻夜空”、“努力学习语法规则”和“中国企业主要求解决”等句子都有这样的现象。在这些极端例子下,分词算法谁优谁劣可谓是一试便知。
1701009283
1701009284
最简单的,也是最容易想到的自动分词算法,便是“最大匹配法”了。也就是说,从句子左端开始不断匹配最长的词(组不了词的单字则单独划开),直到把句子划分完。算法的理由很简单:人在阅读时也是从左往右逐字读入的,最大匹配法是与人的习惯相符的。而在大多数情况下,这种算法也的确能侥幸成功。不过,这种算法并不可靠,构造反例可以不费吹灰之力。例如,“西南交通大学生前来应聘”本应是“西南交通/大学生/前来/应聘”,却会被误分成“西南交通大学/生前/来/应聘”。
1701009285
1701009286
还有一个适用范围相当广的特殊规则,这个强大的规则能修正很多交集型歧义的划分错误。首先我们要维护一个一般不单独成词的字表,比如“民”、“尘”、“伟”和“习”等;这些字通常不会单独划出来,都要跟旁边的字一块儿组成一个词。在分词过程中,一旦发现这些字被孤立出来,都要重新考虑它与前面的字组词的可能性。例如,在用最大匹配法切分“为人民服务”时,算法会先划出“为人”一词,而后发现“民”字只能单独成词了。查表却发现,“民”并不能单独划出,于是考虑进行修正——把“为人”的“人”字分配给“民”字。碰巧这下“为”和“人民”正好都能成词,据此便可得出正确的划分“为/人民/服务”。
1701009287
1701009288
不过,上述算法归根结底都是在像人一样从左到右地扫描文字。为了把问题变得更加形式化,充分利用计算机的优势,我们还有一种与人的阅读习惯完全不同的算法思路:把句子作为一个整体来考虑,从全局的角度评价一个句子划分方案的好坏。设计自动分词算法的问题,也就变成了如何评估分词方案优劣的问题。最初所用的办法就是,寻找词数最少的划分。
1701009289
1701009290
1701009291
注意:每次都匹配最长的词,得出的划分不见得是词数最少的,错误的贪心很可能会不慎错过一些更优的方案。
1701009292
1701009293
因而,在有的情况下,最少词数法比最大匹配法效果更好。若用最大匹配法来划分,“独立自主和平等互利的原则”将被分成“独立自主/和平/等/互利/的/原则”,一共有6个词;但词数更少的方案则是“独立自主/和/平等互利/的/原则”,一共只有5个词。
1701009294
1701009295
当然,最少词数法也有出错的时候。“为人民办公益”的最大匹配划分和最少词数划分都是“为人/民办/公益”,而正确的划分则是“为/人民/办/公益”。同时,很多句子也有不止一个词数最少的分词方案,最少词数法并不能从中选出一个最佳答案。不过,把之前提到的“不成词字表”装备到最少词数法上,我们就有了一种简明而强大的算法:对于一种分词方案,里面有多少词,就罚多少分;每出现一个不成词的单字,就加罚一分。最好的分词方案,也就是罚分最少的方案。
1701009296
1701009297
需要指出的是,这个算法并不需要穷举所有的划分可能。整个问题可以转化为图论中的最短路问题,利用一种叫做“动态规划”的技巧则会获得更高的效率。
1701009298
1701009299
算法还有进一步优化的余地。大家或许已经想到了,“字不成词”有一个程度的问题。“民”是一个不成词的语素,它是不能单独成词的。“鸭”一般不单独成词,但在儿歌童谣和科技语体中除外。“见”则是一个可以单独成词的语素,只是平时我们不常说罢了。换句话说,每个字成词都有一定的概率,每个词出现的概率也是不同的。
1701009300
1701009301
【问题】何不用每个词出现的概率,来衡量分词的优劣?
1701009302
1701009303
【分析】
1701009304
1701009305
于是我们有了一个更标准、更连续和更自动的改进算法,即最大概率法:先统计大量真实语料中各个词出现的概率,然后把每种分词方案中各词的出现概率乘起来作为这种方案的得分。最后,选出得分最高的方案,当作分词的结果。
1701009306
1701009307
以“有意见分歧”为例,让我们看看最大概率法是如何工作的。查表可知,在大量真实语料中,“有”、“有意”、“意见”、“见”、“分歧”的出现概率分别是0.0181、0.0005、0.0010、0.0002、0.0001,因此“有/意见/分歧”的得分为1.8×10-9,但有“意/见/分歧”的得分只有1.0×10-11,正确方案完胜。
1701009308
1701009309
这里的假设是,用词造句无非是随机选词连在一块儿,是一个简单的一元过程。显然,这个假设理想得有点不合理,必然会有很多问题。考虑下面这句话:
1701009310
1701009311
这/事/的确/定/不/下来
1701009312
1701009313
但是概率算法却会把这个句子分成:
1701009314
1701009315
这/事/的/确定/不/下来
1701009316
1701009317
原因是,“的”字出现的概率太高了,它几乎总会从“的确”中挣脱出来。
1701009318
1701009319
其实,以上所有的分词算法都还有一个共同的大缺陷:它们虽然已经能很好地处理交集型歧义的问题,却完全无法解决另外一种被称为“组合型歧义”的问题。所谓组合型歧义,就是指同一个字串既可合又可分。比如说,“个人恩怨”中的“个人”就是一个词,“这个人”里的“个人”就必须拆开;“这扇门的把手”中的“把手”就是一个词,“把手抬起来”中的“把手”就必须拆开;“学生会宣传部”中的“学生会”就是一个词,“学生会主动完成作业”里的“学生会”就必须拆开。这样的例子非常多,“难过”、“马上”、“将来”、“才能”、“过人”、“研究所”和“原子能”都有此问题。究竟是合还是分,还得取决于它两侧的词语。
1701009320
1701009321
到目前为止,所有算法对划分方案的评价标准都是基于每个词的固有性质,完全不考虑相邻词语之间的影响,因而一旦涉及组合型歧义的问题,最大匹配、最少词数和概率最大等所有策略都不能实现,具体情况具体分析。
1701009322
1701009323
1701009324
1701009325
[
上一页 ]
[ :1.701009276e+09 ]
[
下一页 ]