最大匹配法
在诸多复杂的分词方法中,最大匹配法(Maximum Matching,简称MM)是最简单直接的一种。它需要事先给定一个词库作为词典,然后从左到右匹配尽可能长的词语。举个例子,假设我们的词典里只有“计算机、超越、人脑”这三个词,对于“计算机会超越人脑吗”这句话,最大匹配法的计算过程是这样的:
1、 创建指针A 并将它置于句子的最开始位置:A计算机会超越人脑吗;
2、 由于词典中最长的词语长度为3,所以创建新指针B,置于A 后的三个单位:A计算机B会超越人脑吗;
3、 检验A 和B 之间的字符串是否在词典中,如果在,就将A 移动到B 的位置, B 相应地往后移(直至移到句子末尾):计算机/A会超越B人脑吗;
4、 而如果A 和B 之间的字符串不在词典中,就将B 不断左移,直到能够有词语匹配或与A的距离为1 (也就是A、B 之间没有匹配的词语,用单字切分),我们的例子在第一次切分后就属于这种情况,所以再次操作的结果就是:计算机/A会B超越人脑吗;
5、 重复步骤3 或4,直到A 移动到句子末尾:计算机/会/超越/人脑/吗。
这种算法非常高效和简便,同时可以避免“计算/机会/超越/人脑/吗”这种切分方式(即便计算机和机会两个词同时在词典中)。但它的缺点也是很明显的,比如之前的“乒乓球拍卖完了”,就很可能被切分成“乒乓球/拍卖/完了”。为了消除这种歧义,人们也不断提出了一些改进算法,比如逆向匹配法,双向匹配法等等。
最大概率法
但是我们可以换一个角度来看待这种歧义问题。对于两种切分方式,“乒乓/球拍/卖/完/了”和“乒乓球/拍卖/完/了”,我们会认为前者更合理,因为通常乒乓球和拍卖不太可能联系在一起。也就是说,后者在语料库中出现的概率会比较小。所以,如果同一个句子出现若干种不同的划分,我们就希望找到可能出现概率最大的那个。
为了表述简便,这里用{A1, A2, A3, A4, A5} 和{B1, B2, B3, B4} 来分别表示{乒乓,球拍,卖,完,了} 和{乒乓球,拍卖,完,了} ,我们的任务是比较P(A1, A2, A3, A4, A5) 和P(B1, B2, B3, B4) 的大小。
根据条件概率公式,有
P(A1, A2, A3, A4, A5) = P(A1) P(A2|A1) P(A3|A1, A2) P(A4|A1, A2, A3) P(A5 | A1, A2, A3, A4)
其中P(A1) 表示A1 在语料库中出现的概率,P(A2|A1) 表示当上一个词语是A1时,在它后面A2 出现的概率,类似的, P(A3|A1, A2) 表示当前面两个词语是A1 和A2 时下一个词语是A3 的概率,等等……
但是我们发现,当句子很长时,这个概率表达式的尾巴会越来越长,给计算带来很大的麻烦,所以一般采用马尔可夫链(Markov Chain)的假设。
在马尔可夫链假定下,我们认为下一个词出现的概率只与前一个词有关,也就是说,在给定前文时,“卖”出现的概率只与紧接着的“球拍”有关,而与“乒乓”无关。有了这个假定,之前的概率就简化为
P(A1, A2, A3, A4, A5) = P(A1) P(A2|A1) P(A3|A2) P(A4|A3) P(A5|A4)
这就大大减小了计算量。在利用这个模型时,需要先对一个很大的语料库进行分析,这被称为“训练”的过程,其意义就在于把任意两个词语之间关联的概率都计算出来。当然在实际操作中,还牵涉到很多其他非常复杂细节,在此就不一一细说了。 |