译者原文地址: http://leeing.org/2009/11/01/mmseg-chinese-segmentation-algorithm/

论文原文地址: 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:

1. _C1_ _C2_ _C3C4_

2. _C1C2_ _C3C4_ _C5_

3. _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)。

a)       简单最大匹配:取最大长度的单词。

b)      复杂最大匹配:从Chunk中以最大长度取第一个单词,如果有多于一个chunk最大长度,应用下一个规则。

规则 2:最大平均单词长度(Chen & Liu,1992)。在每一个字符串的结尾,很可能得到只有一个或者两个单词的chunk,例如,下面的 chunks 拥有相等的长度且单词长度的方差也相等。

1. _C1_ _C2_ _C3_
2. _C1C2C3_

规则2 以最大平均单词长度从chunk中取得第一个单词。在上面的例子中,它从第二个chunk中选择_C1C2C3_。这个规则是假设更可以遇到多字的单词而不是单字的单词。

这个规则在chunk中一个或多个单词为空的条件下才有用。当chunks是一个真正的三词chunks,这个规则并没有用。因为拥有相同总长度的三词 chunks 拥有同样的平均长度,所以我们需要其它的解决方案。

规则 3:单词长度的最小方差(Chen & Liu 1992)。规则1和规则2不能解析的歧义条件很少,例如,这两个chunks拥有相同的长度:

1. _C1C2_ _C3C4_ _C5C6_
2. _C1C2C3_ _C4_ _C5C6_
规则3取chunk中拥有单词长度最小方差的作为单词,在上面的例子中,它从第一个chunk中取_C1C2_。
这个规则和Chen & Liu(1992)提出的规则完全相同。(然而,他们在规则1之后立即应用这个规则)。
这个规则假设单词的长度通常是均匀分布的。如果存在多于一个chunks拥有最小的单词长度方差,则
应用下一个规则。

规则 4:单字单词的语素自由度的最大和。这个例子展示了两个拥有相同长度,方差和平均单词长度的chunks。

1. _C1_ _C2_ _C3C4_
2. _C1_ _C2C3_ _C4_

两个chunks都有一个单字单词和一个双字单词。哪一个更像是正确的呢?在这里我们会关注于单字单词。中国汉字的语素自由度不同,一些很少使用的汉字被用作 free morhemes,但其它则拥有较大的自由度。一个汉字的出现频率可以作为它的语素自由度的索引。一个高频率的汉字更可能是一个单字单词,反之亦然。

用来计算语素自由度的和的公式是计算一个chunk中所以单字单词的频率。这个算法转换的原理是相同数量的频率区别并不对所有的频率范围起到一个一致性的影响。

规则4选取chunk中拥有最大频率的第一个词。由于很有可能两个汉字拥有相同的频率值,在这个规则应用之后应当没有歧义性。

虽然年份久远,对于NPL的CaiDiao而言,真的相当有启发性。

转载于:https://www.cnblogs.com/25-to-life/archive/2010/08/09/1795908.html

ZZ MMSEG 中文分词算法相关推荐

  1. Mmseg中文分词算法解析

    Mmseg中文分词算法解析 @author linjiexing 开发中文搜索和中文词库语义自己主动识别的时候,我採用都是基于mmseg中文分词算法开发的Jcseg开源project.使用场景涉及搜索 ...

  2. 中文分词算法python代码_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  3. 列举:中文分词算法你知道几种?

    列举:中文分词算法你知道几种? 摘要:看似普通的一句话,甚至几个词,在机器眼里都要经过好几道"程序".这个过程主要靠中文分词算法,这个算法分为三大类:机械分词算法.基于n元语法的分 ...

  4. 正向最大匹配算法 python代码_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  5. 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词

    基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤 第一次写中文分词程序,欢迎拍砖. publicclass MM ...

  6. 基于词典的逆向最大匹配中文分词算法,更好实现中英文数字混合分词

    基于词典的逆向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤.实际分词效果比正向分词效果好 publicclass RMM ...

  7. 在Hadoop上运行基于RMM中文分词算法的MapReduce程序

    原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词 ...

  8. python最大分词_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  9. java中文分词算法_Java实现逆向最大匹配中文分词算法

    写道 //Java实现逆向最大匹配中文分词算法 public class SplitChineseCharacter { public static void main(String[] args) ...

最新文章

  1. day16-Dom样式操作
  2. 多功能选择列表(左右选择)
  3. (Java常用类)日期时间类
  4. Java继承个人的理解_我对java继承的理解
  5. 五中高考2021成绩查询,全市2021届高三第二次模拟考试成绩分析会在开封五中胜利召开...
  6. VS2012 中 c++项目中的各个选项介绍
  7. 新手做2D手游该用哪些工具?
  8. 数据结构上机实践第四周项目3 - 单链表应用
  9. Win10(21h2)十一代i7,HUD750,打驱动一直重启
  10. JS实现双人五子棋简易游戏(上)
  11. 中文文本蕴含计算项目(88万中文文本蕴含数据集+中文文本蕴含模型)
  12. 【转载】IntelliJ IDEA 完美破解(2099年到期)
  13. 直角三角形面积Java_利用Eclipse编写第一个简单的Java程序,实现如下功能。 键盘输入:直角三角形两直角边a, b,根据勾股定理计算斜边的平方值。并输出。 例如:运行效果如下...
  14. R语言实战Topsis综合评价法
  15. Todesk远程连接时一直显示密码错误
  16. 极限测试4 - 系统能创建的最大tcp连接数
  17. Linux存储性能观测——vmstat命令详解
  18. MY-I.MX6-DEMO Android4.4.2环境搭建
  19. awk的真实使用案例及区间分布统计工具histogram.py
  20. 字符串匹配值Sunday算法

热门文章

  1. Java核心类笔记(字符串方法、StringBuilder(Joiner)、包装、JavaBean、枚举、Math、随机数)
  2. react 注释html,React之JSX语法
  3. java限制一个接口的执行时间_Java 并发编程:任务执行器 Executor 接口
  4. views 多个文件夹 netcore_优化 .net core 应用的 dockerfile
  5. python入门三剑客_python数据分析三剑客基础之matpoltlib初解
  6. 课节6: 图神经网络进阶模型之 ERNIESage 上
  7. mysql系列:登陆和退出
  8. SAP License:SAP 成本管理专题
  9. 基于画像推荐系统设计(离线+实时)
  10. 盘一盘2020年上半年的微博热搜词条(文末提供获取热搜词条方法)