eaglet

本博专注于基于微软技术的搜索相关技术
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

盘古分词 - 多元分词

Posted on 2008-10-02 16:34  eaglet  阅读(25126)  评论(35编辑  收藏  举报

盘古分词 - 多元分词

 作者: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. KTDictSeg 一个C#.net做的简单快速准确的开源中文分词组件- eaglet ...

     - [ Translate this page ]
    长春市长春药店”可以依次拆分为长春、长春市、市长、长春、春药、春药店、药店这几个词, ...长春市长春药店”按正向最大匹配扫描顺序可以出现如下匹配的单词组合: ...
    www.cnblogs.com/eaglet/archive/2007/05/24/758833.html - 144k - Cached - Similar pages
  3. KTDictSeg 一个C#.net做的简单快速准确的开源中文分词组件- eaglet ...

     - [ Translate this page ]
    以“长春市长春节致词”和“长春市长春药店”这个两个句子为例:. “长春市长春节致词”可以依次拆 ...长春市长春药店”按正向最大匹配扫描顺序可以出现如下匹配的单词组合: ...
    www.cnblogs.com/eaglet/archive/2007/06/02/758833.html - 145k - Cached - Similar pages
  4. 汉语转拼音(带音调和多音字识别) - 草屋主人的blog - 博客园

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

     - [ Translate this page ]
    长春市长”试了下,确实不对这个跟分词有关吧? 由结果看,是分成了“长春市”“长”了如果是“长春市长大”和“长春市长治久安”,分的就对的看来分词还要做上下文分析^_^ ...
    www.cnblogs.com/sunli/RecentComments.html - 44k - Cached - Similar pages
  6. 中文分词组件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
  7. 搜索引擎中中文词组分词的实现- 旋风- 博客园

     - [ 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
  8. 博客园- 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
  9. 博客园- xuanfeng发表的评论

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

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