`

中文分词基本算法介绍

阅读更多

中文分词基本算法介绍

本文内容框架:

1、基于词典的方法(字符串匹配,机械分词方法)

2基于统计的分词(无字典分词)

3基于规则的分词(基于语义)

4基于字标注的中文分词方法

5基于人工智能技术的中文分词方法

6中文分词的难点

7小结

 

 

 

基于词典的方法、基于统计的方法、基于规则的方法等

1、基于词典的方法(字符串匹配,机械分词方法)

定义:按照一定策略将待分析的汉字串与一个“大机器词典”中的词条进行匹配,若在词典中找到某个字符串,则匹配成功。

按照扫描方向的不同:正向匹配和逆向匹配

按照长度的不同:最大匹配和最小匹配

1.1正向最大匹配思想MM

1》从左向右取待切分汉语句的m个字符作为匹配字段,m为大机器词典中最长词条个数。

2》查找大机器词典并进行匹配。若匹配成功,则将这个匹配字段作为一个词切分出来。

若匹配不成功,则将这个匹配字段的最后一个字去掉,剩下的字符串作为新的匹配字段,进行再次匹配,重复以上过程,直到切分出所有词为止。

1.2邻近匹配算法

 

邻近匹配算法是正向最大匹配算法的改进,因为正向正向最大匹配算法对每个不存在的长字符串都要进行一次二分搜索,算法复杂度太高,可以利用同一个首字符下的词条按升序排列这一条件,在找到某个字符串后,在其后增加一个字得到一个新字串,如果新字串在词典中出现,那么新词一定在原字串的后面,且相隔位置不会太远。这样就可以加快匹配进程。

1.3逆向最大匹配算法RMM

该算法是正向最大匹配的逆向思维(最大匹配的顺序不是从首字母开始,而是从末尾开始),匹配不成功,将匹配字段的最前一个字去掉,实验表明,逆向最大匹配算法要优于正向最大匹配算法。

1.4双向最大匹配法(Bi-directction Matching method,BM)

    双向最大匹配法是将正向最大匹配法得到的分词结果和逆向最大匹配法的到的结果进行比较,从而决定正确的分词方法。据SunM.S. 和 Benjamin K.T.(1995)的研究表明,中文中90.0%左右的句子,正向最大匹配法和逆向最大匹配法完全重合且正确,只有大概9.0%的句子两种切分方法得到的结果不一样,但其中必有一个是正确的(歧义检测成功),只有不到1.0%的句子,或者正向最大匹配法和逆向最大匹配法的切分虽重合却是错的,或者正向最大匹配法和逆向最大匹配法切分不同但两个都不对(歧义检测失败)。这正是双向最大匹配法在实用中文信息处理系统中得以广泛使用的原因所在。

1.5最短路径匹配算法(Shortest path match)

最短路径匹配算法是根据词典,找出字串中所有可能的词(也称全分词),然后构造词语切分有向无环图。这样,每一个词对应图中的一条有向边。若赋给相应的边长一个权值(该权值可以是常数,也可以是构成的词的属性值),然后针对该切分图,在起点到终点的所有路径中,求出最短路径,该最短路径上包含的词就是该句子的切分结果。最短路径匹配算法的规则是使切分处理的词数最少,符合汉语自身的语言规律。但是,同样发现在实际应用中,同样不能正确切分出许多不完全符合规则的句子。如果有多条最短路径,往往只能保留其中一个结果,这样对其他同样符合要求的结果是不公平的,也缺乏理论依据。

1.6基于统计的最短路径分词算法

为进一步提供切分精度,可以在词表中增加词的属性值,即为每一个词给出一个权重,这样每个词在字符串的权重就不同。最简单的词权重可以用词的词频表示,具体权重值可以通过该规模语料库获得。


2基于统计的分词(无字典分词)

主要思想:上下文中,相邻的字同时出现的次数越多,就越可能构成一个词。因此字与字相邻出现的概率或频率能较好的反映词的可信度。

主要统计模型为:N元文法模型(N-gram)、隐马尔科夫模型(Hidden Markov Model, HMM)


2.1N-gram模型思想

模型基于这样一种假设,第n个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积 .我们给定一个词,然后猜测下一个词是什么。当我说“艳照门”这个词时,你想到下一个词是什么呢?我想大家很有可能会想到“***”,基本上不会有人会想到“陈志杰”吧。N-gram模型的主要思想就是这样的。

对于一个句子T,我们怎么算它出现的概率呢?假设T是由词序列W1,W2,W3,…Wn组成的,那么P(T)=P(W1W2W3…Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)

   但是这种方法存在两个致命的缺陷:一个缺陷是参数空间过大,不可能实用化;另外一个缺陷是数据稀疏严重。

   为了解决这个问题,我们引入了马尔科夫假设:一个词的出现仅仅依赖于它前面出现的有限的一个或者几个词。

   如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为bigram。即 

   P(T) = P(W1W2W3…Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1) 

          ≈P(W1)P(W2|W1)P(W3|W2)…P(Wn|Wn-1)

   如果一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为trigram。

   在实践中用的最多的就是bigram和trigram了,而且效果很不错。高于四元的用的很少,因为训练它需要更庞大的语料,而且数据稀疏严重,时间复杂度高,精度却提高的不多。设w1,w2,w3,...,wn是长度为n的字符串,规定任意词wi 只与它的前两个相关,得到三元概率模型,以此类推,N元模型就是假设当前词的出现概率只同它前面的N-1个词有关。

2.2隐马尔科夫模型思想


3基于规则的分词(基于语义)

通过模拟人对句子的理解,达到识别词的效果,基本思想是语义分析,句法分析,利用句法信息和语义信息对文本进行分词。自动推理,并完成对未登录词的补充是其优点。不成熟.

具体概念:有限状态机\语法约束矩阵\特征词库

4基于字标注的中文分词方法

以往的分词方法,无论是基于规则的还是基于统计的,一般都依赖于一个事先编制的词表(词典)。自动分词过程就是通过词表和相关信息来做出词语切分的决策。与此相反,基于字标注的分词方法实际上是构词方法。即把分词过程视为字在字串中的标注问题。由于每个字在构造一个特定的词语时都占据着一个确定的构词位置(即词位),假如规定每个字最多只有四个构词位置:即B(词首),M (词中),E(词尾)和S(单独成词),那么下面句子(甲)的分词结果就可以直接表示成如(乙)所示的逐字标注形式:

(甲)分词结果:/上海/计划/N/本/世纪/末/实现/人均/国内/生产/总值/五千美元/ 

(乙)字标注形式:上/B海/E计/B划/E N/S 本/s世/B 纪/E 末/S 实/B 现/E 人/B 均/E 国/B 内/E生/B产/E总/B值/E 五/B千/M 美/M 元/E 。/S

    首先需要说明,这里说到的“字”不只限于汉字。考虑到中文真实文本中不可避免地会包含一定数量的非汉字字符,本文所说的“字”,也包括外文字母、阿拉伯数字和标点符号等字符。所有这些字符都是构词的基本单元。当然,汉字依然是这个单元集合中数量最多的一类字符。 

把分词过程视为字的标注问题的一个重要优势在于,它能够平衡地看待词表词和未登录词的识别问题。在这种分词技术中,文本中的词表词和未登录词都是用统一的字标注过程来实现的。在学习架构上,既可以不必专门强调词表词信息,也不用专门设计特定的未登录词(如人名、地名、机构名)识别模块。这使得分词系统的设计大大简化。在字标注过程中,所有的字根据预定义的特征进行词位特性的学习,获得一个概率模型。然后,在待分字串上,根据字与字之间的结合紧密程度,得到一个词位的标注结果。最后,根据词位定义直接获得最终的分词结果。总而言之,在这样一个分词过程中,分词成为字重组的简单过程。然而这一简单处理带来的分词结果却是令人满意的。

5基于人工智能技术的中文分词方法

5.1神经网络分词算法

 

词算法该类分词算法是以模拟人脑运行,分布处理和简历数值计算模型工作的。它将分词知识的隐式方法存入神经网内部,通过自学习和训练内部权值,以达到正确的分词结果。

神经网络分词法的关键在于知识库(权重链表)的组织和网络推理机制的建立。算法的分词过程是一个生成分词动态网的过程,该过程是分步进行的:首先以确定待处理语句的权字串为基础,来确定网络处理单元;然后根据链接权重表激活输入/输出单元之间的链接,该过程可以采用某种激活方式,取一个汉字作为关键字,确定其链接表,不断匹配。神经网络分词法具有自学习、自组织功能,可以进行并行、非线性处理,并且反应迅速、对外界变换敏感;但是目前的基于神经网络的分词算法存在着网络模型表达复杂,学习算法收敛速度较慢,训练时间长,并且对已有的知识维护更新困难等不足。

5.2专家系统分词算法

专家系统分词算法从模拟人脑功能出发,构造推理网络,将分词过程看做是知识推理过程。该方法将分词所需要的语法、语意以及句法知识从系统的结构和功能上分离处理,将知识的表示、知识库的逻辑结构与维护作为首要考虑的问题。知识库按常识性知识与启发性知识分别进行组织。知识库是专家系统具有“智能”的关键行部件。

专家系统分词算法是一种统一的分词算法,不仅使整个分词处理过程简明,也使整个系统的运行效率提高。

6设立切分标志法这种方法

首先要收集那些标点符号(称为自然切分标志)以外的众多非自然切分标志,例如,只充当词首字或词尾的子,对这些非自然切分标志进行搜索,根据这些标志,把句子切分为若干较短的字段,然后在使用MM或者RMM等方法进一步切分。准确的说,这种方法并不是一种真正意义上的分词方法,只不过是自动分词的前处理而已。

 

6中文分词的难点

6.1歧义问题

最困难\最核心的问题:只用机械匹配进行分词,其精度不可能高,不能满足高标准要求.分为不同类型:交集型歧义\组合型歧义\真歧义,主要依靠上下文\语义来解决.

6.2未登录词识别


7小结

这篇文章讲的比较简单,其实就是要么太难(还不成熟),要么太简单(不够理想),但实际应用只要稍加改进就可以,日后再有收获,定来补充。如果你有任何建议或者批评和补充,请不吝留言指出,不胜感激,更多参考请移步互联网。

参考:

abstractwind http://www.cnblogs.com/lvpei/archive/2010/08/04/1792409.html

②朱巧明,李培峰等: 中文信息处理技术教程

③尹炳龙: 消除交叉歧义中文分词算法的研究与应用

 




 

1
3
分享到:
评论
2 楼 DSQiu 2012-11-01  
3.14hgh 写道
如果没记错的话,以前我看过这个网页,应该不是楼主自己写的吧。 ^_^

嗯,是我整理的,还有综合了其他方法,文末有参考索引……
1 楼 3.14hgh 2012-11-01  
如果没记错的话,以前我看过这个网页,应该不是楼主自己写的吧。 ^_^

相关推荐

    中文分词C语言程序

    基于C语言文本文件的中文分词程序,可实现基本功能,还有待完善

    几种基于词典的中文分词算法评价

    结合当前中文分词技术在中丈信息处理等领域的广泛应用,分析了中丈分词技术的重要性,对三类 基本分词算法进行了介绍并讨论了各自的特.点,提出了中文分词技术面临的难题及汁其未来的展望。

    KNN中文分词算法

    自选文档集进行KNN分词测试 C++类库实现 其中有基本词典和敏感词词典 对应不同的权值

    清华大学电子系NLP&TM课程的第一个大作业,关于中文分词的几个基本算法的应用+源代码+文档说明

    1、资源内容:清华大学电子系NLP&TM课程的第一个大作业,关于中文分词的几个基本算法的应用+源代码+文档说明 2、代码特点:内含运行结果,不会运行可私信,参数化编程、参数可方便更改、代码编程思路清晰、注释明细...

    THINKPHP 中文分词处理类

    将军今天继续分享一款中文分词类库,无需其他扩展组件支持,这个类库基本能满足日常的分词,当然更精准的分词那你还是老老实实去研究分词算法和相关扩展吧。这个类库最重要一点,就是支持中文分词。 废话不多说,...

    ANSJ中文分词器

    aAnsj中文分词 这是一个ictclas的java实现.基本上重写了所有的数据结构和算法.词典是用的开源版的ictclas所提供的.并且进行了部分的人工优化 内存中中文分词每秒钟

    简单中文分词系统 v1.0

    分词算法上并无太多创新成分,采用的是自己采集的词频词典,并辅以一定的专有名称,人名,地名, 数字年代等规则识别来达到基本分词,经小范围测试准确率在 90% ~ 95% 之间, 基本上能满足一些小型搜索引擎、关键字...

    论文研究-基于改进最大匹配算法的中文分词粗分方法.pdf

    中文粗分和歧义消解是中文分词的两大基本过程。通过引入广义词条和诱导词集,在最大匹配算法基础上提出一种中文分词的粗分方法,以最长广义词匹配为原则进行中文分词,利用诱导词集实现交叉型歧义识别。在保证快速...

    非常好用的中文分词,直接能用

    如果不使用中文分词,可以采用单个汉字索引方式。例如,雅虎,先索引'雅'字,然后再索引'虎'字。同样,对于一篇文章,先把所有的汉字都单独索引一次,并记录他们的位置。搜索过程中,也是先找'雅'字的所有文档,再找...

    基于EM算法的汉语自动分词

    汉语自动分词是中文信息处理中的基础课题。本文首先对汉语分词的基本概念与应用,以及汉语分词 的基本方法进行了概述。接着引出一种根据词的出现概率、基于极大似然原则构建的汉语自动分词的零阶马尔可 夫模型,并重点...

    基于EM算法的汉语自动分词方法

    汉语自动分词是中文信息处理中的基础课题。本文首先对汉语分词的基本概念与应用,以及汉语分词的基本方法进行了概述。接着引出一种根据词的出现概率、基于极大似然原则构建的汉语自动分词的零阶马尔可夫模型,并重点...

    中文分词引擎

     改进的中文人名(汉族)识别算法。  自动过滤无效字符,支持全半角和通配符等搜索引擎分词习惯。  支持外挂扩展词库,支持扩展敏感词过滤,支持对内存词库直接操作。  词库载入及分词速度较V1 /...

    python实现机械分词之逆向最大匹配算法代码示例

    逆向最大匹配分词是中文分词基本算法之一,因为是机械切分,所以它也有分词速度快的优点,且逆向最大匹配分词比起正向最大匹配分词更符合人们的语言习惯。逆向最大匹配分词需要在已有词典的基础上,从被处理文档的...

    用python实现前向分词最大匹配算法的示例代码

    分词是自然语言处理的一个基本工作,中文分词和英文不同,字词之间没有空格。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。中文分词技术属于自然语言...

    论文研究-一种改进的双向最大匹配分词算法 .pdf

    一种改进的双向最大匹配分词算法,池万泱,孟祥武,中文自然语言处理技术构成中,最重要,也是最基本的技术就是中文分词。本文在深入研究相关文献后,提出一种改进的双向最大匹配分

    基于python设计的汉语分词系统

    古代汉语中除了连绵词和人名地名等,词通常就是单个汉字,所以当时没有分词书写的必要。而现代汉语中双字或多字词居多,一个字不再等同于一个词。且在中文里,“词”和“词组”边界模糊。本次实验目的是对汉语自动...

    竞赛资料源码-TM课程的第一个大作业,关于中文分词的几个基本算法的应用.zip

    【目标受众】: 本项目适合IT相关专业各种计算机技术的源代码和项目资料,如计科、人工智能、通信工程、自动化和电子信息等的在校学生、老师或者企业员工下载使用。 也适合小白学习进阶,可以用作比赛项目、可以进行...

    python中文分词,使用结巴分词对python进行分词(实例讲解)

    中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词。 其基本实现原理有三点: 1.基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 2.采用了动态规划...

    Python实现基于规则的分词.zip

    本次实验为中文分词任务,基本思想是基于规则的分词,与第二节课上所讲的匹配、消歧算法相对应。实验给出train.txt dev.txt两个已经进行好切分的语料库作为训练数据,然后根据训练得到的结果对test.txt进行分词,...

    Python3爬虫中关于中文分词的详解

    中文分词,即 Chinese Word Segmentation,即将一个汉字序列进行切分,得到一个个单独的词。表面上看,分词其实就是那么回事,但分词效果好不好对信息检索、实验结果还是有很大影响的,同时分词的背后其实是涉及各种...

Global site tag (gtag.js) - Google Analytics