Rover12421's Blog

The End.

中文搜索引擎技术:分词算法分析

什么是中文分词

我们知道,英文是以词为单位,词和词之间靠空格分界符来隔开,而中文只是字、句和段可以通过明显的分界符连起来描述一个意思。唯独词没有一个形式上的分界符,英文也同样的问题,但是在词这一层来说,中文比英文分词要复杂。 那么我们就来看看百度采用的核心技术中文分词技术。

目前主流的中文分词算法有以下3种:
基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。

1、基于字符串匹配的分词方法
基于字符串匹配的分词方法又叫做机械分词方法,它是按照一定的策略将要分析的句子与机器词典中的词进行匹配,如果在词典中找到某个词语,则匹配成功。按扫描方向不同,可以分为正向匹配和逆向匹配;按不同长度优先匹配的情况,可以分为最大匹配和最小匹配;按是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。
常用的基于字符串匹配的分词方法:
        1)正向最大匹配法(由左到右);
        2)逆向最大匹配法(由右到左);
        3)最少切分(使每一句中切出的词数最小)。
可以将上述各种方法组合,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。正向最小匹配和逆向最小匹配一般很少使用。一般逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。统计结果表明,单纯的使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过各种其它的语言信息来进一步提高切分的准确率。
一种方法是改进扫描方式,称之为特征扫描或标志切分,优先在待分析句子中识别和切分出一些带有明显特征的词,以这些词作为断点,可将原字符串分为较小的句子再进行机械分词,这样可以减少匹配的错误率。
另一种方法是将分词和词类标注结合起来,利用丰富的词类信息对分词决策提供帮助,并且在标注过程中又反过来对分词结果进行检验、调整,从而极大地提高切分的准确率。
对于机械分词方法,可以建立一个一般的模型。

2、基于理解的分词方法
基于理解的分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。它的基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。
它通常包括三个部分:分词子系统、句法语义子系统、总控部分。
在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。

3、基于统计的分词方法
词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻共同出现的频率或概率能够较好的反映成词的可信度。可以对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息。定义两个字的互现信息,计算两个汉字X、Y的相邻共现概率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时,便可认为此字组可能构成了一个词。这种方法只需对语料中的字组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计取词方法。但这种方法也有一定的局限性,会经常抽出一些共现频度高、但并不是词的常用字组,例如“这一”、“之一”、“有的”、“我的”、“许多的”等,并且对常用词的识别精度差,时空开销大。实际应用的统计分词系统都要使用一部基本的分词词典(常用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。
到底哪种分词算法的准确度更高,目前并无定论。对于任何一个成熟的分词系统来说,不可能单独依靠某一种算法来实现,都需要综合不同的算法。笔者了解,海量科技的分词算法就采用“复方分词法”,所谓复方,相当于用中药中的复方概念,即用不同的药才综合起来去医治疾病,同样,对于中文词的识别,需要多种算法来处理不同的问题。

分词中的难题
中文是一种十分复杂的语言,要让计算机理解中文语言更是困难。在中文分词过程当中,有两大难题一直没有完全突破。

1、歧义识别
歧义是指同样的一句话,可能有两种或者更多的切分方法。如:表面的,可划分为“表面”和“面的”,这个短语就分为了“表面 的”和“表 面的”。这种情况称为交叉歧义。像这种交叉歧义十分常见,“化妆和服装”可以分为“化妆 和 服装”或者“化妆 和服 装”。计算机很难知道哪个方案是正确。
交叉歧义相对组合歧义来说比较容易处理,组合歧义就必需根据整个句子来判断。如,“这个门把手坏了”中,“把手”是个词,但在句子“请把手拿开”中,“把手”就不是一个词;在“将军任命了一名中将”中,“中将”是个词,但在句子“产量三年中将增长两倍”中,“中将”就不再是词。这些词计算机又如何去识别?
在歧义中还有一个难题,真歧义。真歧义意思是给出一句话,由人去很难判断哪个应该是词。例如:“乒乓球拍卖完了”,可以切分成“乒乓 球拍 卖 完 了”、也可切分成“乒乓球 拍卖 完 了”,如果没有上下文其他的句子,很难判断“拍卖”在这里算不算一个词。

2、新词识别
新词,专业术语称为未登录词。也就是在字典中还没有收录过的那些词。最典型的是人名,人可以很容易理解句子“王军虎去广州了”中,“王军虎”是个词,因为是一个人的名字,但要是让计算机去识别就困难了。如把“王军虎”做为一个词收录到字典中去,全世界有那么多名字,而且每时每刻都有新增的人名,收录这些人名本身就是一项非常巨大的工程。即使这项工作可以完成,还是会存在问题,例如:在句子“王军虎头虎脑的”中,“王军虎”还能不能算词?
新词中除了人名以外,还有机构名、地名、产品名、商标名、简称、省略语等都是很难处理的问题,而且这些又正好是人们经常使用的词,因此对于搜索引擎来说,分词系统中的新词识别十分重要。目前新词识别准确率也成为评价分词系统好坏的重要标志之一。

Comments