盘古分词 - 多元分词

作者: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

 

 

       
  1.    

    常用分词算法的比较与设想- Alic的文件夹- 博客园

         - [ Translate this page ]    
    长春市/长春/药店(分成3个词,都匹配到,语义正确) ... 我们对“长春市长春药店”进行两种方法的分词,但是因为逆向最大匹配法得到的“春药店”的词频相比于其他词语的 ...
        www.cnblogs.com/alic/archive/2008/06/06/1215001.html - 26k - Cached - Similar pages
       
  2.    
  3.    

    KTDictSeg 一个C#.net做的简单快速准确的开源中文分词组件- eaglet ...

         - [ Translate this page ]    
    长春市长春药店”可以依次拆分为长春、长春市、市长、长春、春药、春药店、药店这几个词, ...长春市长春药店”按正向最大匹配扫描顺序可以出现如下匹配的单词组合: ...
        www.cnblogs.com/eaglet/archive/2007/05/24/758833.html - 144k - Cached - Similar pages
       
  4.    
  5.    

    KTDictSeg 一个C#.net做的简单快速准确的开源中文分词组件- eaglet ...

         - [ Translate this page ]    
    以“长春市长春节致词”和“长春市长春药店”这个两个句子为例:. “长春市长春节致词”可以依次拆 ...长春市长春药店”按正向最大匹配扫描顺序可以出现如下匹配的单词组合: ...
        www.cnblogs.com/eaglet/archive/2007/06/02/758833.html - 145k - Cached - Similar pages
       
  6.    
  7.    

    汉语转拼音(带音调和多音字识别) - 草屋主人的blog - 博客园

         - [ Translate this page ]    
    由结果看,是分成了“长春市”“长”了如果是“长春市长大”和“长春市长治久安”,分的就 ... 另外,一般我们都会说“长春市市长”,“北京市市长”,少一个市虽然也能理解,但总 ...
        www.cnblogs.com/sunli/archive/2007/11/21/967294.html - 78k - Cached - Similar pages
       
  8.    
  9.    

    最新评论- 草屋主人的blog - 博客园

         - [ Translate this page ]    
    长春市长”试了下,确实不对这个跟分词有关吧? 由结果看,是分成了“长春市”“长”了如果是“长春市长大”和“长春市长治久安”,分的就对的看来分词还要做上下文分析^_^ ...
        www.cnblogs.com/sunli/RecentComments.html - 44k - Cached - Similar pages
       
  10.    
  11.    

    中文分词组件KTDictSeg 1.2 版本发布及算法简介- eaglet  - 博客园

         - [ Translate this page ]    
    长春市长春节致词 长春市长春药店 IBM的技术和服务都不错 ... 市长 157 2 春节 159 2 致词 161 2 -1 1 9 1 长春市 155 3 长春 158 2 药店 170 2 ...
        www.cnblogs.com/eaglet/archive/2007/06/02/768856.html - 118k - Cached - Similar pages
       
  12.    
  13.    

    搜索引擎中中文词组分词的实现- 旋风- 博客园

         - [ Translate this page ]    
    ps:"杭州市长春药店"你分完词后会是什么呢?:). #3楼 [楼主] 回复 引用 查看. 2007-04 -16 16:12 by xuanfeng. 第一步:把,”杭州市长“ ”杭州市“ “春药店” 添加到词库中 ...
        www.cnblogs.com/xuanfeng/archive/2007/04/15/714312.html - 83k - Cached - Similar pages
       
  14.    
  15.    

    博客园- Clark Zheng发表的评论

         - [ Translate this page ]    
    ps:"杭州市长春药店"你分完词后会是什么呢?:). Clark Zheng 发表于2007-4-16 11:42. re: C#基础概念二十五问. @森林扩展或修改继承的方法、属性、索引器或事件的抽象 ...
        www.cnblogs.com/CommentsByAuthor.aspx?author=Clark+Zheng&page=31 - 27k - Cached - Similar pages
       
  16.    
  17.    

    博客园- xuanfeng发表的评论

         - [ Translate this page ]    
    不好意思,是“长春药店”而不是“春药店”! xuanfeng 发表于2007-4-16 18:39. re: 搜索引擎中中文词组分词的实现. 第一步:把,”杭州市长“ ”杭州市“ “春药店” 添加到词库 ...
        www.cnblogs.com/CommentsByAuthor.aspx?author=xuanfeng&page=2 - 27k - Cached - Similar pages
       
  18.    
  19.    

    我的评论- 旋风- 博客园

         - [ Translate this page ]    
    不好意思,是“长春药店”而不是“春药店”! re: 搜索引擎中中文词组分词的实现 xuanfeng 2007-04-16 16:12. 第一步:把,”杭州市长“ ”杭州市“ “春药店” 添加到词库中 ...
        www.cnblogs.com/xuanfeng/MyComments.html - 49k - Cached - Similar pages
       

   

       百度 的搜索结果 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   - 百度快照
       

博客园 - 剑飘红发表的评论
长春市长春节致词 长春市长春药店 IBM的技术和服务都不错 张三在一月份工作会议上说的确实在理 于北京时间5月10日举行运动会 我的和服务必在明天做好 KTDictSeg 0 9 9 1 简介10 2 : 12 1 13 1 KTDictSeg 14 9 23 1 是24 1...
www.cnblogs.com/CommentsByAuthor.aspx?aut ... 35K 2008-9-3   - 百度快照

 

 

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 版本还有最后的扫尾工作,不日即将发布。

posted @ 2013-12-03 17:23  郑文亮  阅读(1397)  评论(0编辑  收藏  举报