本篇继续讨论对输入句子的处理问题。FMM 和 BMM 是指对输入句子分别找前向最长词和后向最长词,某种程度上来说属于贪心算法的一种,比较惊喜的地方是两者结合常常能获得比较不错的分词效果。

FMM

FMM,可以理解成前向(Forward)最长词,就是对一个句子,每次切分找词的时候,都是从前往后“切出”最长的词和剩下的子句,例如:

有意见分歧”这句话,用 FMM 进行切分找第一个词的时候就会切分成:

有意/见分歧

只利用 FMM 进行分词时,对每次切分后的子句都反复寻找最长前缀词,直到子句为空。注意到,FMM 得到的切分序列是唯一的。

BMM

BMM,可以理解成后向(Backward)最长词,就是对一个句子进行切分的时候,都是从后往前“切出”最长词和剩下的子句,例如

“有意见分歧”这句话,用 BMM 切分的时候会分成:

有意见/分歧

其中,“分歧”是寻找到的“第一个词”,“有意见”是待切分的子句。

用 BMM 分词的时候,对每次切分后的子句都反复寻找最长后缀词,直到句子为空。

FMM 与 BMM 组合分词

只用 FMM 或 BMM 进行分词的话,由于算法本身“贪心”的属性,往往得不到最理想的切分结果。所以在进行汉语切分的时候,可以将两个算法结合使用,用于发现歧义(因为对于没有歧义的句子,FMM 和 BMM 得到的切分结果一定是一致的),也可以将两个算法得到的序列计算整句话的概率(利用 BiGram 模型),选取概率较大者作为最终的切分结果。