盘古分词 - 多元分词
作者:eaglet
盘古分词开发了多元分词算法,其与lucene.net 配合构建全文搜索,经测试准确度接近google和baidu的水平。现将一些实现方法和测试结果公布出来,供关心分词和搜索技术的朋友们参考。
中文分词按照分词粒度来分,分成 一元分词,二元分词,多元分词和精确分词等类型。一元分词就是最简单的分词,将所有的中文字符按照单字形式输出。二元分词按双字形式输出。多元分词则是将一句话中可能的单词组合按照一定规则输出,允许输出的词有重叠。精确分词则是将一句话中最准确的单词组合输出,不允许输出的词有重叠。当然这里用精确这个词来修饰只是为了与其他几种分词方法区分,不可能有完全精确的分词方法,因为我们伟大祖国的语言实在是博大精深,分词本身缺乏标准(能否制定标准也是一个问号)一些中文句子就是由人来分解也可能分出不同的结果,所以到目前为止还没有100%精确的分词方法。
由于一元和二元分词较为简单,其分词的效果也不尽理想,这里不多讨论。
现在让我们看看精确分词。下面这句话:“许仙喝了口黄酒”,精确分词由于不能包含重叠的词,一般可以分成 许仙/喝了/口/黄酒,用这种分词结果构建索引,输入黄酒,可以搜到,但输入酒就无法搜到。而作为搜索用户,往往需要既能搜到黄酒也能搜到酒,google, 百度等著名搜索引擎就可以达到这种效果。我们自己开发的搜索引擎如果无法实现这种功能,用户体验就不会很好。为了解决这个问题,我们必须对中文句子进行多元分解,即分解出合适的组合,比如上面的句子,如果分解为 许/仙/许仙/喝/了/口/黄/酒/黄酒/喝了口/ 那么无论我们输入黄酒还是酒,我们都可以搜索到这条记录。
多元分词的缺点:
多元分词和搜索引擎结合可以得到较多的匹配结果,但同时也增加了索引文件的大小。另外由于将一些单词进行了拆分,搜索结果的排序会受到影响。比如搜索黄酒,多元分词后搜索的关键字组合为 黄+酒+黄酒,很可能会将只包含黄或者酒的记录排在包含黄酒的记录前面,这不是我们希望的结果。对于搜索引擎来说这个排序是很重要的,google,百度就靠这个吃饭的,如果这样瞎排,估计用户早就把他们抛弃了。事实上,他们做的很好。
为了解决这个问题,盘古分词提出了两个概念,一个是多元分词的冗余度(Redundancy),一个是多元分词结果的权重级别(Rank)。
首先先谈谈冗余度,对于一句话,可能会有很多种分词组合,我们通过冗余度的设置可以控制这个组合的数量。 盘古分词支持3级冗余。当冗余度设置为0时,只分解最佳的分词组合,设置为1时次之,2时再次之。
比如 “中华人民共和国” ,冗余度取0,1,2 时 分词结果分别为
中华人民共和国(0,5)/
中华(0,3)/人民共和国(2,3)/中华人民(0,3)/共和国(4,3)/中华人民共和国(0,5)/
中(0,2)/华(1,2)/人民共和国(2,2)/中华(0,2)/人民(2,2)/共和国(4,2)/中华人民(0,2)/共和(4,2)/国(6,2)/中华人民共和国(0,5)/
其中挎号中第一个数字表示单词在整个文章中的位置,第二个数字表示权重级别。下同。
盘古分词不同分词方法的索引大小和分词时间比较
我们再谈谈权重。盘古分词将多元分词出来的单词根据其词长,词的间隔以及未登录词的取舍等条件给定了不同的权重。最高权重为5,最低为0。由于Lucene.net 不支持根据权重建立索引(毕竟其不是为中文设计的),我们只能在搜索时对分解出来的关键字指定权重来影响搜索结果。
比如黄酒这个词,搜索关键词分解为 黄酒/黄/酒 如果我们对黄酒指定较高的权重,对黄和酒指定较低的权重,那么包含黄酒的记录将会优先于只包含黄或者酒的记录被搜索到,这样就基本解决了搜索排序的问题。
下面来看看搜索 “长春市长春药店” 这个句子采用盘古分词 + Lucene.net 2.0 的搜索结果和采用 google 和百度的搜索结果的比较。冗余度取1,搜索范围限定在 博客园 网站内。
Google 的搜索结果 59 条符合条件的记录 搜索关键字:长春市长春药店 site:cnblogs.com
百度 的搜索结果 4 条符合条件的记录 搜索关键字:site:(cnblogs.com) 长春市长春药店
常用分词算法的比较与设想 - Alic的文件夹 - 博客园
长春市长春节致辞 2) 长春市长春药店 我们假使词库中包含如下词语“长春”,“长春市”,“市长”,“春节”,“致辞...我们对“长春市长春药店”进行两种方法的分词,但是因为逆向最大匹配法得到的“春药店”的词频相比于其他词语的词频要...
www.cnblogs.com/alic/articles/1215001.html 33K 2008-9-4 - 百度快照
KTDictSeg 一个C#.net做的简单快速准确的开源中文分词组件 - eagl.. 以“长春市长春节致词”和“长春市长春药店”这个两个句子为例: “长春市长春节致词”可以依次拆分为 长春、长春市...“长春市长春药店”可以依次拆分为长春、长春市、市长、长春、春药、春药店、药店 这几个词,按照正向最大匹配算法,... www.cnblogs.com/eaglet/archive/2007/05/24 ... 125K 2008-9-15 - 百度快照 |
中文分词组件 KTDictSeg 1.2 版本发布及算法简介 - eaglet - 博客.. 长春市长春节致词 长春市长春药店 IBM的技术和服务都不错 张三在一月份工作会议上说的确实在理 于北京时间5月10日举行运动会 我的和服务必在明天做好 KTDictSeg 0 9 9 1 简介10 2 : 12 1 13 1 KTDictSeg 14 9 23 1 是24 1... www.cnblogs.com/eaglet/articles/768856.html 119K 2008-9-2 - 百度快照 |
KTDictSeg 1.4 版本 + Lucene.net 2.0 的搜索结果 376 条符合条件的记录
常用分词算法的比较与设想- Alic的文件夹- 博客园 ,语义错误) 长春市/长春/药店(分成3个词,都匹配到,语义正确) 用逆向最大匹配法得到的结果是: 长春/市长/春节/致辞(分成4个词,都匹配到,语义正确) 长春/市长/春药店(分成3个词,都 http://www.cnblogs.com/alic/archive/2008/06/06/1215001.html |
|
KTDictSeg 一个C#.net做的简单快速准确的开源中文分词组件- eaglet ... 词结果是长春市/长/春节/致词,按照反向最大匹配算法,分词结果是长春/市长/春节/致词。 “长春市长春药店”可以依次拆分为长春、长春市、市长、长春、春药、春药店、药店 这几个 http://www.cnblogs.com/eaglet/archive/2007/05/24/758833.html |
|
我的评论- 旋风- 博客园 sp; 第一步:把,”杭州市长“ ”杭州市“ “春药店” 添加到词库中 后效果为:杭州市长/杭州市/杭州/杭/州/市长/市/长/春药店/春药/春/药店/药/店 采用的是模糊分词分保证每个词语 http://www.cnblogs.com/xuanfeng/MyComments.html |
|
博客园- Clark Zheng发表的评论 分词的实现 连着三个if+goto,为什么不用switch呢?ps:"杭州市长春药店"你分完词后会是什么呢?:) Clark Zheng 发表于 2007-4 http://www.cnblogs.com/CommentsByAuthor.aspx?author=Clark+Zheng&page=31 |
|
搜索引擎中中文词组分词的实现- 旋风- 博客园 第一步:把,”杭州市长“ ”杭州市“ “春药店” 添加到词库中 后效果为:杭州市长/杭州市/杭州/杭/州/市长/市/长/春药店/春药/春/药店/药/店 采用的是模糊分词分保证每个词语 http://www.cnblogs.com/xuanfeng/archive/2007/04/15/714312.html |
|
中文分词组件KTDictSeg 1.2 版本发布及算法简介- eaglet - 博客园 9 1 长春 155 2 市长 157 2 春节 159 2 致词 161 2 -1 1 9 1 长春市 155 3 长春 158 2 药店 170 http://www.cnblogs.com/eaglet/archive/2007/06/02/768856.html |
|
最新评论- 草屋主人的blog - 博客园 菌哥 长春市市长 re: 汉语转拼音(带音调和多音字识别) jason_lb 2007-11-21 16:26 “长春市长”试了 http://www.cnblogs.com/sunli/RecentComments.html |
|
汉语转拼音(带音调和多音字识别) - 草屋主人的blog - 博客园 “长春市长”试了下,确实不对这个跟分词有关吧?由结果看,是分成了“长春市”“长”了如果是“长春市长大”和“长春市长治久安”,分的就对的看来分词还要做上下文分 http://www.cnblogs.com/sunli/archive/2007/11/21/967294.html |
|
前门新大街8月7日正式开街亮相- 岁月无声- 博客园 店都还空着没开张,就一些老字号开张了,包括”大北照相馆、庆林春茶庄、亿兆百货、都一处烧麦馆、一条龙羊肉馆、长春堂药店、中国书店、南区邮局、月盛斋酱牛羊肉馆、张一元茶庄分社、尚珍阁工艺品店 http://www.cnblogs.com/joe235/archive/2008/08/29/1263334.html |
|
博客园- 560889223发表的评论 re: 我完成的C#关于在lucene下的中文切词 长春市|长春节 长春市长|春节 560889223 发表于 2007-9-26 19:57 http://www.cnblogs.com/CommentsByAuthor.aspx?author=560889223&page=2 |
从搜索结果来看KTDictSeg 1.4 + Lucene.net 2.0 的搜索效果已经非常接近google的搜索效果,前10个记录的选择两者基本上差不多,排序上略有区别。Baidu搜索出来的数据很少,可能其更追求搜索的精度吧,毕竟也是国内搜索界的老大,这里不想做过多评论,好不好按百度自己的话说还是拿事实说话吧。
关于KTDictSeg 的多元分词技术,本文就介绍到这里。 KTDictSeg 1.4 版本还有最后的扫尾工作,不日即将发布。