最近在研究文本挖掘相关工具和知识,在对文档(文本文件、Word文件、网页等)能够进行全文检索或数据挖掘前,需要首先进行预处理,使之能够成为相对标准的基础数据,“分词”(Word Segmentation)是进行文档预处理过程中的一项重要工作,特别是对中文,由于中文与英文不同,中文只是字、句和段能通过明显的分界符来简单划界,但是词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多、困难的多。因此成功地进行中文分词,是实现计算机自动识别语句含义的基础。
关于中文分词的研究在30多年前就已经开展,大陆、台湾、新加坡等地区的研究人员均提出了不同的分词方法并且相互借鉴,比较有影响并且在目前获得较多应用的是台湾蔡志浩于1996发表的“MMSEG: A Word Identification System for Mandarin Chinese Text Based on Two Variants of the Maximum Matching Algorithm”,此方法(原文称之为系统,这里以解决方法代之)影响很广并且有多种语言的实现,因此对于有志于研究中文分词方面知识或者开发相关产品的同志们具有很好的借鉴意义,下面是我对这个方法的基本理解,可能还存在偏差,与大家共飨!
1、解决方法组成
在原文中,指出“The system consisted of a lexicon, two matching algorithms, and four ambiguity resolution rules ”,即系统由一个词典、两个匹配算法和四个歧义消除规则组成。
MMSEG的核心是“最大匹配(Maximum Matching)”算法,词典是基础,提供了基本的词表供匹配;算法是规则,规定了如何匹配;仅仅通过匹配还不能满足分组准确性的要求,尚存在很多歧义,因此通过四个歧义消除规则加以解决。
2、词典
词典包含了汉字和由汉字组成的词(两字及以上),对于单个汉字,词典中还需要提供其作为单字词的频率,以供歧义消除第4个规则适用。
3、匹配算法
分词包括基于字符串匹配、基于理解、基于统计等方法,目前匹配和统计方法是用的比较多,MMSEG主要采用正向最大匹配法,具体包括两个算法:
1) 简单匹配:对于字符串中的单个汉字,用词典匹配以此汉字开头的所有可能的词;
2) 复杂匹配:对于字符串中的单个汉字,查找所有可能以其开头的由三个词构成的子串(chunks,这个词较难理解,本质上可以认为一篇文章是由一个大字符串组成,取出的部分可以称之为“子串”,以下均按此名称说明)。此算法的基本原则是在对句子中的某个词进行切分时,如果有歧义拿不定主意,就再向后展望两个汉语词,并且找出所有可能的“三词语块”,不管是否存在歧义。
如:小米手机采用社交媒体进行产品推广,取得了很好的效果,……
取:"小米_手机_采用"这样一个子串。
4、歧义消除规则
消歧规则主要用来对完成匹配的由三个词构成的子串进行处理,因为一个子串虽然由相同的字组成,但是可能存在多种词的组合,如:
“中央电视台庆祝三十年”采用复杂匹配模式(即三词chunks)分词,可能有以下结果:
中央电视台 庆祝 三十年
中央 电视台 庆祝
中央 电视 台庆
这种情况称之为“歧义(ambiguity )”,这时候就需要歧义消除规则上场了。
(1)最大匹配(Maximun Matching,可以理解为子串的)
出现歧义时,首先使用本规则,取组成词的长度之和最长的子串进行分词,如上面的例子
中央电视台 庆祝 三十年(10个字)
中央 电视台 庆祝(7个字)
中央 电视 台庆(6个字)
第一个组合长度最长,因此按照此规则,其第一个词“中央电视台”将被作为正确的分词形式。
(2)最大平均词长(Largest average word length)(
在句子的末尾,很可能得到的子串只有一个或两个词,或者取得的不同子串组合长度相同,此时就需要使用此项规则,取最大平均词长的子串进行分词。
词长 = 子串字数/词数,如下面的子串:
三个子串的字数相同,因此规则1不能解决问题,此时使用规则2
中央电视台 (词长=5/1=5)
中央 电视台 (词长=5/2=2.5)
中央 电视 台 (词长=5/3=1.7)
按照本规则,子串1的平均词长最大,因此取第一个子串。
(3)最小词长方差(Smallest variance of word lengths)
对于规则1和规则2无法解决的歧义,就需要引入规则3。
方差就是各数据与样本平均数的差的平方和的平均数,方差用于衡量x1~xn群体与s之间的偏离程度,方差越小表明x1~xn集合与s越聚集。当x1~xn都等于s时,方差的值为0,表明它们聚焦在一个点。方差公式为:
词长是子串中每个词的长度,词长的平均值=子串字数/构成子串的词数,如下面的例子:
研究 生命 起源(词长平均值=6/3=2 ; 方差 =( (2-2)^2+(2-2)^2+(2-2)^2) / (3-1) = 0)
研究生 命 起源(词长平均值=6/3=2 ; 方差 =( (3-2)^2+(1-2)^2+(2-2)^2) / (3-1) = 1)
上面两个三词子串长度都是6,平均词长都是2,因此规则1、2均无法解决,用规则3进行处理,第一个子串的最小词长方差为0,因此取第1个子串的“研究”是最佳分词选项。
(4)最大单字词语语素自由度之和(Largest sum of degree of morphemic freedom of one-character words)
取出三词子串中字数为1的词(单字词),统计它们的单词语素自由度之和,取语素自由度之和最高的子串。所谓的预算自由度可以理解为这个字作为单字词的频率(使用其作为单字词的次数,通过语料库进行统计并记录在词典中),高频率的汉字更可能是一个单字单词,也就有更高的语素自由度。本规则则选取其中语素自由度和最大的子串,并将该子串的第一词语作为最佳的分词选择。如下例子:
为重 点 内容
为 重点 内容
在上面的子串中,“点”的语素自由度为10.22,“为”的语素自由度为13.64,说明“为”作为单个词使用的概率高一些,因此选择第2个子串最为最佳分词选择。(备注:这里的自由度值不同的词典可能不同,根据使用的词典来确定,而字典则通过对语料库的分析进行填充)
MMSEG只是进行中文分词的一种方法,随着人们对非结构化数据的应用需求的增加,各类新的分词方法也在不断涌现,准确度也在不断提高,例如分词过程通过标准词性,可以更方便计算机对语义的理解,本质上说,虽然一篇文章中有许多词,但是只要少部分词对索引和挖掘有用,例如名词相对于形容词就有更有价值!