中文分词的语言模型

===============================================================================

如有需要可以转载,但转载请注明出处,并保留这一块信息,谢谢合作!

部分内容参考互联网,如有异议,请跟我联系!

作者:刀剑笑(Blog:http://blog.csdn.net/jyz3051)

Email:jyz3051 at yahoo dot com dot cn('at'请替换成'@','dot'请替换成'.' )

===============================================================================

 

关键词:中文分词,分词语言模型

 

到目前为止,中文分词包括三种方法:1)基于字符串匹配的分词;2)基于理解的分词;3)基于统计的分词。到目前为止,还无法证明哪一种方法更准确,每种方法都有自己的利弊,有强项也有致命弱点。

综合这几种方法,建立一种"复方配剂"可能是一种有效的解决方案,我采用的方案需要能够综合运用这三类方法。方案的基础就是分词模型,该模型需要能够综合这三种方法,下面我将介绍我的"基于字符的中文分词模型"。

中文分词就是将连续的汉字字符系列拆分成一系列有意义中文词语的过程。下面给出模型中的各种表示:

(1)分词的基本单元是文档,记作D;

(2)待分词的文档通过分隔符,将该文档D分拆为一系列的字符串。将文档拆分为字符串的标志包括:

① 标点符号,如句号、逗号、顿号、引号、感叹号、书名号、破折号、省略号等;

② 分隔符,如分页符、分节符、段落符等;

③ 一些特征词,如"的、和、与"等,但是这种方法常常会导致错误,故很多分词系统都不采取这种策略;

(3)待分词的字符串S有n个字符组成,这里的字符可以是汉字,也可以是英文字母、数字、下划线、连字符等各种符号,每个字符用si表示,则S={s1s2s3s4s5s6s7s8s9……sn}。如待分词字符串为:"他购买了一盒Esselte品牌的SHA-PA型号24/6的订书钉"则s1="他",s2="购"……s32="钉",n=32,表示该字符串有32个字符。

(4)原子系列,将字符串系列进行初步处理,得到S的原子系列A={a1a2a3a4……am}(m<=n),其中原子ai表示一个或多个连续字符的组合,即ai=sj…sk。每个原子被认为是在中文分词环境下,不能再分的字符组合,如一个汉字、一个英文单词、连字符连接的两个字母、英语缩写等等。如"他购买了一盒Esselte品牌的SHA-PA型号24/6的订书钉"的原子系列为:"他#购#买#了#一#盒#Esselte#品#牌#的#SHA-PA#型#号#24/6#的#订#书#钉",m=18,表示有18个原子。将字符串分隔为原子系列的规则常常为:

① 一个汉字为一个原子;

② 一个英语单词为一个原子;

③ 连字符连接的两个英文字符串为一个原子;

④ 无空格的连续英文字符串为一个原子。

以上的四个过程是借助中科院的分词系统中采用的方法,我只不过规范化了该过程而已。到此为止,一个待分词的字符串S已经变成了多个原子的组合,即S=A1A2……Am,下面就进入了一个新的过程:如何将这些原子组合成正确的词语系列W={w1w2w3……wk},(其中k<=m)。即:A1A2……Am到w1w2w3……wk转换的过程,为了保证分词的准确性,在这一过程需要综合以上三种分词算法的思想。

首先,借鉴中科院分词系统的思路,首先在原子系列前后分别加上"起始"和"结尾"标志,这里假设"起始"标志为"S##S","结尾"标志为"E##E",则得到新的原子系列为:

S##SA1A2……Am E##E

则"S##S"的位置是0A1的位置是1,依次类推,Am的位置是m,"E##E"的位置是m+1

如借用别人的例子:"李胜利说的确实在理",原子系列为:"李////////理",故加上"起始"、"结束"标记后变成"S##S////////// E##E"。

中文分词需要将这个原子系列进行一系列的合并操作,最终得到一系列的中文词语。当然,一个原子系列常常能得到多种分词结果,我们希望得到最可能的一种分词系列,即:如果假设我们最终得到的分词为W*,则可以表示为maxP(W|A),其中P(W|A)表示原子系列A得到词语系列W的可能性。上面的说明也可以通过下面的过程加以说明:

P(W|A) = P(WA)/P(A) = P(A|W)*P(W)/P(A)

因为在词语系列W的情况下,获得原子系列A的概率是1,则上式可以变换成:

P(W|A) = P(WA)/P(A) = P(W)/P(A),故:W* = max P(W)/P(A) = max P(w1w2w3……wk)/P(A)

从上面的过程可以发现,W*是所有可能分词中最有可能的一种。如果我们穷举所有的分词可能,然后计算每种分词的可能性,计算量将是非常巨大的,故常常将求W*的过程看作是一个动态规划的问题。下面我以上面的例子"S##S////////// E##E"来构建这个动态规划问题,即在从"S##S"到"E##E"的所有路径中,寻找一条路径,使该路径出现的可能性是所有路径中有最大可能性。这就包括两项任务:

找出所有可能的从"S##S"到"E##E"的路径;

找出所有路径中,有最大可能出现的路径;

对于①,至少要保证最优的那条路径存在于该路径集合中,故在这一步我们需要为该原子系列串增加尽可能多的路径才行,当然也要考虑计算量,尽量减少那些可能性小的路径。

对于②,首先我们要定义什么才叫最优路径,并建立一个动态规划方程,求解该方程,得到最终的分词系列。

如"S##S////////// E##E"得到如下的路径图:

从上图可以看出,这些路径中不存在正确的路径,即最优路径并不在这个路径集合中,故无法得到我们最后需要的路径,这里就涉及到未登录词识别的问题,这个问题将在后面的文章中讨论。

posted on 2008-11-01 20:29  刀剑笑  阅读(647)  评论(0)    收藏  举报

导航