一种面向搜索引擎的中文切分词方法
首先说一下搜索引擎切分词的产生的原因。 在进行全文检索时,首先将要检索的内容分割成较短的文字序列。然后生成在每个文字序列中所包含字符串的对应表(索引)。当输入检索语句后,也同样进行分割,与索引进行比较。也就是说,两者即使包含有同样的文字排列,但分割方法不同的话也不能正确检索。 文字的分割方法主要有两种,分别是 词语解析索引 和 文字索引 。 词语解析索引是按照字典中最小的词语单位对文本进行分割,既按词义切分。如中科院的 ICTCLAS。 文字索引是不考虑文本中词的意义,只是按照一定的字长的单位进行切分。如 车东的二元切分法。
上面两种方法对搜索的影响已经在 不同规则的中文分词对Lucene索引的影响 一文中做了对比。 这里想纠正的一点是:我在里面提到: 从直觉观察来看,索引文件中的Term越多,搜索结果也越快,搜索的相关性也越高。<?XML:NAMESPACE PREFIX = O />
这句话漏掉了一点,就是Term的“质量”问题。比如采用二元切分方法,产生的Term一定比 单字切分 和 词义切分 要多,但是很显然不能提高搜索的相关性。我的看法是二元切分 提高了搜索关键字的命中率而降低了索引结果的相关性。
那么是不是按照词义切分就能解决上面的问题呢? 在跟车东和lhelper谈论GrassLand的开发计划的时候,(车东和lhelper是WebLucene的主要开发者),他们很有方向性的提到:完全按照词义切分不完全适合于全文搜索。
得出这样的结论似乎有悖常理。这也是本文要集中讨论的地方。
上面提到:搜索引擎在建立索引时要和用户搜索时采取相同的切分方法,才能够正确检索。而这正是 词义切分 容易出现差错的地方。原因在于当搜索引擎建立索引时,可以通过算法使文本内容中的词语和字典很好的吻合(ICTCLAS 公测招回准确率在90%左右)。而在对用户在输入的关键字进行分词的时候,一方面用户输入的文本要短,另一方面用户只使用自己认为对的关键词,(还不考虑错字、别字 :-( )这样就造成了前后两者分词的差异。
这种差异导致的结果可想而知,甚至不如文字索引 二元切分 更有效。
这时候我们怎么选择?下面引用相关组织的一点评论:
美国加州大学伯克利分校却在报告中称,使用 按词义切分法按词语单位对检索语句进行分割的方法更为有效。“作为的NTCIR资深小组提出的报告,可信度很高。我们也许可以得出以单词为单位进行分割的方法有效这一结论了”(国立信息学研究所副教授神门典子)。但在作为检索对象的数据方面,为防止检索遗漏有时还是使用 文字索引 进行分割好一些。
上面 伯克利分校 的评论可以作为本文要提出的:面向搜索引擎的中文切分方法 的理论起点。
概括起来就是:以词义切分为主要的切分方法,对于其中偏差的部分采用 文字索引切分法。 搜索引擎切分词的目的不是切分出有意义的词,而是切分出用户需要的关键词。
上面提到的只是一个总的思路,在技术上还有很多细节需要考虑。
我会按照把上面的思路,修改 的分词方法,放在 GrassLand 的中文切分模块中。 另外请大家关注 GrassLand 的进展,多多参与。 田春峰 20040108