分词是NLP领域基础但极其重要的功能,作为任务的上游,其分词质量直接影响了下游任务的性能(虽然现在流行end-to-end了)。分词方法主要有三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。 第一种将指定长度的子串与准备好的词典匹配,如果匹配成功则返回,第二种是在分词的时候同时进行句法和语义分析,第三种是使用统计方法对已分词的样本训练学习其规律从而实现对未知文本的切分,在使用时基本会结合第一种方法一起使用,该方法也是目前的主流方法。本文将重点介绍基于字符串匹配的分词方法,字符串匹配是分词方法中最简单的分词方法,该方法严重依赖于词典,无法识别未登录词以及歧义处理能力不佳。常用的字符串匹配方法有以下几种:
- 最大正向匹配法
- 最大逆向匹配法
- 双向最大匹配法
最大正向匹配
该方法核心思想是,设定词语的最大匹配长度m(往往是词典中词的最大长度),从左往右取待切词的句子m个字符,在词典中查找是否存在这m个字符,如果存在则匹配成功,如果不存在则将这m个字符的最后一个字符去掉,重新从词典中查找,直到找到为止。

最大逆向匹配法
与最大正向匹配相反,最大逆向匹配算法首先设定词语的最大匹配长度m(往往是词典中词的最大长度),从右往左取带切词的句子m个字符,在词典中查找是否存在这m个字符,如果存在则匹配成功,如果不存在,则将这m个字符的最左边一个字符去掉,重新从词典中查找,直到找到为止。
一般情况下逆向匹配结果比正向匹配结果更为准确。

双向最大匹配法
双向最大匹配法是将最大正向匹配的分词结果和最大逆向匹配的分词结果结合起来比较,一般会遵循以下原则:
- 分词粒度越大越好(根据算法性质,如果词存在与词典中的话,会优先匹配颗粒度最大的词,如中华人民共和国,如果拆分成中华/人民/共和国,会产生歧义)
- 非词典词越少越好
- 总体词数越少越好
本文实现思路是: - 优先正反向总体分词词数最少的结果;
- 如果正反向分词结果词数相同,则选单个词在词典中数量较多的结果;
- 如果单个词在词典中的数量一致,则从正反向中随机选择一个结果。

总结
字符串匹配分词原理非常简单,因为只是简单的匹配,效率自然也是贼高。分词效果一般是:双向>逆向>正向。