本节书摘来自华章出版社《大规模元搜索引擎技》一书中的第1章,第1.3节,作者 [美]孟卫一(Weiyi Meng), 纽约州立大学, 宾汉姆顿分校於德(Clement T.Yu),伊利诺伊大学芝加哥分校,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.3 搜索引擎技术概述
最早的Web搜索引擎基本上就是网页文本检索系统。然而,Web环境中有一些特征,使得构建现代搜索引擎与构建传统文本检索系统显著不同。在本节中,简要概述这些特征以及基于利用这些特征的搜索引擎构建技术。
1.3.1 Web的专门特性
下面是Web环境的一些特性,它们对搜索引擎的发展产生了重大影响。
1)Web页面存储在大量的自治Web服务器中。需要一种方法来查找和获取这些Web页面,以便处理后供搜索用。
2)大多数Web页面是HTML(HyperText Markup Language,超文本标记语言)格式,HTML标签通常传达了这些网页中词的丰富信息。例如,一个词出现在一个页面的标题中或一个词用特殊字体强调,这就暗示该词在表达该页面内容时是重要的。
3)Web页面是相互链接的。从页面P1到页面P2的链接允许用户从P1浏览到P2。这种链接还包含一些有用的信息来提高检索效率。第一,此链接表明两页的内容有较高的相关性[Davison,2000]。第二,P1的作者认为P2是有价值的。第三,与链接相关的可点击文本,称为链接的锚文本(anchor text),通常提供了一个链接页面的简短描述[Davison,2000]。
本节中还将讨论一个问题。该问题对搜索引擎和传统文本检索系统都非常重要,尤其对搜索引擎重要。该问题是关于如何组织搜索结果。
1.3.2 Web爬虫
Web爬虫(Web crawler)是一个用来从远程Web服务器爬取网页的程序。
它也称为Web蜘蛛(Web spider)和Web机器人(Web robot)。它们广泛用于构建搜索引擎的Web页面集合。
爬虫程序的基本思想很简单。每个网页都有一个标识网页位置的URL(Universal Resource Locator,统一资源定位符)。一个典型的爬虫以一个或多个种子URL作为输入形成一个初始URL列表。然后,爬虫重复以下两个步骤直到没有新的URL或已经找到足够的页面:1)从URL列表取出下一个URL,通过向服务器发出一个超文本传输协议(HyperText Transfer Protocol,HTTP)请求,与Web页面所在服务器建立连接并获取相应的Web页面;2)从每个获取的Web页面提取一些新的URL并将它们添加到URL列表中。爬虫获取Web页面可以采用深度优先或广度优先策略。若使用广度优先爬取,URL列表以一个队列实现——新的URL总是添加到列表的最后。若使用深度优先爬取,URL列表以一个栈实现——新的URL总是添加到列表的开始。
将仅与某个主题(比如体育)相关的一些新Web页面的URL添加到URL列表,Web爬虫就变成了这个主题的聚焦爬虫(focused crawler)。聚焦爬虫对于创建特定领域的或垂直的搜索引擎是有用的[Chakrabarti et al.,1999]。为使聚焦爬虫有效,该爬虫需要准确地预测一个URL是否会带来与兴趣主题相关的一个或多个页面。一种对预测有用的技术是检查URL、URL相关的锚文本、锚文本相邻文本是否包含与主题相关的词。
实现Web爬虫的一个方面是能从一个Web页面中找出所有(新)的URL。这需要识别所有可能的HTML标签和可能拥有URL的标签属性。虽然大多数URL出现在锚标签(例如,〈a href=“URL”…〉…〈/a〉)中,但有些URL也可以出现在其他标签中,例如选择标签〈option value=“URL”…〉…〈/option〉、区域标签(映射)〈area href=“URL”…〉…〈/area〉以及框架标签〈frame src=“URL”…〉…〈/frame〉。出现在Web页面P中的一个URL经常不包含由Web浏览器定位这个相应Web页面所需的完整路径,而经常使用一个部分路径或相对路径。在这种情况下,爬虫需要使用相对路径以及相关P的基本路径来构建一条完整的路径。
在设计Web爬虫时,需要为由此获取Web页面的远程服务器着想。快速激发(rapid fire)(在短时间内从同一个服务器爬取大量的网页)可能会压垮一个服务器,等效于对服务器进行拒绝服务攻击。一个设计良好的Web爬虫应该控制从同一个服务器爬取多个页面的节奏,而从大量不同的服务器轮流爬取。考虑妥善的Web爬虫还应满足机器人排除协议(Robot Exclusion Protocol),也就是说,不爬取Web服务器管理员不允许爬取的网站部分。Web服务器管理员可以通过Web服务器上名为robots.txt的文件指定能或不能爬取的内容目录。
为加快爬取或处理大规模的爬取结果,Web爬虫可以采用并行爬取和分布式爬取。并行爬取可以通过使用多线程或多台计算机从不同的服务器同时执行。分布式爬取使用在不同地理位置的多台计算机,每台计算机可以集中精力从邻近的Web服务器爬取网页,因而减少网络延迟使爬取更有效。
1.3.3 利用标签信息
大多数Web页面是HTML页面,HTML语言包含一组标签,如title和font。大多数标签成对出现,一个表示开始,另一个表示结束。例如,在HTML中标题的开始和结束标签分别是〈title〉和〈/title〉。在搜索引擎应用环境中,标签信息主要是用来帮助确定索引词的重要性,而这些索引词表示一个Web页面的内容。
1.2.2节介绍了一种方法,该方法使用一个词的词频和文档频率信息计算在一个文档中这个词的权重。也可以使用标签信息来影响一个词的权重。例如,Web页面作者经常使用粗体字、斜体字、下划线字以及各种颜色来突出显示一个Web页面中的某些词。这些词可以认为是更重要的而应给予较高的权重。相反,较小字体的词应给予较低的权重。其他标签,如title和不同级别的header也影响权重。许多著名的搜索引擎,包括Google,给标题中的词分配更高的权重。
利用标签来调整词权重的一般方法如下所示[Cutler et al.,1999]。首先,所有的HTML标签的集合划分为若干子集。例如,标题标签本身可成为一个子集,所有列表标签(即“ul”“ol”和“dl”)可以组合在一起,所有的强调标签可以形成一个子集。其次,页面中词的出现情况被划分为若干类,每个标签子集为一个类。例如,所有出现在标题中的词形成一个类。此外,对每个网页P,还可以形成其他两类。第一类包含出现在纯文本(即没有标签)中的词,第二类包含的词出现在与页面P的后向链接有关的锚文本中。设n是所形成类的个数。使用这些类,页面中的每个词的词频可以表示成一个词频向量(term frequency vector):tfv=(tf1,…,tfn),其中tfi是在第i类中词出现的次数,i=1,…,n。最后,可以给不同的类分配不同程度的重要性。设civ=(civ1,…,civn)表示类重要性向量(class importance vector),civi表示第i类的重要度,i=1,…,n。基于向量tfv和civ,传统的词频率权重公式可扩展为:∑ni=1
tfi×civi。这个公式考虑了在不同类中词的频率以及每个类的重要性。一个有趣的问题是如何找到最优的类重要性向量,从而可以得到最高的检索效率。有一种基于测试数据集的方法是凭经验寻找一个最优的或近似最优的civ[Cutler et al.,1999]。
1.3.4 利用链接信息
传统文本检索系统中的文档和搜索引擎中的文档之间最显著的差异之一是Web页面之间存在大量的链接。如何利用链接信息来提高检索效率已经受到搜索引擎研究者和开发者的广泛关注。一些著名的方法都是基于利用这样的事实:从页面P1链接到P2表示P2被P1的作者认可。这些方法中最广为人知的是由Google的创始人提出的PageRank方法[Page et al.,1998]。这种方法试图找到不考虑页面的内容时每个Web页面的整体重要性。我们在本节描述该方法的基本思想。
PageRank方法是将Web视为一个巨大的有向图G(V,E),其中V表示页面(顶点)集,E表示链接(有向边)集。每个页面都有许多出向边(前向链接)和许多入向边(后向链接)。如上所述,当一个作者在页面P1设置一个链接指向P2时该作者认为页面P2是有价值的。换句话说,这种链接可以视为对页面P2投了一个支持票。一个页面可能有很多后向链接,它们可以按某种方式聚集起来以反映这个页面的整体重要性。页面的PageRank用以度量该页面在Web上的相对重要性,这种方法是基于链接信息来计算的[Page et al.,1998]。Web页面的PageRank的定义和计算是基于以下三种主要思想。
1)有更多后向链接的页面可能更重要。直觉上,一个页面有更多的后向链接意味着它得到了更多Web页面作者的支持票。换句话说,一个页面的重要性应该通过页面在所有网页作者中受欢迎的程度来反映。
2)如果一个页面被更重要的页面指向,那么它的重要性应该增加。换句话说,不仅数量,还有后向链接的重要性也应该考虑。直觉上,重要网页可能会由重要作者或机构来发布。决定页面的重要性时,这些作者或机构认可的页面应该有更高的权重。这有两个含义。首先,一个页面的重要性应该传播到它指向的页面。其次,PageRank的计算是一个迭代过程,因为一个页面的重要性受链接到它的一些页面的影响,同时这些页面本身的重要性也会受到指向它们的另一些页面的影响,等等。
3)如果一个页面获得指向它的其他页面的关注越专注,那么它从这些页面提供传播获得的重要性就应该越多。直观地说,当一个页面有更多的前向链接时,它对每一个链接页面的重要性的影响将更小。因此,如果一个页面有更多的子页面,那么它对每个子页面仅传播其重要性的较小部分。
从上面的讨论可知,以递归方式计算网页的PageRank是很自然的。一个页面u的PageRank的更加形式化的定义如下所述。设Fu表示页面u链向的页面的集合,Bu表示指向u的页面的集合(见图1-3)。对于集合X,用|X|表示X中元素的个数。u的PageRank,记为R(u),可用如下公式定义:
R(u)=∑v∈BuR(v)|Fv|(1-3)
图1-3 网页u及其邻接网页
不难看出,式(1-3)结合了上述三种思想。第一,求和反映了第一种思想,也就是说,更多的后向链接可能导致更大的PageRank。第二,若页面v更重要(具有更大的R(v)),则表明u的PageRank的分子R(v)变大。第三,分母|Fv|意味着网页重要性被均匀分配并且传播到它指向的每一个页面。还要注意式(1-3)是递归的。
Web页面图中Web页面的PageRank可如下计算。首先,给所有页面一个初始PageRank值。设N表示图中Web页面的个数。然后令1/N作为每一页的初始PageRank值。其次,经过多次迭代应用式(1-3)计算PageRank。在每次迭代时,计算一个页面的PageRank要使用前面已经计算过的指向它的网页的PageRank。重复这个过程,直到所有页面的PageRank收敛到一个给定的阈值。设Ri(u)表示页面u经过第i次迭代后的PageRank,R0(u)表示赋给u的初始PageRank。那么,式(1-3)可以重写为:
Ri(u)=∑v∈BuRi-1(v)|Fv|(1-4)
式(1-4)可用矩阵表示如下。设M是一个表示Web图的N×N矩阵,其中N是图中Web页面的个数。若页面v有链接指向页面u,则令矩阵项M[u,v]为1/|Fv|。如果没有从v到u的链接,那么M[u,v]=0。令Ri为一个N×1的向量,它表示第i次迭代后N个页面的PageRank向量。式(1-4)可以表示为:
Ri=M×Ri-1(1-5)
其中R0是全部项值为1/N的初始PageRank向量。当PageRank收敛时,PageRank向量是矩阵M的特征向量,其相应的特征值是1。注意,如果每一页至少有一个前向链接,那么M的每列值的和是1且全部值都是非负的(这样的矩阵称为随机矩阵,stochastic matrix)。从另一个角度看,矩阵M的项可以解释如下:考虑一个Web冲浪者,每一步,冲浪者从当前页面随机选取链接到其子页面。因此元素M[u,v]的值可以解释为从页面v经过一个向其子节点的随机行走(random walk)会到达页面u的概率。
现在考虑应用式(1-5)对页面PageRank的作用。假设v有一些子页面。当应用式(1-5)时,v的PageRank传播到它的子页面。如果每个页面至少有一个前向链接,则所有页面的PageRank将被传递给它们的子页面。因为所有页面PageRank的总和初始为1,所以每次迭代后这个总和会保持不变。假设通过多次应用式(1-5),页面的PageRank收敛了。收敛后的每个页面的PageRank可以解释为该页面在Web图上随机行走时被访问的概率。
直接使用式(1-5)会有一个问题。也就是说,PageRank能保证收敛仅当M是非周期的(即Web图不是单一的大回路)且不可约的(即Web图是强连通的)[Haveliwala,1999;Motwani and Raghavan,1995]。前者(即非周期性)对于Web的实际情况能够保证,而后者通常不成立。如果一个有向图中的任何两个不同的顶点都存在从一个顶点到另一个顶点(反之亦然)的有向路径,那么这个图就是强连通的。当Web图不是强连通的时,可能存在一些页面(或属于一个回路的页面集合)只有后向链接但没有前向链接。这些页面只能收到那些父页面的PageRank传播但不能传播到其他页面,这些页面称为PageRank汇点(sink)[Page et al.,1998]。PageRank汇点的存在会导致总PageRank值的损失。解决这个问题的一种方法是在Web图中概念性地添加从每个页面到所有页面的链接并给每个这样的链接一个适当的正概率[Haveliwala,1999]。这种方法所赋予的链接概率应该使得修改后的Web图所对应的矩阵满足随机特征(即矩阵中每一列元素的总和是1)。假设从页面v到页面u概念性地添加的链接具有概率p。在随机行走模型中,这可以解释为当Web冲浪者在页面v时,可能以概率p跳转到页面u。注意v和u可能是同一个页面。在这种情况下,跳转可以解释为使用Web浏览器刷新(refresh)或重载(reload)请求。
现在考虑如何给添加的链接赋予概率值。对于一个给定的页面v,考虑以下两种情况。
1)在没有修改过的Web图中页面v没有前向链接。在这种情况下,Web冲浪者只能使用添加的链接之一(即只能跳转)。一个合理的假设是Web冲浪者以相同的概率跳转到任何页面。因此,从页面v出发的每个添加链接的概率应该为1/N。这相当于让矩阵中对应于页面v的列的所有元素为1/N。
2)在没有修改过的Web图中页面v至少有一个前向链接,即|Fv|≥1。基于矩阵M,给每个这样的链接分配概率1/|Fv|。需要对这个概率进行调整,因为如果没有调整,任何新添加链接的概率只能是0,表明不可能跳转。用c表示一个满足0<c<1的权重参数。那么对每个在没有修改过的Web图中链接的概率可从1/|Fv|调整为c×1/|Fv|,而对每个从v新添加的链接赋给概率(1-c)×1/N。c越接近1,新添加链接的影响越小。容易知道这些概率之和为1。
数学上,添加链接、给新添加的链接赋予概率值以及调整在没有修改过的Web图中原始链接的概率能够通过修改矩阵M得到如下新矩阵来实现:
M*=c(M+Z)+(1-c)K(1-6)
其中Z是一个满足如下条件的N×N矩阵:对应页面v的列的所有元素要么是1/N(如果v在没有修改过的原始Web图中没有前向链接)要么是0(如果v在原始图中至少有一个前向链接);K是一个其所有元素都是1/N的N×N矩阵;c是0和1之间的一个常数。
当式(1-5)中的矩阵M被新矩阵M*替代之后,关于PageRank汇点的问题将得以解决。计算网页PageRank的高效技术已经存在[Haveliwala,1999]。
最后,当收敛之后,可以规范化页面的PageRank,也就是说,每个页面的PageRank除以所有页面中最大的PageRank,使得每个页面的规范化PageRank在0和1之间。在这种情况下,PageRank=1的页面被认为是最重要的文档,而PageRank=0的页面被认为是最不重要的。
例1.3 考虑图1-4中的有向图。假设图的节点对应Web页面,有向边表示链接。现在计算每个页面的PageRank。
图1-4 Web图示例
根据图1-4,得到:
M=0001/20001/211000010
由于每个节点至少有一个前向链接,所以矩阵Z的所有元素为0。因为有4个顶点,所以矩阵K的所有元素为1/4。假设式(1-6)中的常数c是0.8,那么新矩阵M*为:
M*=0.8(M+Z)+0.2K
=0.050.050.050.450.050.050.050.450.850.850.050.050.050.050.850.05
假设所有页面都有的相同初始PageRank为0.25,即R0=(0.25,0.25,0.25,0.25)t,其中VT表示向量V的转置。经30次迭代后,获得以下收敛的PageRank:R(a)=R(b)=0.176,R(c)=0.332,R(d)=0.316。注意页面c被2个网页所指,而其他每个页面只被1个页面所指。因此,页面c的PageRank高于其他页面。因为页面d被最重要页面c所指,所以页面d的PageRank高于页面a或页面b的PageRank。■
PageRank的计算仅根据链接信息而没有考虑Web页面的内容。因此,对于每个查询,当搜索引擎要想检索到既重要又相关的Web页面时,必须把PageRank和基于内容的相似度(1.2.3节中讨论的那些相似度是基于内容的,因其计算是基于查询和文档内容的)一起使用。
1.3.5 结果组织
对于一个给定的查询,大多数搜索引擎按其估计的需求度(desirability)的降序排列组织检索结果。对于一个查询,一个页面的需求度可用许多不同的方式进行估计,如页面与查询的相似度,或包含页面的相似度及其PageRank的某种组合度量。一个相关的问题是如何在一个结果页面中表示搜索结果记录(Search Result Record,SRR),这里SRR对应一个被检索的Web页面。针对每个被检索的网页,最常用的一些搜索引擎生成的SRR主要包括三方面信息:Web页面的标题、Web页面的URL和一段简短的摘要(称为概览,snippet)。其他信息,如发布时间和Web页面的大小也包含在一些搜索引擎的SRR中。有时,标题是一个具有URL编码的可点击文本。概览是一个简短的描述性文本,通常含有从Web页面中提取的大约20个单词。概览的作用是比标题提供更多关于Web页面内容的提示信息,以便用户能够就是否查看完整的Web页面做出更明智的决定。页面的概览往往是一个页面中以一个句子开始并包含较多查询词的文本片断。
一些搜索引擎把结果组织成组,使得每组网页有某些共同的特征,如有类似内容或来自同一个Web站点的在同一组中。当每组赋予信息标签时,特别是当查询有多个解释以及查询返回结果的个数很大时,这样的结果组织可以更方便用户从返回的结果找出有用的页面。一个众所周知的例子是Yippy搜索引擎(原名为Clusty;http://search.yippy.com/)。它将每个查询返回的结果组织成组。实现一个在线的结果聚类算法时需要解决的一些问题包括:1)哪些信息(标题、URL、文档的概览)应该用于聚类?尽管更多的信息可以提高聚类的质量,但是由于需要较多的计算和通信开销,所以使用太多的信息可能导致用户获得结果的时间被长时间延迟。2)应使用什么标准进行聚类?可以基于SSR之间的相似度,也就是说,高度相似的结果应该分在一组。也可以基于查询的解释,也就是说,符合相同解释的应该分在一起。3)如何为每个组给出一个简短且有意义的标签?4)如何组织这些组?可以对它们按照线性或层次的排序。对于前者,线性序应该是什么?对于后者,如何生成层次结构?其中有些问题仍是研究的热点。
有些搜索引擎以图形化方式展示搜索结果,使得不同结果之间的联系一目了然。例如,Liveplasma音乐和电影搜索引擎(http://www.liveplasma.com/)把结果显示为带有注释的图标,这些图标根据一些共同的特征(如有相同男主角的电影)分成组,并且用不同的链路进行连接(如其中一个链路可连接到电影的导演)。