• JockoLi   2014/7/14 13:08:00
  • 搜索引擎框架Lucene研究之搜索引擎分词
  • 关键字: Lucene 搜索引擎 分词
  •  现在网上有很多种分词方法。要精确必然损失性能,要性能那么精确度必然下降。

    比如有句话:

    "我是中国人"

    看看这句话有多少种划分

    我是我是中我是中国我是中国人
     是中是中国是中国人
      中国中国人
       国人
        

    按照灰色区域划分,无疑是正确的。但是从全部分词划分上来说,分词的分法达到了 2^n种。

    在我见过的分发中,很多种都是大同小异。而很多种都提到了一个概念——最大词匹配。

    比如句子:“通信信息报:瑞星以技术和服务开拓网络安全市场”

    按最大划分 ,"通信信息报"是一个名词,“瑞星”是一个名词,“网络安全市场”是一个名词。那么就是索引为:

    "通信信息报 :  瑞星  以 技术 和 服务 开拓 网络安全市场"

    这样理解上确实是好的,但是实际效果却未必如此。按照这种分词索引数据,将造成,搜索“通信”是搜索不到结果的。因为划分后并没有“通信”这个词,而只有“通信信息报”。

    也许你会觉得这样就排除了 “通信”这个词对“通信信息报”这个词的干扰。但是在很多场合中,用户不可能那么精确得输入。比如,用户很可能搜索“通信报”。

    所以我认为搜索引擎中的分词技术,并不是要实现精确索引。中文分词最大的用处是排除特殊的干扰。

    比如还是这句话"通信信息报 :  瑞星  以 技术 和 服务 开拓 网络安全市场",如果从词义匹配上划分,还可能被分成"通信信息报 :  瑞星  以 技术 和服 务 开拓 网络安全市场"。注意,这句话和“和服”完全无关,但是这种分法就把它给相关上了。

    无疑这种歧义在整合海量数据的索引中将会产生非常多。消除特定词汇的歧义肯定是可以处理的,但是你无法知道整个过程中会产生多少歧义。比如百度,在这个词的消除歧义过程中,也会有失误的地方:

    编程中国社区
    备案序号:浙ICP备06009618号... 
    www.hello-code.com/ 2K 2014-07-12 - 百度快照 
    www.hello-code.com 上的更多结果

    http://www.baidu.com/link?url=Ji7JKP4lm2JSanRAY7fJqiye4uKsAEopK4DhOlMlo0-8nF6R_jxrA07ZZtdIv1Vm&ie=utf-8&f=8&tn=baidu&wd=%E7%BC%96%E7%A8%8B%E4%B8%AD%E5%9B%BD%E7%A4%BE%E5%8C%BA&inputT=674&bs=%E7%BC%96%E7%A8%8B%E4%B8%AD%E5%9B%BD

    现在我看到的最能识别歧义的方法,可能就是基于词频的统计。而不到一定的规模,没有足够的资金,肯定不会做这种事情去的。所以小的站内全文搜索引擎应该把更多的目光投到站内数据挖掘上面。不但要结果准,而且要结果多。

    我认为基于最大词匹配的最小切分可以在很大程度上提升搜索引擎的性能和搜索精确度。

    比如:“此次大会在香港特别行政区召开”

    那么最大匹配就是“此次 大会 在 香港特别行政区 召开”

    如果发现了最大匹配“香港特别行政区”,你不可能让别人搜索“香港”,而找不到这个结果。所以,有效的办法就是对最大匹配进行最小划分。划分为"香港 特别 行政 区"。

    在搜索引擎中很多地方需要这么做。

    当然,也可以用同意词的方法来解决.。但是定义同意词,无疑是一件长期而繁琐的事情。而且,对于“香港特别行政区”这样一个词,一般预期查询的词就是“香港”,划分就可以,没必要做同义词解析。

    而对于“日本人常用的口头禅”,如果有人搜索“日语口头禅”,你认为是不是要匹配呢?最好当然是做下“日语”对“日本人”的同义词。而如果有人搜索“日语口头”,那么最小划分将会起到意向不到的作用。要知道,用户凭自己想出来的关键字,经常是不可预期的。