简与美(2)

脑中的数学是抽象的,手中的数学是简单的。
 
接着谈中文分词。
 
我们已经讨论了词典的一种快速查询结构:双数组trie树。这种结构只需要通过简单的几次数学计算就可以完成查询,不需要做任何的拷贝和字符串比较。这种结构比较适合于词典不用经常变化的情况,因为这种结构的更新是非常麻烦的,他需要对全局结构进行调整,并且随着词典词数量的增加,调整的时间会越来越长。但是一般的词典都不需要经常更新。
 
对于那种需要经常更新的词典,比如现在的网络搜索,经常需要加入新词、热门词到词典中。这个时候,可以采用另外一种数据结构,叫做patricia tree的树结构,这种结构引入了位运算避免进行字符串比较,并且他是一颗完全树,插入删除和查询的复杂度都为O(log(n)),如果对首字索引进行hash散列,降低树的深度,这种算法的时间是可以接受的。
 
patricia树暂且按下不表,因为我后面的系统会倚重于这种数据结构,留待以后讨论,可以有更深的体会。
 
我们从头来谈谈中文分词,虽然中文分词已经有十几年的发展,也有不少成熟的技术,但是设计一个具有一定工业强度的分词系统仍然不是那么容易,因为这其中涉及的技术点是蛮多的,有些点还比较抽象。
 
中文分词可以大致分为三个阶段,第一阶段是对字串进行粗分,这个阶段根据不同的方法可能会产生较多粗分结果,形成一个粗分结果集,最后从这个集合中选择一个相对最好的结果;第二个阶段进行排歧、未登录词识别(人名、地名等);最后一个阶段是进行词性标注。
 
这三个阶段不一定按照明显的先后次序,也可能是交叉和反复融合的。为了讨论方便,我按照这三个阶段来分别论述。
 
未登录词识别和词性标注需要借助一种统计模型--隐马尔科夫模型,需要较大的篇幅,后续会分几次进行论述。
 
下面介绍一种基于统计模型的字串粗分方案。这种方案比较其他方案有比较明显的优势--准确率高。
 
字串粗分的目标是:快速(粗分结果集尽量小)、高召回率(尽可能的涵盖正确的结果,一般要求保留较多结果集)。这两个目标是矛盾的,这就需要平衡。实际情况也确实是这样,汉语的组词种类相当多,一个字串完全可能有多种切分结果,最好的选择切分方法是根据上下文判断,但是机器是不理解上下文的,那么我们就必须使用机器可以理解的方法去选择一些最可能的粗分结果,把这些结果交给后续阶段来进一步处理。
 
能够让机器理解的方法一般有两种。
一种是基于规则,即按照一些制定的判断规则来选择结果,比如最大匹配切分方法和最短路径方法,最大匹配依赖的规则是遇到组合词匹配最长的词,这就使得结果只有一个,但是召回率很低,如果这个结果是错的,后面阶段处理是找不回正确结果的,最短路径方法依赖的规则是使切分出来的词数最少,这符合汉语自身的规律,但是对于有多条最短路径的情况,只能选择一条,并且这种选择是不合理的。
另一种是基于统计,根据一些词频之类的统计数据,寻找概率最大的切分方案。这要借助于大量已标记的切分语料库的支持,用语料库训练统计模型。
还有一种方法叫做全切分,通过查询词典,把字串中所有可能的词语找出来,并列出所有可能的切分结果,将优选排错的任务完全交给后面的阶段,避免粗分阶段出错。但是大部分的结果对于切分是没有意义的,而且随着字串长度增加,切分结果数量呈指数级上升。这种方法实用性不强。
 
而我们这里要讨论的是一种融合了最短路径和全切分并且是基于统计模型的方法--N-最短路径方法。他的思路是尽量减少切分出来的次数,这和最短路径是一致的,同时要尽可能的包含最终结果,这和全切分是一致的。
 
N-最短路径方法的基本思想我先描述一下,时间比较晚了,下一篇再继续详细论述吧。
N-最短路径的基本思想是:根据词典,找出字串中所有可能的词,构造一个词语切分有向无环图,每个词对应图中的一条有向边,并赋给相应的边长(权值)。然后针对这个切分图,在起点到终点的所有路径中,求出长度值按照升序排序的第1、第2、...、第N的路径集合作为相应的粗分结果集,如果两条或两条以上的路径长度相等,那就长度并列第i,都要列入粗分结果集,最后的结果集>=N。
 
待续...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值