MMSEG 中文分词算法 java中文分词算法
由于学习需要,我尝试翻译MMSEG算法,目前处于初稿状态,很许多地方的翻译仍不尽准确,在以下几天会加以修改。 算法原文位于:http://technology.chtsai.org/mmseg/
MMSEG :一个基于最大匹配算法的两种变体的中文单词识别系统
发表日期: 1996-04-29 更新日期: 1998-03-06
文档更新: 2000-03-12
许可: 非商业使用情况下免费
Copyright 1996-2006 Chih-Hao Tsai (Email: hao520@yahoo.com)
摘要
中文文本在计算分析中一个问题是中文文本在印刷时缺少单词的边界,由于单词是一个基本的语义单元,因此有必要识别中文文本的单词以让进一步的处理可以进行。这份论文的目的是开发一个基于最大匹配算法的两种变体的中文单词识别系统,这个系统由一个词典,两种匹配算法,以及四种歧义消解规则组成。在一个由1013个单词组成的样本中,这个系统的正确识别率达到98.41%,本文也会对这个系统可能潜在的应用加以讨论。
介绍
正如Hung and Tzeng (1981) 和 DeFrancis (1984) 指出,中文书写系统同时以语素和音节来映射到口语中,因此,汉字在书面语中是区分的,从另一个方面来说,按照惯例,单词的边界在中文的印刷和书写中是缺失的。
单词识别过程中的难点
由于单词是一个基本的语言单位,因而有必要对中文文本的单词进行区分以让计算分析和处理中文文本能够进行。然而,在单词识别过程中有一些难点:
首先,几乎所有的汉字都可能是一个单字的单词。进一步地,它们能与其它汉字组成多字的单词,这就导致了大量的分词歧义。其次,在现代中文中,合成词是一种居主导地位的造词方案。经常很难区分一个低频率的合成词是一个单词还是一个短语;区分固有单词也会为一个问题。最后, 一些特定的形态结构例如重复和“A 不 A”也需要加以考虑。
若不是一些例外情况(例如e.g. Huang, Ahrens, & Chen, 1993; Sproat and Shih, 1990),大部份的单词识别方法共享一种常见的算法(例如,Chen & Liu, 1992; Fan & Tsai, 1988; Yeh & Lee, 1991),这种基本的策略是使用存储在一个预编译的词典中的大量词条集来匹配输入的汉字以找到所有(或部份)可能的分词方式,由于通常仅有一种正确的分词方法,歧义应当被消除。
最大匹配算法及它的变体
不同的研究中它们的歧义消除方法也不同。一个经过表明简单有效的方法是最大匹配算法(Chen & Liu, 1992),最大匹配算法可以有多种形式。
简单最大匹配算法。其基本形式是解析单个单词的歧义性(Yi-Ru Li, personal communication, January 14, 1995),例如,假设C1,C2,….代表一个字符串中的汉字。我们首先位于字符串的开头并想知道如何区分单词。我们首先搜索词典,看 C1是否为一个单个汉字组成的单词,然后搜索 C1C2来看是否为一个两个汉字组成的单词,以下类推。直至找到字典中最长的匹配。最可能的单词就是最长的匹配。我们取这个单词,然后继续这个过程直至字符串中的最后一个单词被识别出来。
复杂最大匹配算法。另一种最大匹配算法是由Chen 和Liu(1992)提出的,它比基本的形式更为复杂。他们的最大匹配规则指出,最可能的分词方案是三个单词。。。再次,我们从一个字符串的头部开始,寻找分词的方案。如果存在有歧义的分词(例如,C1是一个单词,但是C1C2也是一个单词,等等),然后我们向前再看两个单词去寻找所有可能的以 C1 或者 C1C2 开头的三词 chunks 。例如,如果有一个可能的三词chunks:
C1 C2 C3C4
C1C2 C3C4 C5
C1C2 C3C4 C5C6
最大长度的chunk是第三个。第一个单词,在第三个chunk中的C1C2,会被认为是正确的。我们接受这个词,并向前重复这个过程从汉字C3,直到字符串的最后一个词被识别。Chen 和 Liu(1992)声称这个规则达到了99.69%的准确率并且93.21%的歧义能被这个规则消除。
其它消除歧义的算法
除了最大匹配算法,许多其它消除歧义的算法也已经被得出。在消除歧义的过程中使用了各种各样的信息,例如,概率和统计(Chen & Liu, 1992; Fan & Tsai, 1988),语法(Yeh & Lee, 1991),还有词语形态学(Chen & Liu, 1992),它们当中的大部份需要一个构建良好,拥有汉字和词组频率信息的字典,单词的语法分类,以及一个语法或形态学的集合(例如,汉语知识信息处理小组[CKIP], 1993a, 1993b, 1993c)。
MMSEG 系统概述
MMSEG系统实现了前面讨论的最大匹配算法的简单和复杂形式。更进一步来说,为了消除未被复杂最大匹配算法所消除的歧义,又实现了三个消除歧义的规则。
其中一个是由Chen 和Liu(1992)提出的,剩下的两个则是新做法。这些规则会在后面加以讨论。这个系统没有特殊规则来处理固有名称和特殊的形态结构例如重复和“A不A”结构。
并不是说MMSEG不是设计目标为100%正确识别率的专业级别系统,在一定程度上,应当将 MMSEG 看作是一个通用平台,用来测试新的消除歧义的算法。然而,我们能看到即使是当前版本的MMSEG也达到了非常高的准确率,与一些在学术性期刊上发表的算法相当。
字典
字典的第一部份由124499个多字词条组成,字典词条的长度从两个汉字到八个汉字,可以从附录A来查看单词长度的分布。字典是一个简单的汉字字符串的有组织的列表,每个字符串没有附加额外的信息。字典的基础是一个由作者维护的拥有137450个中文单词列表(Tsai,1996c),这个列表是通过将一些能在 Internet 上获得的中文单词列表归并而创建的 (Tsai, 1996a)。
字典的第二部份由13060个汉字及它们的使用频率组成(Tsai,1996b),汉字的频率在最后一个歧义消除规则之中使用。
匹配算法
简单匹配:对于字符串中的汉字Cn,用字典匹配以Cn开头的子串并查找所有可能的匹配。
复杂匹配:对于字符串中的汉字Cn,查找所以可能以Cn开头的三字chunks,不管是否与第一个单词有歧义。三字chunks仅在第一个单词有歧义时形成。
歧义消除规则
四种歧义消除规则被使用。在简单和复杂的匹配算法中都使用了最大匹配规则来消除分词的歧义。剩下的三个规则没有(而且不能)应用于简单匹配算法。
规则 1:最大匹配(Chen & Liu 1992)。
简单最大匹配:取最大长度的单词。复杂最大匹配:从Chunk中以最大长度取第一个单词,如果有多于一个chunk最大长度,应用下一个规则。
规则 2:最大平均单词长度(Chen & Liu,1992)。在每一个字符串的结尾,很可能得到只有一个或者两个单词的chunk,例如,下面的 chunks 拥有相等的长度且单词长度的方差也相等。
C1 C2 C3
C1C2C3
规则2 以最大平均单词长度从chunk中取得第一个单词。**在上面的例子中,它从第二个chunk中选择C1C2C3。这个规则是假设更可以遇到多字的单词而不是单字的单词。
这个规则在chunk中一个或多个单词为空的条件下才有用。当chunks是一个真正的三词chunks,这个规则并没有用。因为拥有相同总长度的三词 chunks 拥有同样的平均长度,所以我们需要其它的解决方案。
规则 3:单词长度的最小方差(Chen & Liu 1992)。规则1和规则2不能解析的歧义条件很少,例如,这两个chunks拥有相同的长度:
C1C2 C3C4 C5C6
C1C2C3 C4 C5C6
规则3取chunk中拥有单词长度最小方差的作为单词,在上面的例子中,它从第一个chunk中取C1C2。这个规则和Chen & Liu(1992)提出的规则完全相同。(然而,他们在规则1之后立即应用这个规则)。这个规则假设单词的长度通常是均匀分布的。如果存在多于一个chunks拥有最小的单词长度方差,则应用下一个规则。
规则 4:单字单词的语素自由度的最大和。这个例子展示了两个拥有相同长度,方差和平均单词长度的chunks。
C1 C2 C3C4
C1 C2C3 C4
两个chunks都有一个单字单词和一个双字单词。哪一个更像是正确的呢?在这里我们会关注于单字单词。中国汉字的语素自由度不同,一些很少使用的汉字被用作 free morhemes,但其它则拥有较大的自由度。一个汉字的出现频率可以作为它的语素自由度的索引。一个高频率的汉字更可能是一个单字单词,反之亦然。
用来计算语素自由度的和的公式是计算一个chunk中所以单字单词的频率。这个算法转换的原理是相同数量的频率区别并不对所有的频率范围起到一个一致性的影响。
规则4选取chunk中拥有最大频率的第一个词。由于很有可能两个汉字拥有相同的频率值,在这个规则应用之后应当没有歧义性。
算法实现
MMSEG系统是用C语言编写的。
硬件和软件环境。MMSEG运行在一个拥有1MB主存和12M扩展岁内存的IBM兼容PC(486DX-33)上,操作系统是MS-DOS。用来构建MMSEG的编译器是Turbo C++ 3.0。MMSEG占用1.5M的磁盘空间,包含可执行文件,源代码,字典,索引和测试数据。
测试结果
一个由1013个单词组成的样本用来测试MMSEg的两个单词识别算法。表1展示了初步的测试结果。
12345678910111213Table 1Testing Results_______________________________________________________ Identification Algorithm Simple Complex_______________________________________________________Words identified (N2) 1012 1010Correct identifications (N3) 966 994Recall rate (N3/N1) 95.36% 98.12%Precision rate (N3/N2) 95.45% 98.41%_______________________________________________________Note.Number of words (N1) in the input sample is 1013.
不出人意料的,就算是简单的最大匹配算法也正确识别出样本中95%的单词。这也作为评估单词识别算法的基准。
包含四条歧义解析的复杂最大匹配算法,正确识别出样本中98%的单词。这个性能比简单匹配算法要好。
表2展示了每条歧义解析规则的成功率。前两条规则解析出90%的歧义并拥有一个相对高的成功率。大部份(59.5%)歧义被规则1解析。规则2解析了30.6%。规则3只解析出歧义总数的1%。规则4解析了9%。这些规则的准确率总的来说是比较高的,但规则3稍比其它规则要低。
12345678910111213141516Table 2Accuracy of Each Ambiguity Resolution Rule___________________________________________________ Ambiguity Resolution Rules 1 2 3 4___________________________________________________Identifications 400 245 6 82Errors 5 4 2 4Accuracy 98.75% 98.37% 66.67% 95.12%___________________________________________________Note.Rule 1 = Maximum Matching.Rule 2 = Largest Average Word Length.Rule 3 = Smallest Variance of Word Lengths.Rule 4 = Largest Sum of Degree of Morphemic Freedomof One-Character Words.
错误示例:
最大匹配算法:
最大平均单词长度:
最小单词长度方差:
最大单字单词的语素自由度和:
讨论
MMSEG系统的准确率和那些发表在学术期刊上的算法相当。这个发现说明MMSEG是一个成功的的中文单词识别系统。四个歧义解析规则表明是相当有效率的。规则1(最大匹配算法)解析出大部份的歧义。特别的,规则3(最大平均单词长度)解析出了比我想象中更多的歧义。令人吃惊的是,很少歧义是被规则2(最小单词长度方差)解析的。这可能与每条规则的顺序有关。在MMSEG早期的版本中,规则3在规则2之前被应用。在那个版本中,规则2解析出了比当前MMSEG版本更多的歧义。规则4(最大单字单词的语素自由度和)运行相当良好。这表明统计信息在去歧义中是很有用的。像前面提到的那样,MMSEG被设计为测试一个新的歧义解析算法的通用的平台。在将来我想做的是归纳出中文读者在阅读过程中是如何区分单词和单词的边界的前提。然后我可以使用MMSEG来测试这些算法。同时,我也会设计实验用于从人提交中收集数据。通过计算机程序和人类提交的性能的对比。我能(希望可以)确定每个算法的心理学真实性。
有效性和可移植性
MMSEG的源代码和可执行文件是一个zip 档案,点击下面的链接来下载:
mmseg.zip (532KB)
mmseg的源代码可以不经修改用gcc来编译,所以基本上来说这是平台无关的。 你被鼓励将MMSEG用于科研的目的,也鼓励用来开发免费的软件,只要在你的源代码和文档的恰当的位置中提及我和MMSEG,并给我发送你的软件的一份拷贝。然而,对于MMSEG任何商业使用需要单独的许可。
MMSEG,Libtabe和XCIN
Libtabe 是一个由 Pai-Hsiang Hsiao 领导的TaBE项目发行的C库, Libtabe 提供了统一的接口和支持函数用来处理汉字,语音,单词和句子。
MMSEG使用的单词识别算法已经由Pai-Hsiang实现,当中使用了libtabe的最新发布,用以提供单词识别的功能。通过libtabe的这个功能,Pai-Hsiang Hsiao能开发一个名为bims的模块,它能以一个很高的准确率智能地从一个中文音节中恢复正确的汉字。正如它出名的地方,同音异义词在汉字之间是很常见的。Libtabe的成就,在这个背景中是非常重要的。
广泛应用于X Window System中,用以提供中文输入功能的的XCIN和XIM(X 输入法)服务器的最新版本已经集成于libtabe中,它提供一个智能的语音输入模块,事实已经证明这个模块和商业产品的质量相当。
安装和运行MMSEG
MMSEG当前的实现并不将字典载入到计算机内存中。它只载入索引并在磁盘上搜索字典。因此,推荐配备具有高速的磁盘缓存的硬盘;并且,快速的 Pentium PC 是首选。
运行MMSEG:
123456789101112131415161718192021222324MMSEG file1 file1 path [complexity] [progress note]file1: source file to be processedfile2: target file to write segmented text topath: where the lexicon can be foundcomplexity: Complexity of matching algorithm: simple Simple (1 word) matching (default) complex Complex (3-word chunk) matchingprogress note (for complex matching only): Progress note sent to standard output (screen) during segmentation: verbose Display (1) All ambiguous segmentations and the length, variance of word lengths, average word length, and sum of log(frequency) for each each segmentation (2) Number of ambiguous segmentations not resolved by each disambiguation rule, and at which rule the ambiguity is resolved standard Display (2) only quiet None of the above information will be displayedExample: MMSEG in.txt out.txt .lexicon complex quie
Author Notes
This paper was a combination of the two term projects for “Topics in Computational Linguistics” and “Seminar in Chinese Linguistics” taught by Professor Chin-Chuan Cheng at University of Illinois at Urbana-Champaign. In 1995, when I initiated the idea of writing a Chinese word identification program, I knew little about computational linguistics. With the knowledge I have gained from his courses during the past two semesters, I am now capable of implementing such a system. I am also grateful to Professor George McConkie at University of Illinois, Professor Chu-Ren Huang at Academia Sinica, Taiwan, Professor Richard Sproat at AT & T Bell Laboratories, and Yi-Ru Li who was a graduate student in computer science at National Cheng-Kung University, Taiwan, for their insightful suggestions. I also want to thank Shih-Kun Huang at National Chiao-Tung University (now at Academia Sinica), Taiwan, who calculated the frequency counts of Chinese characters from a huge corpus consisting of all BIG-5 encoded articles posted to Usenet during 1994-95 and made his data available to the public.
Posted by leeing Nov 1st, 2009 NLP
更多阅读
MMSEG 中文分词算法 java中文分词算法
Nov 1st, 2009 | Comments由于学习需要,我尝试翻译MMSEG算法,目前处于初稿状态,很许多地方的翻译仍不尽准确,在以下几天会加以修改。 算法原文位于:http://technology.chtsai.org/mmseg/MMSEG :一个基于最大匹配算法的两种变体的中文单词
年龄的探密,一个最神奇的测算法! 神奇的心算法和十进制
(2013-06-14 16:24:14) 转载▼哈哈!好简单的数字游戏!本人不到三分钟破译其中奥妙!转载过来供朋友们思考——如同世上任何看似玄妙的事物其实都有它的客观规律,就看你能不能发现而已!一旦发现,你就能够触类旁通揭穿政治经济骗子们的伎
在STEP7V5.5中如何实现数值微分?算法 数值微分画线算法
在 STEP 7 V5.5 中如何实现数值微分?【算法】描述在数学中,微分是一个函数变化率的处理。不过在实践中,通常没有数学值,而 (举例来说)只有一个随时间变化的值。这个基于 STEP 7 Basic V5.5的程序根据当前值和前一函数值(一阶导数)计算
穷追非明码算法的注册码+算法注册机|一蓑烟雨论坛|UpkSafe|Upk安 算法注册机
【文章标题】: 穷追非明码算法的注册码+算法注册机【文章作者】: BeyondMe【作者邮箱】: futuring@126.com【作者主页】: http://hi.baidu.com/beyond0769【软件名称】: Flash Screensaver Maker Simple Version V3.7【下载地址】: h
功能简单的公历农历转换VB算法 ios 公历转农历算法
功能简单的公历农历转换VB算法2005-01-11 17:04 3862人阅读 评论(7) 收藏 举报在网上找到一段公农历转换的VB代码,经使用后发现有不少错误且代码没经优化。花了点时间研究了一下,使速度得到显著提升(同样计算1000个日期,优化前需要4秒,优