一、打分排序的特性
其实对于打分排序来说,我们最终只需要确定文档的相对顺序即可,因此我们可以简化打分的算法,只需要保持相对顺序不变即可;
二、快速排序及打分方法
我们前面的打分排序方法都需要计算查询及每篇文档的余弦相似度,然后需要取出打分最高的前K篇文档,这样做的复杂度是很高的;其实如果有一个算法能够近似求出前K篇文档但是复杂度少很多(不需要计算所有文档的得分),则我们通常会采用后一种算法;
通用方法:预先找到文档子集A(远小于初始文档集),包含了大多数的候选文档,并在A中计算得分最高的前K篇文档;以下方法都是基于这个规则计算的;
1.索引去除技术
(1)只考虑term的idf超过阈值的posting;因为低idf的term通常是stop words,posting非常长,所以不计算这些将使复杂度大大降低,因此不必考虑;
这里会出现超过阈值的doc没超过K篇,则需要使用层次型索引解决;
层次型索引:将倒排记录表进行分层,比如tf超过20的在第一层,tf超过10的在第二层,当需要查找前K篇文档时,只需要先在第一层查找,如果没取够K篇,则到第二层查找;
因此层次型索引是解决可能返回文档少于K篇的方法;
(2)只考虑包含多个查询词项的文档;
2.胜利表法
胜利表(champion list):对于词项t,预先取出posting的tf值最高的r篇文档,此序列称为胜利表;
给定一个查询Q,我们只需要求Q中的每个词项的胜利表的并集,此并集就是通用方法所说的文档子集A,并在A中计算余弦相似度;
3.静态得分排序法Static quality Score
每篇文档都有一个与查询无关的静态得分g(d),倒排索引中的posting按照g(d)进行降序排列;
而最后的得分是Score(q,d)=g(d)+v(q)v(d);
在第二十一章所说的PageRank是一个静态质量得分,是一个基于网页链接分析的打分;
4.分层搜索排序
对于词项t,维持两个表:高端表(tf值最高的m篇文档)和低端表(其余文档),都以g(d)排序;
取出打分最高的K篇文档方法:先计算高端表的得分,如果已经在高端表已经能够取出K篇得分最高的文档,则结束;否则,其余的在低端表中取;
5.cluster pruning
leader:在N篇文档中找到(根号N)篇文档作为leader;
follower:每个leader都有(根号N)个follower,表示与leader距离较近;
查询方法:给定查询Q,先与每个leader计算余弦相似度,找到最近的leader,文档子集A为此leader+leader对应的follower;
三、其他考虑因素
1.查询词项邻近性
我们希望查询词在文档中都靠的很近,这样才能够使得文档和查询更相关;
最小窗口大小:the quality of mercy is not stained ,如果查询为:stained quality;则最小窗口大小为6(quality of mercy is not strained);
软合取:文档不必包含全部的查询词项,只需要包含大部分的查询词项即可;
因此有可能需要将邻近性也加入权重中;
四、搜索引擎组成
indexer用于生成各式各样的索引,比如参数化索引、域索引、K-gram索引、分层索引;
向量空间模型和布尔检索模型有所不同,布尔模型只考虑词项在文档中是否存在,而不考虑出现了几次,也没有权重;