作者:Winter 工程师
搜索引擎,上网的人基本上都不陌生了,CNNIC的第17次《互联网调查报告》显示,使用搜索引擎服务的网民,仅次于电子邮件。中文分词,估计了解的人并不多,毕竟太技术,太底层。但中文分词是中文搜索引擎系统中非常重要的模块,这里之所以强调是中文搜索引擎,是针对英文搜索引擎来讲,因为对于英文来说,空格代表词和词之间的分隔,也就不存在分词问题。和中文搜索引擎类似还有日文、韩文、泰文搜索引擎等,都需要处理分词问题。
为什么需要中文分词
目前的搜索引擎,大多是基于一种称为倒排索引的结构[1]。以什么做为索引的Key值,直接影响到整个搜索引擎的准确度、召回率[2]、速度。我们先看看不使用中文分词的情况。
如果不使用中文分词,可以采用单个汉字索引方式。例如,雅虎,先索引'雅'字,然后再索引'虎'字。同样,对于一篇文章,先把所有的汉字都单独索引一次,并记录他们的位置。搜索过程中,也是先找'雅'字的所有文档,再找'虎'字的所有文档,然后做交叉'与'运算,即包含这两个字,而且位置连续的文档才会做为符合要求的结果。这种方式是最基本的索引方式,现在有些小引擎中还在使用。但这里存在一个很有挑战性的问题:总共的常用汉字是3000多个,我们每次查询过程中,进行'与'操作的计算量会相当大,对于大数据量搜索引擎来说(超过10亿的文档),每天上亿次查询,这样的索引结构,无疑是对硬件和算法的极大挑战。
考虑到速度问题,如果不使用分词,还有另外一种选择:n元组合索引方式,2元/3元等。拿2元来说,中国人,先索引'中国', 再索引'国人'。同样,对于一篇文章,以2为单位,把所有相邻的汉字都索引起来,并记录他们的位置。搜索过程中,也是先找包含'中国'的所有文档,再找'国人'的所有文档,然后做交叉'与'运算,即包含这两个单元,而且位置连续的文档才会做为符合要求的结果。这样以两个字做为索引单元,可以大大减少在搜索过程中的计算量。
以上两种方式,都可以不需要分词,也能实现搜索引擎的索引和搜索。但是这里存在一个不可忽视的问题:准确度。一个很常见的例子:和服,如果按照上面两种方式,都会查到包含'主板 和服 务器'的文档; 北大 也会得到'东 北大 学'。对于大数据量的搜索引擎来说,每个搜索次都会有成千上万个结果,用户已经很挑选他真正想要的文章,如果这里还要增加许多错误,估计用户体验会极差。这时候,我们需要中文分词。
词,是中文语言中最小的语意单位。以词为单位做为搜索引擎的索引的Key值,会大大提高搜索引擎结果的准确性,同时保证了搜索过程中计算量小。其实还有一个优点,以词为单位的索引,索引库会比上两种方式小很多。很明显:如果以 中国人 做为一个词,那么搜索的时候,不需要任何'与'运算,索引的时候记录也会减少。关于搜索过程描述参看中文搜索引擎技术揭密:系统架构
参考
1. The Anatomy of a Large-Scale Hypertextual Web Search Engine
2. 召回率: recall. 即得到的正确结果占所有应该得到的正确结果的比例。如:包含'雅虎'的正确的网页应该有500个,但搜索得到了600个结果,其中有400个是正确的,还有200个是错误的。那么准确度是:400/600=66.67%, 召回率是:400/500=80%.
http://www.winterxy.com/是Winter你的博客吧!不过只看到了搜索技术的分类,却没看到文章.期待......直接发到搜索日志这里也不错的.
发布者:慕以 - 2006年07月21日 14:26期待后文
发布者:姜运涛 - 2006年07月20日 17:18