《这就是搜索引擎-核心技术详解》,我挺喜欢这本书的,深入浅出让读者明白一个搜索引擎的大体架构和各个部分的经典技术手段。
(1)搜索引擎的3个核心问题:
(1)分类:
(2)评价指标
针对上面所抓网页的重要性这一评价指标,书中列举的所有的抓取策略包括:宽度优先遍历策略(隐含了一些网页优先级的假设,一般粗略认为一个网页的入链越多越重要,而入链多的更容易早被宽度优先遍历到)、非完全pagerank策略、OPIC策略(Online Page Importance Computation)和大站优先策略,这些策略的目标都是有限抓取重要度高的网页。
针对时新性这一评价指标,书中介绍了3种更新策略:历史参考策略(也就是说,之前更新的很频繁的网页,也来也会更新的很频繁)、用户体验策略(保存网页的多个历史版本,算过去每次更新对搜索结果排名的影响,影响越大越先更新)、聚类抽样策略(前两种都需要历史信息。。。聚类,每一类抽样计算更新频率,此频率代表该类的更新频率,也有的直接以网站作为聚类单位;效果好,但是计算复杂度也高)。
针对覆盖率这一指标,采用暗网抓取一些不被任何链接索引到的爬虫抓取不到的网页。
(3)分布式爬虫:主从式,对等式(直接哈希健壮行不行,所以采用一致性哈希方法)
(1)Shingling,以Shingles作为文档的特征,但是存在两个问题:一个是特征集合太大,再一个是特征集合大小差别太大。—SuperShingle算法(84个不同的hash函数,每一个hash函数对所有的Shingles特征都有一个值,取最小值作为这个hash函数对当前文档的hash值,所以针对每一个文档都可以用84个值表示,接下来,把84个值分为6块,对每一块14个值再hash一次,所以现在用6个值代表一个文档,如果任意两文档有两个以上的值是相同的则认为是近似重复文档)。
(2)I-Match算法,得到所有文档的特征词典(IDF值不高也不低的文档),对要去重的文档的单词用特征词典进行过滤,在特征词典中出现过的单词即为此文档的特征,hash后得到一个值,判断两文档的值是否相等即可,计算快,但是不稳定,严重依赖特征词典。—改进:构建多个大致相同又有小差异的特征词典,hash得到多个值,只要有一个是相同的则两文档近似重复。
(3)SimHash算法:将文档转化为固定大小(一般为64bits)的二进制数值,过程如下:
将这64位的数值分成A, B, C, D 4块,分别用A,B,C,D将文档聚类,聚类标准是字幕对应的16位二进制数全部相同,若查询为(Q1,Q2,Q3,Q4),针对Q1只要找到A中16位和Q1完全相同的分组再一一比较(汉明距离大于等于3即为近似重复文档)即可,对其他的Q2,Q3,Q4做相同处理。
(4)针对新闻内容往往内容很相似但是布局差异很大这一个特点—SpotSig算法。
第二三列+倒排列表的指针 构成了单词词典,为了快速定位到某个单词,单词词典常用的数据结构是:哈希+链表结构或者是B树(B+树)结构。因为有的短语或者是单词很长,所以后面索引压缩章节中可以将单词连续存储,然后原先存单词的地方变成存指针。
倒排列表部分因为文档的id都很大,所以可以按照文档id排列,并且只存与前一个文档id 的差值,之后也可以在用一些编码或者是其他的压缩算法。
(2)建立索引的方法:两遍文档遍历法、排序法和归并法。
动态索引,索引更新策略:完全重建、再合并策略(注意的是,增量索引(即临时索引,在内存里)和老索引都按照单词词典的顺序从小到大排好序了,合并的过程中顺序读取即可,此过程中也要维护着老索引)、原地更新策略(老索引在建立时在每个单词的倒排列表末尾都预留出一部分空间)、混合策略(有些单词很长、所以倒排列表很长很长可以采用原地更新策略节省磁盘读写次数,有的单词不常见,也就是说它们的到排列列表很短可以用再合并策略)。
(3)查询处理,快速提取与用户查询相关的文档信息,输出(docid,score),两种方式:一次一单词和一次一文档。
短语查询:位置信息索引、双词索引、短语索引和混合方法(位置信息索引适合常规的短语查询,双词索引适合处理计算代价太高的短语例如我的父亲母亲等用位置索引匹配太难了,短语索引更适合热门短语和高频短语)。
(4)分布式索引:按单词划分和按文档划分(在可扩展性、容错性、负载均衡和对查询方式的支持方面后者都好于前者)。
(1)在用户需求已经明确的有查询词表征的情况下,如何找出内容相关的文档。常见的检索模型:布尔模型(布尔运算)、向量空间模型(tf*idf + cosine相似度)、概率模型(BIM,BM25)、语言模型(P(Q/D),已知文档D生成查询Q的概率)以及最近几年兴起的机器学习排序算法。
(2)搜索质量评价指标:P,R,P@10,MAP都挺常用的。
(1)搜索意图分类:
(2)用户搜索日志质中间结果:查询会话(同一用户较短时间内发出的连续多个查询)、点击图(二分图,一边查询词,一边网址)、查询图(查询词间的图,权重是两个查询词之间的语义联系)。
(3)两个应用:相关搜索(两类:基于查询会话的方法和基于点击图的方法)和查询纠错(两个阶段:错误识别(对比词典即可)+错误纠正(基于编辑距离法和噪声信道模型法))。
(1)2012年5月,谷歌首次在其搜索页面上引入“知识图谱”:用户除了得到搜索页面之外还能得到与查询词相关的更加智能的答案。现在国内百度、搜狗也都用了相关技术。
也就是说,根据用户查询的短文本上下文确定了用户要查询的实体(查询理解,理解查询词背后的语义信息,更好地理解用户查询意图)以后,显示出该实体的一些属性信息和其相关实体的一些信息,而不是像之前那样:仅仅对用户查询进行分词,按照查询词与网页之间的相关度和网页的重要度来排序了。
(2)知识图谱的数据来源
(3)CSDN也用了相关的思想,例如,CSDN中的实体链值☞技术:将文本、图像、社交媒体等数据与知识图谱(作为知识库)中的词条链接到一起,帮助用户理解该文本、图像和社交媒体数据的背景资料。