在英语中,单词本身就是词的表达,一篇英文文章由单词和分隔符组成,而在汉语中,词是以字为基本单位的,但是一篇文章的语义表达却可以用词来进行划分。因此,在处理中文文本时,需要进行分词处理,将句子转化为词的表达。这个过程就是中文分词,它通过计算机自动识别出句子的词,在词之间加入边界标记符,分隔出各个词汇。
中文分词的主要困难在于分词歧义,比如:“咬死了猎人的狗”,应该分词为“咬死了猎人/的狗”,还是“咬死了/猎人的狗”,如果不依赖于足够的语境知识,人们将很难给出结论。
中文分词的主要流派有规则分词、统计分词和混合分词(规则+统计),规则分词是最早兴起的方法,主要是通过人工设立词库,按照一定的方式进行匹配切分,其实现简单高效,但对于不在词库里的新词很难进行处理。统计分词是随着机器学习的兴起,将统计应用于分词任务上,能够较好地应对新词等特殊场景,单纯的统计分词过多的依赖于语料的质量,在实践过程中,采用混合分词。本文将介绍中文分词中的规则分词部分。
规则分词主要通过维护词典,在切分语句的时候,将语句的每个字符串与词表中的词进行逐一匹配,找到则切分,否则不予切分。代表性的算法主要有:正向最大匹配法(Maximum Match Method, MM 法)、逆向最大匹配法(Reverse Match Method, RMM 法)、双向最大匹配法(Bi-direction Matching Method)。
1. 正向最大匹配法
正向最大匹配法(MM 法)的基本思想是:
从左向右取要切分的汉语句子中的 m 个字符作为匹配字段,m 为分词词典中最长词条的字符数。查找分词词典并进行匹配。若匹配成功,则将这个匹配字段作为一个词切分出来。若匹配不成功,则将这个匹配字段的最后一个字去掉,剩下的字符串作为新的匹配字段,进行再次匹配,重复以上过程,直到切分出所有词为止。比如:我们现有的分词词典中最长的长度为 5,词典中有“南京市”、“长江”、“大桥”三词,现采用 MM 法对句子“南京市长江大桥”进行分词,那么首先从句子中取出前 5 个字“南京市长江”,发现词典中没有该词,于是缩小长度,取前 4 个字“南京市长”,发现词典中还是没有该词,于是继续缩小长度,取前 3 个字“南京市”,词典中存在该词,于是该词被确认切分。再将剩下的“长江大桥”按照同样方式进行切分,得到“长江”和“大桥”,最终切分为“南京市/长江/大桥” 3 个词。
2 逆向最大匹配法
逆向最大匹配(RMM 法)的基本思想与 MM 法相同,不同的是分词切分的方向与MM 法相反。逆向最大匹配法从右到左来进行切分。每次取最右边(末端)的 m个字符作为匹配字段, 若匹配失败,则去掉匹配字段最左边(前面)的一个字,继续匹配。
比如:“南京市长江大桥”,按照逆向最大匹配,分词词典中最长词条的字符数长度为 5,分词词典中有“南京市长”和“长江大桥”两词,现采用 RMM 法对句子“南京市长江大桥”进行分词,那么首先从句子中从右到左取出前 5 个字“市长江大桥”,发现词典中没有该词,于是缩小长度,取前 4 个字“长江大桥”,词典中存在该词,于是该词被确认切分。再将剩下的“南京市”按照同样方式进行切分,得到“南京市”,最终切分为“南京市/长江大桥” 2 个词。当然,如此切分并不代表完全正确,可能有个叫“江大桥”的“南京市长”也说不定。
3 双向最大匹配法
双向最大匹配(Bi-direction Matching Method)的基本思想是将正向最大匹配法得到的分词结果和逆向最大匹配法得到的分词结果进行比较,然后按照最大匹配原则,选取词数切分最少的作为结果。
比如:“南京市长江大桥”,采用双向最大匹配法方法,正向最大匹配法产生的结果是:“南京市/长江/大桥”和“南京市/长江大桥”两种结果,最终选取词数较少的“南京市/长江大桥”作为结果。
作者:Kevin Tao
知乎号:Kevin陶民泽
备注:转载请注明出处。
如发现错误,欢迎留言指正。