中文分词技术(Chinese Word Segmentation) 指将一个汉字序列切分成一个个单独的词。分词就是将连续的字序列按照一定的规则重新组合成词序列的过程
目前中文分词算法有以下5类:
- 基于词典的方法
- 基于统计的方法
- 基于规则的方法
- 基于人工智能技术的方法
- 基于字标注的方法
在业务中,可以使用多种算法进行比较选择,其中比较选择的原则有以下几点:
- 总词数越少越好
- 切分单字词的数量越少越好
- 切分的单个词的字数越多越好
- 切分结果中非词典的词越少越好
基于词典的方法
其基本原理是按照一定的步长对文档取词,把结果和词典进行匹配,匹配成功则分词成功,否则不予切分。这种方法实现简单,实用性强,最大的缺点就是识别的成功率极大程度受限于词库的完整度
取词的规则和算法有许多,如:
- 正向最大匹配法
- 邻近匹配法
- 逆向最大匹配法
- 双向最大匹配法
- 最短路径匹配法
- ...
最大正向匹配法(Maximun Matching,下文称MM)
其原理是以词库的最大长度为初始长度,窗口为1,从左到右对字符串进行扫描匹配,匹配不成功则减小窗口
其步骤是:
- 取得词库中最长的词的长度
- 从左到右截取1得到的长度的字符串
- 到词典中进行匹配
- 匹配成功,则把该字符串切分,余下字符串继续进行2操作
- 匹配不成功,则将该字符串去掉最后一个字,余下字符串继续进行3操作
- 重复上述过程,直到切分出所有词为止
以“研究生命的起源”为例,假定词典中的词包含有:{研究、研究生、生命、命、的、起源},切分步骤如下:
研究生 #第一个词匹配成功
命的起
命的
命 #第二个词匹配成功
的起源
的起
的 #第三个词匹配成功
起源 #第四个词匹配成功
匹配结果为:“研究生 命 的 起源”
邻近匹配法(Nearest Nerghbor Matching,下文称NM)
MM在每次匹配过程中都要进行一次二分搜索,算法复杂度太高
NM则是在取到词典中匹配的第一个词后,往词后拼接下一个字,拼接后的新词在从词典中寻找,如果词典中有这个词,则该词一定会在邻近位置
其步骤是:
- 取字符串第一个字
- 到词典中进行匹配
- 匹配不成功,则拼接下一个字,继续进行2过程
- 匹配成功,则打一个标记,拼接下一个字,继续到词典中匹配,直到拼接后的字符串不在词典中,或者长度大于词典词的最大长度,则终止匹配,取被标记且字符串最多的词
- 重复上述过程,直到切分出所有词为止
继续以“研究生命的起源”进行分词作为例子,切分步骤如下:
研
研究 #第一个词第一次匹配成功并标记
研究生 #第一个词第二次匹配成功并标记
研究生命 #超过词典中最大长度3,则取词:研究生
命 #第二个词第一次匹配成功,并标记
命的 #第二个词第二次匹配失败,则取词:命
的 #第三个词第一次匹配成功,并标记
的起 #第三个词第二次匹配失败,则取词:的
起源 #第四个词匹配成功
匹配结果为:“研究生 命 的 起源”
逆向最大匹配法(Reverse Maximum Matching Method,下文称RMM)
其原理与MM基本相同,只是扫描方向相反,是从右向左扫描,其步骤差不多,不再赘述。
继续以“研究生命的起源”进行分词作为例子,切分步骤如下:
的起源
起源 #第一个词匹配成功
生命的
命的
的 #第二个词匹配成功
究生命
生命 #第三个词匹配成功
研究 #第四个词匹配成功
匹配结果为:“研究生 命 的 起源”
双向最大匹配法(Bi-directction Matching Method,下文称Bi-MM)
该方法实际上是一个比较算法,使用MM和RMM切分后再对结果进行比较,按照上文说的比较原则选择其中一个最为结果。
例子“研究生命的起源”中
MM的结果为: 研究生 命 的 起源
RMM的结果为: 研究 生命 的 起源
词数均为4,单字较少的为RMM,则
匹配结果为:研究 生命 的 起源
最短路径匹配法(Shortest Path Matching Method,下文称SPM)
该方法实际上也是一个比较算法,先找出字符串中所有可能的词,每个词有一个坐标,相邻两个词形成一条边,根据坐标既可以得到距离,找出从起点到终点中所有距离加起来最小的路径,该路径下所包含的词就是切分结果
例子“研究生命的起源”中
所有可以切分的词为:{研究、研究生、生命、命、的、起源}
可能的路径有:“研究 生命 的 起源”、“研究生 命 的 起源”
若按照词典排序后的索引值为坐标,(只是举例,可以根据场景设计坐标方法)
排序后的词典为:{命、生命、的、研究、研究生、起源}
则坐标分别为:{3、1、2、5}和{4、0、2、5},记录分别为:6、9,
选择距离为6的匹配结果
匹配结果为:研究 生命 的 起源
实际上坐标有很多种算法,可以是二维坐标,并把每个词生成一个特征向量,通过计算向量值达到比较的目的
基于统计的方法
该方法是没有词典的,主要思想是通过计算相邻的字同时出现的次数来决定是否构成词,次数越多越越有可能构成词。
假设识别的文本已经统计好了所有可能的切分词,那么串联这些词的方式就有多种,从维度上理解,即为选择第一个切分词,则下一个切分词也是词的概率。
主要的统计模型有:
- N元文法模型(N-gram)
- 隐马尔科夫模型(Hidden Markov Model, HMM)
- 最大熵模型
- ...
假设字符串S分成m词,则可以简单描述为:S=W1W2W3...Wm
则出现S的概率为:P(S) = P(W1)P(W2|W1)P(W3|W1W2)...P(Wm|W1W2...Wm-1) = \(\prod_{i=1}^{m}\)P(Wi|W1W2...Wi-1)
结合马尔科夫假设(Markov assumption),Wi 的出现只与之前的 n-1 个词有关:P(Wi|W1W2...Wi-1) = P(Wi|Wi-n+1Wi-n+2...Wi-1)
则P(S) =\(\prod_{i=1}^{m}\)P(Wi|Wi-n+1Wi-n+2...Wi-1)
根据公式:
- 一元模型(n=1,unigram),P(S)=P(W1)P(W2)...P(Wi)...P(Wm)
- 二元模型(n=2,bigram),P(S)=P(W1)P(W2|W1)...P(Wi|Wi-i)...P(Wm|Wm-1)
- 三元模型(n=3,trigram),P(S)=P(W1)P(W2|W1)P(W3|W2W1)...P(Wi|Wi-i)...P(Wi|Wi-2Wi-1)...P(Wm|Wm-2Wm-1)
- ... ...
在实践中用的最多的就是bigram和trigram了,而且效果很不错
高于三元的用的很少,因为训练它需要更庞大的语料,而且数据稀疏严重,时间复杂度高,精度却提高的不多
基于规则的方法
其基本思想是针对语义、句法的分析对文本进行分词
具体方法有:
- 有机状态机
- 语法约束矩阵
- 特征词库
- ...
基于字标注的方法
在2002年之前,自动分词方法基本上是基于词(或词典)的,在此基础上可进一步分成基于规则和基于统计的两大类。第一篇基于字标注(Character-based Tagging)的分词论文发表在2002年第一届SIGHAN研讨会上,当时并未引起学界的重视。一年后,Xue在最大熵(Maximum Entropy,ME)模型上实现的基于字的分词系统参加了Bakeoff-2003的评测,在As语料库的封闭测试项目上获得第二名),然而其OOV 召回率Roov(0.729)却位居榜首。Xue还在CityU语料库的封闭测试中获得第三名,其Roov(0.670)仍然是该项比赛中最高的。尽管在Bakeoff2003中各种分词技术的优劣尚难分仲伯,但既然未登录词对分词精度的影响比分词歧义至少大5倍以上,我们自然看好这种能获致最高OOV召回的分词方法。这一预测果然在Bakeoff2005上得到了证实。
基于字标注的分词系统在Bakeoff-2005上崭露头角。其中Low的系统采用最大熵模型,在四项开放测试中夺得三项冠军(AS,CityU,PKU)和一项亚军(MSRA)。Tseng的系统采用条件随机场模型,在四项封闭测试中取得两项冠军(CityU, MSRA)、一项亚军(PKU)和一项季军(AS)。到了Bakeoff-2006,基于字的分词系统已遍地开花。其中,笔者用条件随机场模型实现的基于字标注的分词系统,在参加的六项分词评测中,夺得四个第一(CityU开放,As开放,As封闭,CTB封闭)和两个第三(CTB开放,CityU封闭)。
以往的分词方法,无论是基于规则的还是基于统计的,一般都依赖于一个事先编制的词表(词典)。自动分词过程就是通过词表和相关信息来做出词语切分的决策。与此相反,基于字标注的分词方法实际上是构词方法。即把分词过程视为字在字串中的标注问题。由于每个字在构造一个特定的词语时都占据着一个确定的构词位置(即词位),假如规定每个字最多只有四个构词位置:即B(词首),M (词中),E(词尾)和S(单独成词),那么下面句子(甲)的分词结果就可以直接表示成如(乙)所示的逐字标注形式:
(甲)分词结果:/上海/计划/N/本/世纪/末/实现/人均/国内/生产/总值/五千美元/。
(乙)字标注形式:上/B海/E计/B划/E N/S 本/s世/B 纪/E 末/S 实/B 现/E 人/B 均/E 国/B 内/E生/B产/E总/B值/E 五/B千/M 美/M 元/E 。/S
首先需要说明,这里说到的“字”不只限于汉字。考虑到中文真实文本中不可避免地会包含一定数量的非汉字字符,本文所说的“字”,也包括外文字母、阿拉伯数字和标点符号等字符。所有这些字符都是构词的基本单元。当然,汉字依然是这个单元集合中数量最多的一类字符。
把分词过程视为字的标注问题的一个重要优势在于,它能够平衡地看待词表词和未登录词的识别问题。在这种分词技术中,文本中的词表词和未登录词都是用统一的字标注过程来实现的。在学习架构上,既可以不必专门强调词表词信息,也不用专门设计特定的未登录词(如人名、地名、机构名)识别模块。这使得分词系统的设计大大简化。在字标注过程中,所有的字根据预定义的特征进行词位特性的学习,获得一个概率模型。然后,在待分字串上,根据字与字之间的结合紧密程度,得到一个词位的标注结果。最后,根据词位定义直接获得最终的分词结果。总而言之,在这样一个分词过程中,分词成为字重组的简单过程。然而这一简单处理带来的分词结果却是令人满意的。