首页 > 编程知识 正文

中文分词解析软件,中文分词字典

时间:2023-05-03 14:56:42 阅读:273715 作者:2659


1背景 什么是分词

分词是将连续的字序列按照一定的规范重新组合成词序列的过程,即将一个汉字序列切分成一个一个单独的词。

分词主要包含基本分词和短语分词。基本分词就是将字序列变成词序列;短语分词则是更大粒度语义片段,由多个基本词构成,表示常见的共现搭配词和语义相对更加明确的实体。

为什么分词

对中文而言,词是承载语义的最小单元,由词构成语句,再由语句构成篇章。因此,NLP(自然语言处理)大体包含自下而上的三层:词法层、句法层、语义层。与英文为代表的拉丁语系语言相比,中文文本是由连续的字序列组成的,词与词之间缺少天然的分隔符,因而NLP在词法层比西方语言多一步工序,即识别词边界,也就是分词。

分词是整个NLP相关的其它算法与应用的基础模块,包括但不限于我们熟悉的搜索引擎、机器翻译、语义理解。下面以搜索为例,具体的说明其必要性与重要性。

1、分词可以帮助计算机去索引文章,从而便于信息检索。该部分主要用到了分词的一个方面:降低搜索引擎的性能消耗。我们常用的汉字有5000多个,常用词是几十万个。在倒排索引中,如果用每个字做索引的话,那么会造成每个字对应的倒排拉链非常长。所以,我们一般会用词来代替单个汉字建立索引

2、分词更重要的一个功能是帮助计算机理解文字,在这个层次上,分词是不分语言的,任何一个语言,涉及到计算机去“理解”的时候,首先要做的,就是先去切分并在一定程度上消除歧义。这是因为,我们知道计算机本身擅长做的工作就是匹配计算。假设我们可以把每个字词都指向一个语义,当输入一个句子的时候,每个字对应语义的累加要弱于词组语义的累加(因为单独用字语义累加的时候,有个潜在的假设是字和字之间是独立的),现在引入切分目的就是勾勒出字与字之间的关系,从而让计算机更好的理解。

分词面临的挑战 新词发现

所谓新词,是指那些在分词词典中没有收录,但又确实能称为词的那些词。最典型一类的是人名词,句子“王晓明去广州了”中,“王晓明”是个词,因为是一个人的名字,但要是让计算机去识别就困难了。如果把“王晓明”作为一个基本词条收录到字典中去,全世界有那么多的名字,而且每时每刻都有新增的人名,完整收录全部的人名本身就是个巨大且不现实的工程。除了人名,类似的还有机构名、地名等;另一类新词是随着社会的发展,人们不断创造出的一些新词来表达不安的海燕事物或者新的概念,尤其是如今的互联网时代,网友的创造、传播、学习能力是无穷的,这类新词就更多的涌现出来,比如“神马”、“浮云”、“登月”、“同城”等。

新词是分词算法在召回层面上的最主要难题,也是评价分词系统好坏的一个重要标志。如果一个算法无法识别新词而导致其被切散,会影响计算机对该切分句子的理解。比如新词“同城”被切散,就会导致很多噪音被召回,进而影响后面的相关处理;人名“谭咏麟”没有被识别,就会导致上层的句法、语义分析出现问题。热情的期待等在2007年中文信息学报上的《中文分词十年回顾》一文指出:新词带来的分词问题是歧义的10倍左右,所以它是分词面临的最大挑战。

歧义消解

分词算法要求解决切分片段歧义性,切分结果合理。汉字作为表示中文信息的载体,假设每个字/词表示的信息有个上限,假设每种语言总体的信息量接近,由于常用字数有限,这些汉字之间就要有较多的组合形式来成词并表达不同的语义。如果一个汉字可以同时作为两个词的组成部分,当这两个词按序出现时,就潜在包含了歧义。

目前歧义主要分为2种:交叉型歧义,即相邻歧义片段之间有若干字重复,比如“长春市长春药店”,“长春市”与“市长”“长春”与“春药”都是交叉型歧义片段;还有一种歧义为组合型歧义,即连续的字序列在不同语义下需要拆分开或合并在一起,比如“他们开始对打”和“对打一成语”,对后者来讲,切分为“对打”明显是错误的。

上述两类歧义的解决策略基本一致,但对于组合型歧义,其发现难度要远高于交叉型歧义。交叉型歧义根据相邻片段是否有字的重复即可判断,但组合型歧义需要预先挖掘分析词本身的特点,且即使进行了挖掘也很难覆盖全面。如果直接将所有词都认为有组合歧义,理论可以解决组合歧义的发现问题,但会较大的牺牲切分效率,同时,也未必会将有组合歧义的词切开。

其它问题

分词算法在应用中还要具备不错的性能。在引入统计学习算法时,还要考虑人力在标注语料上面的成本。随着时间的发展,语言也会进行相应的变化,只是在不同的领域会按照不同的速度演变。因此,分词算法同样需要与时俱进的优化。比如添加更多的词进入词典,更新重建语言模型, 对于某些基于判别式切分的方法,比如CRF,需要不定期更新人工标注语料来使得切分算法适应处理当前语料等等。

业界主流分词方法

中文分词的研究从上世纪80年代开始,在过去的20多年时间里,中文分词一直在发展进步,整个过程大体可以分为三个阶段,如图所示。

 

1. 从80年代到90年代中期,以基于人工规则和词典的方法为主,典型的是正向最大匹配、逆向最大匹配、最少词数切分

以正向最大匹配为例,其基本思想是:对于待处理文本,从左到右尽量匹配词典中的最长词,匹配到的词即该处理文本的一个切分片段。假设词典中有{腾讯,腾讯公司,中文,分词,算法}五个词,则句子“腾讯公司的中文分词算法”的正确切分结果为“腾讯公司|的|中文|分词|算法”。

基于规则匹配的切分算法,缺点主要有2点:一是无法很好的解决切分歧义问题。上述提到的三种方法都是从不同的角度尝试去解决歧义问题,但是它们对于歧义消除的效果不显著,特别当词典词增多的时候,词与词之间交叉现象加剧,该方法的歧义处理能力就会相应的减弱;二是该方法无法识别新词。在该方法下,线下挖掘大量的新词加入词典的收益和整体效果并非线性关系,词典膨胀的同时,切分的歧义现象会更加严重。

2. 从90年代中期到2003年,以基于语料库的统计学习方法为主,典型的是全切分+语言模型最优路径

以全切分最优路径为例,其基本思想是,将待分词句子中所有可能的词穷举,同时将这些词以词网格的方法构建成一个有向无环图,比如“北京奥运会”的全切分如图4-2所示。构成全切分图以后,在此有向无环图中找到一条最短路径,这里所说的最短路径指的是利用N(一般N = 2)元语言模型计算后,概率最大的路径,即寻找p(wiwjwk…wm) = p(wi)p(wj|wi)p(wk|wj)…p(wm|wx)最大,其中wiwjwk…wm等于待切分句子。

基于全切分最优路径的切分算法也是依赖词典,同时还要依赖标注预料用于进行语言模型的训练。与基于规则的方法相比,它也无法完成新词识别问题,但其解决歧义的能力要胜出很多,在增加离线挖掘新词的时候,适应能力更好。

 

3. 从2003年至今,分词发生了由基于词的方法向基于字的方法的转变,2003年以后的相关方法都是集中在训练分类器,对字在词中的位置进行分类标注,典型的是基于CRF的无词典分词

以CRF分词为例,它把分词的过程看作一个序列标注的过程,即对一个观察序列中的字进行标注,比如标记为4种状态:词首(Begin),词中间部分(Middle),词尾(End)和单独存在(Single)。对于一个输入序列T=t1t2…tn,其标注序列为S=s1s2…sn在输入序列下的条件概率如图3-3所示。其中Z为归一化函数,f为特征函数,前面是特征权重。CRF分词的目标是找到一个标注序列,使得图2-3中式子达到最大值,具体可以阅读这篇文章《Chinese Segmentation and New Word Detection using Conditional Random Fields》。

CRF分词在学术界、工业界都取得了很可观的成绩,尤其它是基于汉字构词法进行的,可以有效的识别具有结构特征的新词,而不在乎这个新词是否曾经出现过,比如人名、机构名。但CRF分词的效率、一致性具有一定问题,抛开效率不谈,一致性问题是指一个待切分片段随着上下文的轻微变化可能会带来切分结果完全不同,这在搜索业务中是不可取的,所以当前主流的方法是用其来进行人名识别和解决歧义片段,并辅助词典来保持分词一致稳定。

图3-3 CRF最优函数形式

 

腾讯云搜分词

2007年,公司就已经有了自己的分词系统。后面又通过多个版本的迭代进行了改进完善,分词配套开发了运营管理系统。分词考虑全面、功能丰富,在与相关产品的对比评测中取得了很好的成绩。

腾讯云搜分词体验网址:http://yunsou.qq.com/search_experience.cgi

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。