中文分词技术(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=WWW...W
则出现S的概率为:P(S) = P(W)P(W|W)P(W|WW)...P(W|WW...W) = \(\prod_{i=1}^{m}\)P(W|WW...W)
结合马尔科夫假设(Markov assumption),W 的出现只与之前的 n-1 个词有关:P(W|WW...W) = P(W|WW...W)
则P(S) =\(\prod_{i=1}^{m}\)P(W|WW...W)
根据公式:
- 一元模型(n=1,unigram),P(S)=P(W)P(W)...P(W)...P(W)
- 二元模型(n=2,bigram),P(S)=P(W)P(W|W)...P(W|W)...P(W|W)
- 三元模型(n=3,trigram),P(S)=P(W)P(W|W)P(W|WW)...P(W|W)...P(W|WW)...P(W|WW)
- ... ...
在实践中用的最多的就是bigram和trigram了,而且效果很不错
高于三元的用的很少,因为训练它需要更庞大的语料,而且数据稀疏严重,时间复杂度高,精度却提高的不多
基于规则的方法
其基本思想是针对语义、句法的分析对文本进行分词
具体方法有:
- 有机状态机
- 语法约束矩阵
- 特征词库
- ...