1. 摘要
本次我们将开始新的分享系列——自然语言处理(NLP),NLP可以被应用于很多领域:机器翻译、情感分析、智能问答、文本分类等等。本次我们将分享中文自然语言处理的一个重要技术:中文分词技术。在通常的语言理解中,词是最小的能够独立活动的语言成分。只有将词确定下来,中文才能够向英文那样过渡到短语划分以及主题分析,以至自然语言处理。
2. 中文分词技术
由于汉语结构与欧体系语种差异较大,对词的构成边界方面很难进行定位。在英文中,单词本身就是词的表示,一篇英文文章就是单词加空格来表示。在汉语中,词以字为单位,但一篇汉语文章的语义却仍以词来划分。因此,在处理中文文档时,需要进行分词处理,将文档转换成词来表示。这个切词过程就是中文分词。通过计算机自动识别出句子的词,在词间加入边界标识符,分隔出各个词汇,主要的难点在于分词歧义。
中文分词主要有三个流派:规则分词、统计分词、混合分词。
3. 规则分词
规则分词:基于规则的分词是一种机械分词方法,主要是通过维护词典,将语句中的每一个字符串与词表中的词逐一匹配,匹配到就切分,否则不予切分。按照匹配切分的方式,主要有正向最大匹配法、逆向最大匹配法和双向最大匹配法。
正向最大匹配法思想:假设分词词典中的最长词有i个字符,那么用被处理文档的当前字符串的前i个字符作为匹配字段,查找字典。若字典中存在这样一个i长度字词,则匹配成功,匹配字段则被作为一个词切分出来。如果词典中找不到这样的一个i长度字词,则匹配失败。此时便将匹配字段中的最后一个字去掉,对剩余的字符串重新匹配处理。根据这样的规则处理下去,直到匹配成功,即切分出一个词或剩余字符串的长度为0为止。这样就完成一轮匹配,然后取下一个i长度字符串进行匹配处理,直到文档被扫描完为止。
逆向最大匹配法思想:基本原理与正向最大匹配法相同,不同的是分词切分的方向与正向最大匹配法相反。相应的,它使用的分词词典是逆序词典,其中的每个词条都将按逆序方式存放。在实际的处理时,先将文档进行倒排处理,生成逆序文档。然后,根据逆序词典,对逆序文档用正向最大匹配法处理即可。
由于汉语中偏正结构较多,若从后向前匹配,可以适当提高精准度。所以,逆向最大匹配法比正向最大匹配法的误差要小。统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配法的错误率为1/245。
双向最大匹配法思想:将正向最大匹配法得到的分词结果和逆向最大匹配法得到的结果进行比较,然后按照最大匹配原则,选取词数切分最少的作为结果。
基于规则的分词,一般都比较简单高效,但是词典的维护是一个很庞大的工程。而且网络新词频频出现,很难通过词典覆盖到所以词。
4. 统计分词
统计分词:主要思想是把每个词看作是由词的最小单位的各个字组成的,如果相连的字在不同的文本中出现的次数越多,就证明这相连的字很可能就是一个词。因此我们就可以利用字与字相邻出现的频率来反映成词的可靠度,统计语料中相邻共现的各个字的组合的频率,当组合频率高于某一个临界值时,我们可以认为这个字的组合可能会构成一个词语。
基于统计的分词,通常需要两个步骤操作:
(1)建立统计语言模型;
(2)对句子进行单词划分,然后对划分结果进行概率计算,获得概率最大的分词方式。这里就要用到了统计学习算法。
语言模型:用概率论的专业术语描述语言模型就是,为长度为m的字符串确定其概率分布P(w1,w2, …,wm),其中w1到wm依次表示文本中的每个词语。一般采用链式法则计算其概率值。
P(w1,w2, …,wm)=P(w1)P(w2|w1)P(w3|w1,w2)
...P(wi|w1,w2, …,wi-1) …P(wm|w1,w2, …,wm-1)
当文本过长时,公式右部从第三项起的每一项计算难度都很大。为了解决该问题,提出了n元模型用来降低该计算难度。所谓的n元模型就是在估算条件概率时,忽略距离大于等于n的上文词的影响,那么此时,计算公式可以简化为
P(wi|w1,w2, …,wi-1) ≈P(wi|wi-(n-1), …,wi-1)
当n=1时称为一元模型,此时整个句子的概率可以表示为P(w1,w2,…,wm)=P(w1)P(w2)…P(wm)。在一元模型中,整个句子的概率等于各个词语概率的乘积。也可以看作是各个词之间是相互独立的,这无疑是完全损失了句子中的顺序信息。所以一元模型的效果并不理想。
由上面表达式可见,当n越大时,模型包含的词顺序信息越丰富,但同时计算量也随之增大。此时长度越长的文本序列出现的次数也会减少。根据公式估计n元条件概率时,就会出现分子分母为零的情况。因此,在一般的n元模型中需要配合相应的平滑算法解决该问题,例如拉普拉斯平滑算法。
HMM模型:隐马尔可夫模型(HMM)是将分词作为字在字串中的序列标注任务来实现的。基本思想是,每一个字在构造一个特定词语时都占据着一个确定的构词位置(简称词位),现规定每个字最多只有4个构词位置,即B(词首)、M(词中)、E(词尾)、S(单独成词),那么对常见的一句话,我们展示效果为。
原句:留给中国足球队的时间已经不多了!
切词后:留给/中国/足球队/的/时间/已经/不多了!
逐字标注后:留/B 给/E 中/B 国/E 足/B 球/M 队/E 的/S 时/B 间/E 已/B 经/E 不/B 多/M 了/M !/E
使用数学抽象表示:用λ=λ1λ2…λn代表输入的句子,n为句子的长度λi表示字,o=o1o2…on代表输出的标签,这样最理想的输出可以表示为:
Max=maxP(o1o2…on|λ1λ2…λn)
在分词的任务中,o即为B、M、E、S这4种标记,λ则表示文本中“足”“球”“队”等单独的字,也包括标点符号等非中文字符。需要注意的是,P(o|λ)是关于2n个变量的条件概率,且n不固定。因此,几乎是无法对P(o|λ)进行精确计算的。在这里要引入观测独立性假设,即每个字的输出仅仅与当前的字有关,于是就可以得到下面表达式:
P(o1o2…on|λ1λ2…λn)=P(o1|λ1)P(o2|λ2)…P(on|λn)
通过了观测独立性假设后,目标问题得到了极大的简化,P(ok|λk)在计算上容易了很多。但是我们会发现这种方法完全没有考虑上下文环境,所以这是非常不合理的。
HMM就是用来解决上述问题的。在上面公式中,我们期望求解的是P(o|λ),那么通过贝叶斯公式分析可以得到:
P(o|λ)=P(o,λ)/P(λ)=P(λ|o)P(o)/P(λ)
λ为给定的输入,因此P(λ)计算为常数,因此最大化P(o,λ)等价于最大化P(λ|o)P(o)。
此时对P(λ|o)P(o)作马尔可夫假设,可以得到:
P(λ|o)=P(λ1|o1)P(λ2|o2)…P(λn|on)
同时,对P(o)有:
P(o)=P(o1)P(o2|o1)P(o3|o1,o2)…P(on|o1,o2,…,on-1)
这是也会面临计算困难的问题,从公式中的第三项开始,计算难度就非常大,这里HMM做了另一个假设——齐次马尔可夫假设:每次输出仅与上一个的输出相关,那么公式可以简化为:
P(o)=P(o1)P(o2|o1)P(o3|o2)…P(on|on-1)
这时,对于P(λ|o)P(o)就可以表示为:
P(λ|o)P(o)≈P(λ1|o1)P(o2|o1)P(λ2|o2)P(o3|o2)…P(λn|on)P(on|on-1)
在HMM中,将P(λk|ok)称为发射概率,P(ok|ok-1)称为转移概率。并且可以通过设置P(ok|ok-1)=0,排除上述中不合理的情况。在我们列出的马尔可夫式子中就是一个二元语言模型,在实际的分词中也多采用二元模型。
HMM求解MaxP(λ|o)P(o)的常用方法是Veterbi算法。算法思想是:如果最终的最优路径经过某个oi,那么从初始节点到oi-1点的路径也必然是最优路径。因为每个节点oi只会影响前后两个P(oi-1|oi)和P(oi|oi+1)。
和机械分词相比,统计分词方法不需要维护词典,还能较好的处理歧义和一些未登录词,是目前很主流的方法,但分词的效果很依赖训练语料的质量,并且计算量高于机械分词很多。
5. 混合分词
在目前常用的分词方法中,在具体的分词任务中,效果上并未有很明显的差距。在实际的工程应用中,首先是先基于一种分词算法使用,然后将其他分词方法辅助使用。
通常的使用方式是先基于机械分词方法进行分词,然后再使用统计分词方法辅助对准未登录词和歧义词,这样混合使用会有比单一使用有更好的效果。
6. 总结
本次分享了中文自然语言处理项目分词的相关技术,基于词典匹配下的规则分词:正向最大匹配法、逆向最大匹配法以及双向最大匹配法。以及为了消除词语歧义和为登录词的基于统计原理的的分词技术:HMM模型。并介绍了通常实战分词时使用的混合分词策略。