前记:本人是一个初学者,新手其实都算不上。没做过信息检索,所以别人怎么做的也不知道。很想知道Google,百度这样的大公司怎么做搜索引擎的,但是没机会也不会知道。凭着自己的理解就写了这么几篇随笔,这样能督促自己思考,也希望得到大神们的指点。这个系列叫做“新手学信息检索”。这个系列说白了,就是把自己看过的东西总结了一下,加入了自己对信息检索一些概念的理解,没什么理论,也不注重于实现,更没有创新。但是当时让我费劲心思才能想明白的东西我会按照自己的意思把它讲出来。不知道自己将会写多少篇,可能总结完一些就会写一些,自己水平有限,概念如果理解有误的话,还请大家拍砖不要拍太狠,在此先谢过了。
我想,大家对信息检索都不陌生,我们学习生活中使用的搜索引擎就是其一个具体实现。那么我们为什么需要信息检索呢?很明显,我们需要得到一些信息,但是这些信息却不是很容易找到的,它埋藏在数以亿计的网页、文档之中,凭我们自己手工一个一个去找是根本找不到的,所以这种技术才显的尤为重要。
现在的检索技术大都都依靠词频-逆文档频之类的东西进行检索。说白了,用户输入一个查询语句,搜索引擎只是根据一篇文档中包不包含查询词,包含多少个之类的信息来判断一篇文档是不是用户想要的。这也是现在的技术能达到最好效果的检索方法,为什么呢?
个人认为,如果一个检索系统要达到完美的检索效果,那么无疑语义检索是最好的方式。比如用户查询“星期日的温度是多少?”,那么检索系统必须返回包含“星期日的温度是XX度”的文档,而不是包含“星期日的温度是多少?”的文档。但是语义检索对现在的技术而言还是一件不可能的事情,这涉及到复杂的人工智能领域的问题,只有人工智能领域有突破,那么才能有实质意义的语义检索。另外一点是即使用现在在语义分析方面的技术也无法另用户满意,这包括高昂的算法运行时间开销。系统是在数以亿计的文档中检索,如果利用语义检索,用户查询可能得等个十天半个月搜索引擎才能有反应,我想任何用户都不想使用这样的系统。
很多人都认为根据文档包含查询词的信息来进行检索效果是有缺陷的,事实也就是如此。但是又有什么方法能够十全十美呢。包含查询词的文档并不一定是用户想要的,这确实是一个问题。例如一个用户输入查询词“苹果”,那么检索系统返回的是水果,但是其实用户想要的是苹果手机。出现这种问题的原因之一是由于词的歧义性,这是一个固有问题,需要上下文信息来确定一个词的意思;二是在于用户无法精确描述自己的需求。如果用户输入“苹果手机”,那么检索系统就会返回给用户正确的文档了。所以对于现在的信息检索来说,用户的描述也是至关重要的。现在也有相关的技术来对用户的查询做处理,比如查询扩展,相关性反馈之类的技术。这种技术的主要目的就是给搜索引擎提供更多的信息,使得其犯错误的几率降低。
现在的检索方式是建立在各个词的出现是相互独立的假设上,这就意味着这种检索方式其实忽略了一些重要信息,比如说词的先后位置信息。随着对这种方法的发展与改进,出现了各种检索模型,其中包括矢量空间模型,概率模型,推理网络模型等等。现代的搜索引擎的效果也是让人们十分满意的,即使不使用语义检索。这貌似和我们的直觉是相违背的,但是实际效果确实让我们无话可说。