层次型倒排索引
基于前面非精确top K检索中的胜者表的思路,实际搜索系统可以建立多层索引结构。
基本思路:建立多层索引,每层对应索引词项的重要性
查询处理过程中,从最高层索引开始。如果最高层索引已经返回至少k (比如, k = 100)个结果,那么停止处理并将结果返回给用户。如果结果 < k 篇文档,那么从下一层继续处理,直至索引用完或者返回至少k 个结果为止。
例子:两层的系统
第1层: 所有标题的索引
第2层: 文档剩余部分的索引
标题中包含查询词的页面相对于正文包含查询词的页面而言,排名更应该靠前
注:很多人认为,Google (2000/01)搜索质量显著高于其他竞争者的一个主要原因是使用了多层次索引。(当然还有PageRank、锚文本以及邻近限制条件的使用)。
查询词项的邻近性限制
对于检索中的查询,特别是Web上的自由文本查询来说,用户往往希望返回的文档中与大部分或者全部查询词项之间的距离比较近,因为这表明返回文档中具有聚焦用户查询意图的文本。
考虑一个由两个或者多个查询词项构成的查询t1, t2, . . . , tk。令文档d中包含所有查询词项的最小窗口大小为ω,其取值为窗口内词的个数。例如,假设某篇文档仅仅包含一个句子The quality of mercy is not strained,那么查询strained mercy 在此文档中的最小窗口大小是4。直观上讲,ω的值越小,文档d和查询匹配程度更高。如果文档中不包含所有的查询词项,那么此时可以将ω设成一个非常大的数字。在计算时,还可以考虑各种可能的策略变化,比如在以单词个数来计算窗口宽度ω时,可以不考虑停用词的数目。
这种基于邻近性(proximity)加权的评分函数已经和纯余弦相似度计算方法有所不同,而更接近于目前包括Google在内的很多搜索引擎所提供并明显在使用的“软合取”(soft conjunctive)语义。
注:所谓“ 软合取” 指的是在对一个包含多个词项的查询进行检索时,检索中的文档中只要出现大部分查询词项即可,并不要求出现全部查询词项。
查询分析器
给定rising interest rates 之类的查询,如何处理?更一般地,给定我们前面介绍过的各种能够影响文档得分的因素,如何对这些因素进行组合?
上述问题的答案当然依赖于用户数量、查询分布及文档集本身。通常情况下,会有一个查询分析器(query parser)将用户输入的关键词转换成带操作符的查询,该查询能够基于底层的索引结构进行处理。有时,这种处理过程可能需要基于底层索引结果对多个查询进行处理,比如,查询分析器可能会产生如下的一系列查询。
1. 将用户输入的查询字符串看成一个短语查询。利用向量空间模型求解,此时输入查询向量是以rising interest rates 为基的1 维向量。
2. 如果包含短语rising interest rates 的文档数目少于10 篇,那么会将原始查询看成rising interest 和interest rates 两个查询短语,同样通过向量空间方法来计算。
3. 如果结果仍然少于10 个,那么重新利用向量空间模型求解,这时候认为3 个查询词项之间是互相独立的。
上面的每一步在调用的情况下都会产生一系列带得分的文档列表结果,而每个得分必须融合向量空间计算、静态得分、邻近度加权或其他可能的因素,特别地,一篇文档可能在上述的多个步骤结果列表中同时出现。这时就要求有一个综合得分函数能够融合不同来源的得分。
综上一个完整的搜索系统示意图