第4章 谈谈分词
以下内容学习、摘录自《数学之美》
利用统计语言模型进行自然语言处理是建立在词的基础上的,因为词是表达语义的最小单位。对于西方拼音语言来讲,词之间有明确的分界符( Delimit),统计和使用语言模型非常直接。而对于一些亚洲语言(如中、日、韩、泰等),词之间没有明确的分界符。因此,需要先对句子进行分词,才能做进一步的自然语言处理。
分词的输入是一串胡子连着眉毛的汉字,例如一个句子:“数据组请到一楼会议室开会”,而分词的输出则是用分界符分割的一串词:数据组 / 请到 / 一楼 / 会议室 / 开会。
最容易想到的分词方法,就是“查字典”的方法:其实就是把一个句子从左向右扫描一遍,遇到字典里有的词就标识出来,遇到复合词(比如“上海大学”)就找最长的词匹配,遇到不认识的字串就分割成单字词,于是简单的分词就完成了。
这个最简单的方法可以解决七八成以上的分词问题。但是,它毕竟太简单,一个明显的不足是当遇到有二义性(有双重理解意思)的分割时就无能为力了。比如,对短语“发展中国家”,正确的分割是“发展 / 中 / 国家”,而采用从左向右查字典的办法会将它分割成“发展 / 中国 / 家”,显然是错了。另外,并非所有的最长匹配都一定是正确的。比如“上海大学城书店”的正确分词应该是“上海-大学城-书店”,而不是“上海大学-城-书店”。
断句和说文解字从根本上讲,就是消除歧义性,分词的二义性是语言歧义性的一部分。20世纪90年代以前,海内外不少学者试图用一些文法规则来解决分词的二义性问题,都不是很成功。当然也有一些学者开始注意到统计信息的作用,但是并没有找到有完善理论基础的正确方法。1990年前后,当时在清华大学电子工程系工作的郭进博士用统计语言模型成功解决了分词二义性问题,将汉语分词的错误率降低了一个数量级。
利用统计语言模型分词的方法,可以用几个数学公式简单概括。假定个句子S可以有3种分词方法,如下:
A1 / A2 / A3... / Ai
B1 / B2 / B3... / Bj
C1 / C2 / C3... / Ck
那么,如果A1,A2,A3...,Ai是最好的分词组合,那么其概率同时满足
P(A1 / A2 / A3... / Ai) > P(B1 / B2 / B3... / Bj)
P(A1 / A2 / A3... / Ai) > P(C1 / C2 / C3... / Ck)
因此,只要利用上一章提到的统计语言模型计算出每种分词在训练模型中出现的概率,并找出其中概率最大的,就能找到最好的分词方法。
需要指出的是任何方法都有它的局限性,虽然利用统计语言模型进行分词,可以取得比人工更好的结果,但是也不可能做到百分之百准确。因为统计语言模型很大程度上是依照“大众的想法”,或者“多数句子的用法”,而在特定情况下可能是错的。另外,有些人为创造出的“两难”的句子,比如对联“此地安能居住,其人好不悲伤”,用什么方法都无法消除二义性(它的两种分词方法“此地-安能-居住,其人-好不-悲伤”和“此地安-能居住,其人好-不悲伤”意思完全相反。)好在真实文本中,这些情况几乎不会发生。
如何衡量分词的结果?看似容易,其实不那么简单。说容易,是因为只要用计算机分词的结果与人工分词的结果进行比较就可以了。说它不那么简单,是因为不同的人对词切分看法上的差异远比我们想象的大得多。人工分词产生不一致的原因主要在于人们对词的颗粒度的认识问题。词汇是表达意思的最基本的单位,在小就没意思了。这就如同在化学里分子是保持化学性质的最小单位一样,再往下分到原子,化学特性就变了。好的做法是让一个分词器能够支持不同层次的词的切分,让不同的应用场景自行决定切分的颗粒度。
中文分词以统计语言模型为基础,经过几十年的发展和完善,今天基本上可以看做是一个已经解决的问题。当然不同的分词器也有质量差异,主要的差别在于数据的使用和工程实现的精度。