读书笔记(1)——走进搜索引擎
1. 引言
搜索引擎由四个系统组成:
(1)下载——负责网页的下载和同步;
(2)分析——负责网页的数据抽取,进行分词和PageRank;
(3)索引——负责将网页对象索引入库;
--------------------------以上为离线部分,制作搜索引擎所需要的数据--------------------------
(4)查询——负责分析用户提出的请求,从索引库中检索出网页并将将网页排序,将结果返回给用户。
-----------------------------以上为在线部分,要求快速响应----------------------------------------
2.下载系统(爬虫)
搜索引擎由四个系统组成:
(1)下载——负责网页的下载和同步;
(2)分析——负责网页的数据抽取,进行分词和PageRank;
(3)索引——负责将网页对象索引入库;
--------------------------以上为离线部分,制作搜索引擎所需要的数据--------------------------
(4)查询——负责分析用户提出的请求,从索引库中检索出网页并将将网页排序,将结果返回给用户。
-----------------------------以上为在线部分,要求快速响应----------------------------------------
2.下载系统(爬虫)
2.1 万维网网页分析
(1)万维网的静态结构为相互联通的连通图,其上的网页为蝴蝶结型。爬虫尽量选择左部和中部。
(2)万维网的直径大约为19,而平均链接数却大约为25.7,这一数据使得当前的爬虫大都选择宽度优先的遍历方式。
2.2 网页抓取原理
爬虫一般从种子站点开始进行抓取,如新浪网首页。在抓取网页的过程中,存在死循环问题(很好理解),可通过:
(1)不重复抓取策略。每个网页都有一个唯一的编号,在抓取网页时首先对这个编号进行HASH,判断网页是否已经抓取。这个编号为网页URL的MD5值,由于MD5为128位的整数,而内存无法分配2^128的内存,因此,一般采用bitmap和bloom filter算法利用HASH表中的数据。
(2)深度策略。爬虫的抓取深度为万维网的直径。
2.3 网页抓取优先策略
即先抓取重要性高的网页,重要性度量包括链接欢迎度(由反向链接的数目和质量决定),链接重要度(关于URL的函数)和平均链接深度。
2.4 网页重访策略
网页——增加,修改及删除导致网页需要重新访问。网页的更新过程服从泊松分布,网页更新时间间隔服从指数分布,对于不同网页类型采用不同的更新策略。
2.5 Robots协议
Robots协议是Web站点和搜索引擎爬虫交互的一种方式,将robots.txt放到网站的根目录上,可以指导爬虫按照相应的要求进行网页的抓取。
2.6 合作抓取策略
为提高抓取网页的速度,必须增加同时工作的爬虫数量。
根据URL对爬虫的任务进行分配。
(1)调度员根据更新规则向URL请求一个URL抓取任务。
(2)计算出URL,然后分配给相应编号的爬虫x。
(3)爬虫x将抓取的网页存放在Page库中。
(4)爬虫x在抓取的网页中提取其他连接给调度员。
(5)调度员判断网页类型,设定初始更新时间等后存放在URL库中,继续进行(1)。
2.7 网页库
网页库的读写:
(1)伸缩性——添加和删除;
(2)双访问——随即访问(在查询系统中给出标识,即能访问网页)和顺序访问(在索引系统中顺序读取网页按序索引);
(3)大规模更新——存储漏洞等;
目前采用哈希日志,将磁盘看作一个哈希桶,每个哈希表单元对应一个日志文件,日志文件的存储采用B树。
3. 分析系统
分析系统主要完成的工作包括信息抽取,网页消重,中文分词和PageRank计算。通过以下步骤完成分析工作:
(1)网页结构化,完成原始网页到网页对象的打包。
(2)网页消重,丢弃冗余的页面。
(3)文本分词将正文分成以词汇为单位的集合。
(4)将分析的结果发往索引模块,进行索引入库。
3.1 信息抽取及网页信息结构化
(1)由于万维网上的静态网页都以HTML网页形式存在,描述的所有内容都放在标签之中。由于标签之间存在嵌套关系,整理出来的是一个树状结构——“标签树”。这个整理过程需要一个标签分析栈。
(2)通过投票方法得到正文。网页有三种类型的文本块——主题型,目录型和图片型。由于主题型文本可能包含广告,需要特定的规则进行区分。
3.2 网页查重
当用户查询时,在有限的查询结果页中出现重复的网页链接,从系统效率和检索质量来说,重复网页都是有害的。
(1)实现方法:I-Match算法(通过对词汇出现次数进行排序),Shingle算法。
(2)网页查重至少需要3个主要步骤:特征抽取,相似度计算和消重。
通过消重,可以节约PageRank的计算代价,节省索引存储空间,减少查询成本,提高查询结果的多样化效果。
3.3 中文分词(切词)
(1)通过字典实现分词——最大正向匹配法(Maximum Matching Method,MM法,将字典做成一个前缀树结构)和逆向最大匹配法(Reverse Maximum Method,RMM法,将词典做成后缀树结构)。这两种算法可以称为“贪婪算法”——认为最大匹配的词汇最优。
(2)基于统计的分词方法——N-Gram法。“早起先刷牙”,结合字典可以剪除明显不可能的切词,而将其分为:早|起|先|刷|牙,早|起先|刷|牙,早|起先|刷牙,早起|先|刷|牙,早起|先|刷牙。选择概率值最大的切分方案。
3.4 PageRank
——网页聚合后的排序问题,需要通过科学有效的方法将”好“的搜索结果按照”好“的程度依次排列。
(1)认可度越高的网页(反向链接越多)。
(2)反向链接的源网页质量越高。
(3)链接数量越少。
PageRank计算公式,根据以下公式可以建立方程组,通过矩阵计算,得到每个网页的重要度值。
4. 索引系统
必须支持多用户同时检索,提供低于秒级的检索时间。
4.1 全文检索
全文检索的本质:
(1)文档的全部文字参与索引。
(2)检索结果能够提供检索词出现的实际位置。
4.2 文档编号
方法:将URL映射为64位大小(8个字节)的MD5签名。使用一些编码方式对编号进行变长编码以节省空间。
4.3 倒排索引
全文检索的检索是通过关键词来进行检索的,
(1)正排索引:具有LocalId字段(标识一个文档的局部编号),WordId字段(文档分词后的编号,即“索引词编号”),NHits字段(表索引词在文档中出现的次数),HitList变长字段(某个索引词在文档中出现的位置)。
(2)倒排索引:分为两个表,第一个表是由不同的索引词组成的索引表,称为“词典”,保存各种中文词汇,出现频率等。第二个表由每个索引词出现过的文档集合,以及命中位置等信息构成,也称为“记录表”或“记录列表”。
4.4 数据规模的估计
(1)齐普夫法则:第k个最经常出现的词,其词频与1/k成正比。
(2)布尔检索模型下的索引规模估计:假定全部汉语词汇数目为S=50万,因此有c(1+1/2+1/3+.......+1/500000)=1,得到c=1/13,故假如每个文档的平均词汇数为1000,则第i个最经常使用的词汇在文档中期望出现的次数为1000×(1/13)×(1/i)=76/i。那么词汇排名1~76的词汇在所有文档中都出现过,排名77~152的词汇几乎出现在一半的文档中,依此类推....。那么对于50万个词汇,则可以将所有词汇分为50W/76 = 6500个这样的块。对于第i块,出现在n/i个文档中。假设记录每个DocId(文档编号)需要k个字节,则第i
块(含76个词汇)所需要的空间为76kn/i,这样的块有6500个。假定有100亿(10GB)的网页,每个DocId的平均编码长度为1个字节。则倒排索引规模为——累加i从1到6500(76×10G×1/i)= 6.7TB。通过以上计算可以得出,索引主要面临的首要问题是“存得下”。
4.5 涉及存储规模的一些计算
在上一节中提到索引100亿中文网页进行倒排索引需要TB级的存储空间。
(1)正排表与倒排表的合并
下载系统将抓取网页存放在网页库中,分析系统在分析后得到网页对象发送给索引系统,因此索引不停的得到这样的网页对象。网页对象在分析系统中进行了分词计算,最终分析的结果发往索引系统。
在索引系统中,容易得到正排表,正排表不写入文件,而是放在内存中。正排表和倒排表合并的过程,就是正排表中的数据追加到倒排表的数据过程。追加后,正排表并不保留。而倒排表在内存中存储一定的记录后,成批顺序写入磁盘,成为临时倒排文件。
由于在较大文件的中间追加数据,在磁盘中不得不进行大量的数据移动。在导入全部需要作索引的数据后,索引系统会有多个这样的临时倒排文件,不妨假设共有64个这样的临时倒排文件。出于性能上的考虑,在一次检索时,只需要读取一个倒排文件即可得到全部与检索词相关的索引信息,故需要将这64个临时倒排文件归并成一个更大的倒排文件,成为“最终倒排文件”,因为临时倒排文件包含冗余的词典信息,因此“最终倒排文件”略小于64个临时倒排文件之和。
(2)多个临时倒排文件的归并
假设每个临时倒排文件约100MB,64个100MB大小的临时倒排文件最终归并成一个10GB大小的最终倒排文件,这种规模的归并排序在内存中无法完成。因此可以
a.采用拉链法(Zipper)和二路归并。
b.采用拉链法和多路归并。
归并的步骤:
a.从头开始读取两个临时倒排文件的一小部分。
b.分别对DocId进行解压,将压缩后的差分序列还原成原始的差分序列。
c.两个按照DocId有序的列表进行归并。
d.归并的结果进行压缩。
e.写入归并后的临时倒排文件1&2中。、
(3)倒排索引分布式存储
索引数据的规模为TB级,假定分布式的方法采用多索引结点的方法。将一个巨大的倒排文件通过一些方法进行切分,使得每一个索引结点上只保留倒排文件的一部分。多机分布式索引一般按照文档编号(DocId)或者按照索引词编号(WordId)进行划分。按照DocId划分的结果成为“局部倒排文件”,按照WordId划分的结果成为”全局倒排文件“。
对于局部方案,索引结点按DocId的不同将倒排文件分布式的存储在不同的索引结点上。每个索引结点负责对一个DocId区间的文档进行索引,检索时,将检索请求广播到每个结点。每个结点分别查询,最后由检索代理合并查询结果。
对于全局方案,每个索引结点负责对一个索引词ID区间的文档进行索引。因此每个索引结点的倒排文件中的索引词ID互不相同,然而每个索引结点的文档可能重复。
处于可靠性,网络负载和查询效率,业界一般采用局部方案。
4.6 倒排索引文件的创建过程
倒排索引文件的创建过程是一个工程建设,大量应用了批量计算及流水计算的技巧。从计算的角度上讲,临时倒排文件的创建过程包含了磁盘读取(loading),计算(Processing)和写入磁盘这3个过程,磁盘读取从网页库中读取一个个的文档;计算过程包括正排计算,排序及归并等;写入磁盘主要是写入临时倒排文件。
5. 搜索引擎的查询系统
查询系统直接面对用户,在接收用户的查询请求后,通过检索,排序及摘要提取等计算,将计算结果组织成搜索结果页返回给用户。整个过程不仅要快,而且必须能够提供用户满意的查询结果。
5.1 知识准备
(1)信息熵:H(X)在信息论中称为消息X的“熵”,其含义是信息集X发出任意一个随即时间的平均信息量。”熵“值说明了消息集X的每个事件的平均存储的位数,即用多少个二进制表示一个消息。假如一个随即变量X包含四个随即事件,其发生概率均为1/4,则其信息熵H(X)=-1/4log2(1/4) * 4 = 2。信息熵的计算公式:

(2)普通用户提交给查询系统的关键词称为“查询词”;经过查询系统分词,提交检索代理的称为“检索词”。
(3)自动文本摘要:是从文档中自动提取出的一个正文片段。
5.2 网页信息检索
(1)布尔检索的优点和不足
优点:a. 表达简单且易于实现; b. 检索速度快。
这是由于在关键词的检索过程中,将检索计算转变为集合运算,求交集运算。然而,这也会导致
不足:a. 如果一个查询词没有被包含,则检索失败; b. 检索出的结果很难进行相关行排序。
其不足主要是没有考虑到关键词在查询中的权重问题。这一点在向量空间模型中得到部分解决。
(2)向量空间模型
这一模型提出将查询词和文档按照关键词的维度分别向量化,然后通过计算这两个向量间夹角余弦的方法得到文档与查询词的相似度。从而优先检索那些和查询词相似度大的文档,并且能够对检索出的文档按照与查询词的相似度进行排序。
检索步骤:
a. 把原始查询和文档都看作是文本,使用同样的向量化过程分别得到查询向量和文档向量。
b. 通过计算向量相似度的方法计算原始查询和文档的相似度。
c. 按照相似度进行排序,返回给用户。
(3)关键词权重的量化方法TF/IDF
自信息——任意随机时间的自信息量定义为该事件发生概率的对数的负值,设该事件x的概率为p(x),那么其自信息定义为:
I(x) = -log(p(x))
熵值用比特/符号为单位表示,表示词汇表平均每个词汇需要的加权平均编码长度,可以用来衡量是否最佳编码。熵最大限度的压缩冗余的信息对于衡量关键词权重具有特殊意义。
(4)搜索引擎采用的检索模型
a.对查询词进行分词,得到逻辑表达式,转换为AND逻辑表示;
b.采用布尔模型的方法得到结果文档列表;
c. 将文档列表中的全部文档和查询词分别向量化,并求向量间的相似度;
d. 按照相似度输出检索结果。
(5)检索结果排序
由于文档列表按照PageRank排序,因此只需要将PageRank排名靠前的一部分网页拿出来进行向量化,然后和查询词相似度的比较即可。而不需要把关键词doclist的全部文档都执行这样的操作,这样可以大大降低向量化和向量化相似度计算的规模。
接下来,在对这些文档进行向量化和相似度计算后,可以使用堆排序取得这些文档的前256位即可。
这样检索出的文档具有重要性高的特点,也具有向量空间模型。
5.3 中文自动摘要
中文自动摘要是搜索引擎返回给用户查询结果的重要组成部分,使得用户只需要浏览摘要即可了解需要查询的信息。
摘要是搜索结果重要的一个环节,包含四层含义:
(1)摘要知识性:摘要必须出现查询词,指出查询词的位置。
(2)摘要描述行:能包含全部查询词或尽可能包含权重高的查询词。
(3)摘要简洁性:篇幅。
(4)完整性:句子必须完整,必须从句子的首部开始。
当前采用滑动窗口实现自动摘要:
(1)在文档正文中标记查询词出现的位置(在创建倒排索引时已经完成);
(2)从第一个查询词开始,提取窗口长度的正文片段作为第一个候选窗口。接下来,每次窗口滑动到下一个出现的查询词开始。同样取得窗口长度的正文片段,直到取完全部的候选窗口。
(3)在每个候选窗口包含的正文片段中,类接候选窗口出现的全部查询词的权重作为候选窗口的评分,输出评分最高的候选窗口。权重采用TF/IDF方法进行量化。
假定窗口大小固定不可变,取出不完整句子是不可避免的,因此必须从窗口大小入手解决这个问题,即允许窗口大小在一定范围内变动,这种变动包含两种情况:
(1)窗口缺失句首部分,尽可能向前多包含几个汉字。
(2)窗口包含了下个句子的开头部分,而并没有实际的意义。
实际的候选窗口能够通过标点符号进行小范围内的调整,以尽可能包含一个完整的句子。
5.4 生成搜索结果页
搜索结果页的主体包含与查询的相关网页链接(URL)和与查询相关的自动摘要(Automatic Summary),这两个部分的合成还需要一些额外的计算。生成步骤:
(1)检索请求发给检索代理,检索代理进行查询词分词;
(2)查询词分词后的结果同时发往各个检索结点。各个检索结点将各自本地倒排文件中检索出的文档列表发给检索代理。
(3)检索代理重新排序来自各个检索结点的文档,取出排名靠前的n个结果文档作为结果页拼接的候选文档。
(4)通过自动摘要模块从网页库中取出这n个文档的摘要信息。
(5)将(3)和(4)合并,动态生成搜索结果页。
5.5 搜索结果页的缓存
(1)前20%的查询词的查询次数约占了总查询次数的80%。
(2)查询具有稳定性,查过的词很可能在不久的将来还会被查询。
搜索结果缓存的实现方法和操作系统中提到的LRU算法基本一致。
5.6 推测用户查询意图
推测用户查询意图首先需要对用户的查询做基本分类,然后通过挖掘的技巧对排名进行干预,最终通过大量用户的行为引导最终的排名结果。
(1)查询分类
a.导航类查询:查找一个用户已知的网页。可以充分利用锚文本,关键词的位置信息及PageRank等信息进行查询,总体查询效果是十分理想的。
b.信息类检索:查找关于某个主题的相关信息。
c.事务类检索:查找关于某个内容的网络服务。
后两种是难点。
(2)推测信息类,事务类的查询意图
a.从查询日志中得到用户的这类查询中实际点击的URL,并进行排名反馈;
b.在用户的查询序列中分析查询意图,并给出搜索提示。
这类信息和事务类查询大多通过事后分析及日志挖掘的技巧将分析结果给排名系统,使得在接下来的排名更加科学。因为具有用户的点击反馈和查询反馈,所以一个搜索引擎的用户越多,其查询效果就越好。
5.7 查询系统的当前热点和发展方向
搜索效果是搜索引擎的命脉,而改善搜索效果的主要途径为查询系统。因此查询系统是最为热门的话题。
(1)当前热点和发展方向
a. 推测用户查询意图,包括查询纠错和查询推荐及相关搜索。
b. 能够在某个细分领域进行查询,如查询行业信息或某个领域信息等,这方面的工作主要包括垂直搜索及分类搜索;
c. 查询结果的优化,这方面工作包括相似结果的聚类,垃圾网页及病毒网页的甄别;
d. 提供个性化服务,保存用户的个性化信息并给出可定制的服务。
浙公网安备 33010602011771号