《这就是搜索引擎》笔记——网络爬虫、搜索引擎索引、检索模型与搜索排序

网络爬虫

爬虫分为3种类型:批量型爬虫(明确的抓取范围和目标),增量型爬虫(新增网页、网页被删除、网页内容更改),垂直型爬虫(特定主题、特定行业)。

优秀爬虫特性:从开发者角度来说需要考虑,高性能(抓取速度),可扩展性(分布式运行),健壮性(网页HTML编码不规范、服务器死机、爬虫陷阱、重新启动爬虫),友好性(服务器根目录下robot.txt爬虫禁抓协议、HTML代码中<meta name="robots" content="noindex"><meta name="robots" content="nofollow">);从搜索引擎用户体验角度需要考虑,抓取网页覆盖率,抓取网页时新性,抓取网页重要性。

研发目标:尽可能重要,尽可能时新,尽可能覆盖,依次满足。

抓取策略:利用不同的方法来确定待抓取URL队列中URL优先顺序(优先选择重要网页进行抓取)。宽度遍历策略(Breath First),非完全PageRank策略(Partial PageRank),OCIP策略(Online Page Importance Computation),大站优先策略(Large Sites First)。

网页更新策略:
历史参考策略。过去频繁更新的网页将来也频繁更新;
用户体验策略。影响越大的网页,则越快更新;
聚类抽样策略。对于首次抓取到的网页而言,具有相似属性的网页,其更新周期也是类似的。

大型分布式爬虫分3个层级:分布式数据中心,分布式抓取服务器,分布式爬虫程序。它们前者跟后者是一对多的关系。

抓取服务器的架构有2种:主从式分布爬虫(主URL服务器容易成为整个系统的瓶颈),对等式分布爬虫(一致性哈希方法(Consisting Hash)来确定服务器的任务分工)。

搜索引擎索引

搜索引擎索引其实实现单词——文档矩阵的具体数据结构。实现方式有:倒排索引,签名文件,后缀树等。

倒排索引是单词到文档映射关系的最佳实现方式,是一种实现单词——文档矩阵的一种具体存储形式,主要由2个部分组成:单词词典,倒排文件。

构建单词词典:哈希加链表,树形结构(需要字典项能够按照大小排序)。

倒排列表内容:文档编号或文档编号差值(DocID/D-Gap),单词词频(TF),文档频率,出现位置(POS)。即该单词在哪些文档出现过,出现过该单词的某文档中出现过该单词多少次,文档集合中有多少个文档出现过该单词,出现过该单词的某文档中出现该单词的位置是有哪些。

建立索引的方法:
两遍文档遍历法。第一遍获得统计信息并分配内存等资源,同时建立好单词相对应倒排列表在内存中的位置信息,第二遍建立倒排列表信息。要求内存足够大,速度不占优势,故并不常见;
排序法。为每个单词建立单词ID-文档ID-单词频率三元组,词典一直在内存中,每次将三元组数据进行排序后写入磁盘,最后合并多个中间结果文件。后期中间结果可用内存越来越少;
归并法。在刚在中建立一个完整的内存索引结构,该索引结构是部分文档的,每次将单词和对应的倒排列表写入磁盘,最后合并多个中间结果文件。

使用动态索引:
当新文档进入时,加入临时索引,临时索引在内存中存储词典和倒排列表;
当有文档被删除时,加入删除队列;
当有文档被更改时,则将原先文档放入删除队列,解析更改后的文档内容,并将其加入临时索引中;
用户查询时,从倒排索引和临时索引读取倒排列表,对找到的文档集合进行合并,再用删除队列过滤,形成最终结果。

索引更新策略:
完全重建策略。当新文档达到一定数量,将新增文档和原先的老文档进行合并,然后对所有文档重新建立索引,新索引建立完成后,老的索引被遗弃释放;
再合并策略。把临时索引和老文档的倒排索引进行合并生成新倒排索引文件;
原地更新策略。老索引的倒排列表发生变化,只在其末尾进行追加操作,而不需要读取原先的倒排列表并重写到磁盘另一个位置,原地更新策略在初始建立的索引中,在每个单词的倒排列表末尾留出一定的磁盘空间;
混合策略。长倒排列表单词采取原地更新策略,而短倒排列表单词则采取再合并策略。

查询处理:
一次一文档方式。以倒排列表中包含的文档为单位,每次将其中某个文档与查询的最终相似性得分计算完毕,直到所有文档的得分计算完毕为止,根据文档得分进行排序,输出得分最高的K个文档作为搜索结果。先纵向再横向,一般采用根堆数据结构来实现保存得分最高的K个文档即可;
一次一单词方式。向横向再纵向,用哈希表存储每个文档和用户查询的最终相似性得分。

检索模型与搜索排序

尽管搜索引擎在实际结果排序时融合了上百种排序因子,但最重要的两个因素还是用户查询和网页内容相关性及网页链接情况。判断网页内容是否与用户查询相关,这依赖于搜索引擎所采用的检索模型,检索模型就是用来计算内容相关度的理论基础及核心部件。好的检索模型将文档按照(相关文档 / 不相关文档)*(包含查询词 / 不包含查询词)分为4个象限,而其要做的是提升第1、2象限文档的排名,抑制第3、4象限的排名。

最重要的几种检索模型:
布尔模型。结果输出是二元的,要么相关要么不相关,至于文档在多大程度上和用户查询相关没有表示,不能按照相关程度排序输出搜索结果;

向量空间模型。把每个文档看做是由t维特征组成的一个向量,用户查询可以被看作是一个特殊的文档,将其也转换成t维特征向量。Consine相似性是最常用也是非常有效的计算相似性的方式。该模型是一个经验型的模型,以查询和文档的内容相似性来作为相关性的代替品。其中,特征权值的计算框架一般被称做Tf*IDF框架,考虑的主要计算因子有两个:词频Tf和逆文档频率IDF,一般将两者相乘作为特征权值,即Weight(word)=Tf*IDF。Tf表示一个单词在文档中出现的次数,Tf越大越能代表文档所反映的内容,IDF表示特征单词之间的相对重要性,IDF越大则其区分不同文档差异的能力越强,也可以说IDF代表了单词带有的信息量的多少。

概率检索模型。该模型是目前效果最好的模型之一,而且okapi BM25这一经典概率模型计算公式已经在商业搜索引擎的网页排序中广泛使用,该模型直接对用户需求相关性进行建模。
其中,二元独立模型BIM(Binary Indenpenden Model)是概率模型方法BM25的基础,它使用了二元假设和单词独立性假设,最终给出了文档D和查询的相关性的定量表达。BM25模型计算公式融合了4个因素,IDF因子,文档长度,文档词频,查询词频。BM25公式中包含了3个经验调节参数,调节因子b用于调节文档长度的影响,极限情况是b=0,表示文档长度因素不起作用;调节因子k1用于调节查询词文档权重,极限情况k1=0,表示查询词在文档中的词频不起作用;调节因子k2用于调节查询权值,极限情况k2=0,表示各查询词的权值相同。
BM25F则是扩展了BM25模型,如有些应用场景下,需要将文档内容切割成不同的组成部分,然后对不同成分分别对待,具体到计算公式是体现在第2个因子的计算上。