精确Top-K检索及其加速方法探讨

前言

目标:从文档集的所有文档中找出K个离查询最近的文档

(一般)步骤:对每个文档评分(余弦相似度),按照评分高低排序,选出前K个文档


但是对于搜索引擎来说,文档集很大,所以计算量会很大,效率就很低


如何加速:

思路一:加速每个余弦相似度的计算

思路二:不对所有的文档的评分结果排序而直接选出Top-K

思路三:能否不需要计算所有N篇文档的得分


加速余弦计算

余弦相似度计算公式

精确Top-K检索及其加速方法探讨_第1张图片

其算法过程如下:

精确Top-K检索及其加速方法探讨_第2张图片


检索排序就是找查询的K近邻,一般而言,在高维空间下计算余弦相似度没有很高效的办法。但是如果查询很短的情况下,是有一定办法加速计算的,而且普通的索引能够支持这种快速计算

不考虑查询词项的权重

查询词项无权重,相当于假设每个查询词权重为1,即出现1次

于是,不需要对查询向量进行归一化,所以可以对上述余弦算法进行简化

快速余弦相似度计算:无权重查询:

精确Top-K检索及其加速方法探讨_第3张图片


堆法N中选K

对于查询时只需要返回评分最大的K个结果,所以可以不需要对结果排序,直接使用最大堆就OK

http://en.wikipedia.org/wiki/Min-max_heap


提前终止计算

目前为止的到倒排列表都是按照docID排序的,接下来先介绍与查询无关的另外一种反应结果好坏的程度的指标{静态质量}

页面d的PageRank p(d),就是度量有多少好页面指向d的一种指标,于是可以将文档按照PageRank排序,然后将PageRank和余弦相似度线性组合得到文档最后等分。


假设:

1) P --> [0, 1]

2) 检索算法按照的d1,d2, ..... ,以及计算(以文档为单位的计算, doc-at-a-time),当前处理的文档p(d) < 0.1

3)而目前找到的Top-K的得分中最小的都>1.1


由于后续文档的得分不可能超过1.1(cos(q, d) < 1),所以,我们已经得到了top-k文档了,后续不需要再计算了。


总结

对于精确top-k检索问题,仍然无法避免大量文档参与计算。一个自然而言的问题就是能够尽量减少参与计算的文档数目,即使不能完全保证正确性也在所不惜(即得到的top-k虽然接近top-k但并非真正的top-k)


参考

An Introduction to Information Retrieve, chapter 7,Christopher D.Manning, Prabhaker Raghavan, Hinrich Schütze


你可能感兴趣的:(搜索引擎,top-k检索,MaxScorer)