1、Web搜索引擎的基本要求
搜索引擎是一个网络应用软件系统,如下图所示,对它有如下基本要求。
能够接受用户通过浏览器提交的查询词或者短语,记作q,例如“大数据”,“Spark”等等。
在一个可以接受的时间内返回一个和该用户查询匹配的网页信息列表,记作L。这个列表的每一条目至少包含三个元素(标题,网址链接,摘要)。
示意图:
“可以接受的时间”,也就是响应时间,这个时间不能太长,通常也就在“秒”这个量级。这是衡量搜索引擎可用性的一个基本指标。
更进一步的,这样的响应时间要求不仅要能满足单个用户查询,而且要能在系统设计负载的情况下满足所有的用户。也就是说,系统应该在额定吞吐率的情况下保证秒级响应时间。
“匹配”,指的是网页中以某种形式包含有q的内容,最简单最常见的形式就是q在其中直接出现。(当然,如果一个搜索引擎就是以百分之百满足这种简单的包含关系为目标,即使实现了也并不意味着达到了最好的效果。)
“列表”,就是一种序列(rank)。大多数情况下,L特别长,例如上万条数目等。这不仅是由于Web上的信息量大,也由于搜索引擎的查询方式简单。简单,意味着抽象;抽象,意味着有更多的具体事物可能是它的体现。
有分析统计表明,用户平均察看返回结果不超过2页。
现代大规模高质量搜索引擎一般采用下图三段式的工作流程,即:网页搜集、预处理和查询服务:
2、网页搜集
大规模搜索引擎服务的基础应该是一批预先搜集好的网页,如何维护?
1)定期搜集,每次搜集替换上一次的内容,我们称之为“批量搜集”。由于每次都是重新来一次,对于大规模搜索引擎来说,每次搜集的时间通常会花几周。而由于这样做开销较大,通常两次搜集的间隔时间也不会很短。这样做的好处是系统实现比较简单,主要缺点是“时新性”(freshness)不高,还有重复搜集所带来的额外带宽的消耗。
2)增量搜集,开始时搜集一批,往后只是:
(1)搜集新出现的网页
(2)搜集那些在上次搜集后有过改变的网页
(3)发现自从上次搜集后已经不再存在了的网页,并从库中删除。
这样的系统表现出来的信息时新性就会比较高,主要缺点是系统实现比较复杂;这种复杂还不仅在于搜集过程,而是还在于建索引的过程。
搜集方式:
最常见的一种是所谓“爬取”:将Web上的网页集合看成是一个有向图,搜集过程从给定起始URL集合S开始,沿着网页中的链接,按照先深、先宽、或者某种别的策略遍历,不停的从S中移除URL,下载相应的网页,解析出网页中的超链接URL,看是否已经被访问过,将未访问过的那些URL加入集合S。整个过程可以形象地想象为一个蜘蛛(spider)在蜘蛛网(Web)上爬行(crawl)。一般真正的系统其实是多个“蜘蛛”同时在爬。
另外一种可能的方式是在第一次全面网页搜集后,系统维护相应的URL集合S,往后的搜集直接基于这个集合。每搜到一个网页,如果它发生变化并含有新的URL,则将它们对应的网页也抓回来,并将这些新URL也放到集合S中;如果S中某个URL对应的网页不存在了,则将它从S中删除。这种方式也可以看成是一种极端的先宽搜索,即第一层是一个很大的集合,往下最多只延伸一层。
还有一种方法是让网站拥有者主动向搜索引擎提交它们的网址,系统在一定时间内定向向那些网站派出“蜘蛛”程序,扫描该网站的所有网页并将有关信息存入数据库中。大型商业搜索引擎一般都提供这种功能。
3、预处理
一个合适的数据结构是查询子系统工作的核心和关键。这里只是指出:现行最有效的数据结构是“倒排文件”(inverted file);倒排文件是用文档中所含关键词作为索引,文档作为索引目标的一种结构。
下面讨论从网页集合形成这样的倒排文件过程中的几个主要问题,即我们所说的 “预处理”。主要包括四个方面,关键词的提取,“镜像网页”(网页的内容完全相同,未加任何修改)或“转载网页”(near-replicas,主题内容基本相同但可能有一些额外的编辑信息等,转载网页也称为“近似镜像网页”)的消除,链接分析和网页重要程度的计算。
1、关键词的提取
随便取一篇网页的源文件,我们可以看到其中的情况纷乱繁杂。除了我们从浏览器中能够正常看到的文字内容外,还有大量的HTML标记。根据天网统计,网页文档源文件的大小(字节量)通常大约是其中内容大小的4倍。另外,由于HTML文档产生来源的多样性,许多网页在内容上比较随意,不仅文字不讲究规范、完整,而且还可能包含许多和主要内容无关的信息。
于是,作为预处理阶段的一个基本任务,就是要提取出网页源文件的内容部分所含的关键词。
对于中文来说,就是要根据一个词典Σ,用一个所谓“切词软件”,从网页文字中切出Σ所含的词语来。之后,一篇网页主要就由一组词来近似代表了,p = {t1, t2, …, tn}。
一般来讲,我们可能得到很多词,同一个词可能在一篇网页中多次出现。从效果(effectiveness)和效率(efficiency)考虑,不应该让所有的词都出现在网页的表示中,要去掉诸如“的”,“在”等没有内容指示意义的词,称为“停用词”(stop word)。
2、重复或转载网页的消除
我们看到Web上的信息存在大量的重复现象。
例如,一条新闻总是会有十多个不同的URL也给出相同或者基本相似的内容。这种现象对于广大的网民来说是有正面意义的,因为有了更多的信息访问机会。但对于搜索引擎来说,则主要是负面的;它不仅在搜集网页时要消耗机器时间和网络带宽资源,而且如果在查询结果中出现,无意义地消耗了计算机显示屏资源,也会引来用户的抱怨,“这么多重复的,给我一个就够了”。
因此,消除内容重复或主题内容重复的网页是预处理阶段的一个重要任务。
3、链接分析
前面提到,大量的HTML标记既给网页的预处理造成了一些麻烦,也带来了一些新的机遇。
HTML文档中所含的指向其他文档的链接信息是人们近几年来特别关注的对象,认为它们不仅给出了网页之间的关系,而且还对判断网页的内容有很重要的作用。
4、 网页重要程度的计算
搜索引擎返回给用户的,是一个和用户查询相关的结果列表。列表中条目的顺序是很重要的一个问题。
如何讲一篇网页比另外一篇网页重要?
人们参照科技文献重要性的评估方式,核心想法就是“被引用多的就是重要的”。“引用”这个概念恰好可以通过HTML超链在网页之间体现得非常好。
除此以外,人们还注意到网页和文献的不同特点,即一些网页主要是大量对外的链接,其本身基本没有一个明确的主题内容,而另外有些网页则被大量的其他网页链接。从某种意义上讲,这形成了一种对偶的关系,这种关系使得人们可以在网页上建立另外一种重要性指标。这些指标有的可以在预处理阶段计算,有的则要在查询阶段计算,但都是作为在查询服务阶段最终形成结果排序的部分参数。
4、查询服务
从一个原始网页集合S开始,预处理过程得到的是对S的一个子集的元素的某种内部表示,这种表示构成了查询服务的直接基础。
对每个元素来说,这种表示至少包含如下几个方面:
原始网页文档
URL和标题
编号
所含的重要关键词的集合(以及它们在文档中出现的位置信息)
其他一些指标(例如重要程度,分类代码等)
而系统关键词总体的集合和文档的编号一起构成了一个倒排文件结构,使得一旦得到一个关键词输入,系统能迅速给出相关文档编号的集合输出。
然而,用户通过搜索引擎看到的不是一个“集合”,而是一个“列表”。
如何从集合生成一个列表,是服务子系统的主要工作。
对服务子系统的要求和其工作原理,主要有三个方面:
1、查询方式和匹配
查询方式指的是系统允许用户提交查询的形式。考虑到各种用户的不同背景和不同的信息需求,不可能有一种普适的方式。一般认为,对于普通网络用户来说,最自然的方式就是“要什么就输入什么”。
用一个词或者短语来直接表达信息需求,希望网页中含有该词或者该短语中的词,依然是主流的搜索引擎查询模式。
这不仅是因为它的确代表了大多数的情况,还因为它比较容易实现。这样,一般来讲,系统面对的是查询短语。就英文来说,它是一个词的序列;就中文来说,它是包含若干个词的一段文字。
一般地,我们用q0表示用户提交的原始查询,例如,q0 =“网络与分布式系统实验室”。它首先需要被“切词”(segment)或称“分词”,即把它分成一个词的序列。如上例,某分词算法将其分为“网络 与 分布式 系统 实验室”。然后需要删除那些没有查询意义或者几乎在每篇文档中都会出现的词(例如“的”),在本例中即为“与”。最后形成一个用于参加匹配的查询词表,q = {t1, t2, …, tm},在本例中生成的词表就是q = {网络,分布式,系统,实验室}。
倒排文件就是用词来作为索引的一个数据结构,显然,上例q中的词必须是包含在倒排文件词表中才有意义。有了这样的q,它的每一个元素都对应倒排文件中的一个倒排表(文档编号的集合),记作L(ti),它们的交集即为对应查询的结果文档集合,从而实现了查询和文档的匹配。
上述过程的基本假设是一般情况:用户是希望网页包含所输入查询文字的。
2、 结果排序
用户查询的这个集合的元素需要以一定的形式通过计算机显示屏呈现给用户。就目前的技术情况看,列表是最常见的形式。
给定一个查询结果集合,R={r1, r2, …, rn},所谓列表,就是按照某种评价方式,确定出R中元素的一个顺序,让这些元素以这种顺序呈现出来。笼统地讲,ri和q的相关性(relevance)是形成这种顺序的基本因素。
为了形成一个合适的顺序,在搜索引擎出现的早期人们采用了传统信息检索领域很成熟的基于词汇出现频度的方法。大致上讲就是一篇文档中包含的查询(q)中的那些词越多,则该文档就应该排在越前面;再精细一些的考虑则是若一个词在越多的文档中有出现,则该词用于区分文档相关性的作用就越小。这样一种思路不仅有一定直觉上的道理,而且在倒排文件数据结构上很容易实现。因为,当我们通过前述关键词的提取过程,形成一篇文档的关键词集合,p = {t1, t2, …, tn}的时候,很容易同时得到每一个ti在该文档中出现的次数,即词频,而倒排文件中每个倒排表的长度则对应着一个词所涉及的文档的篇数,即文档频率。
然而,由于网页编写的自发性、随意性较强,仅仅针对词的出现来决定文档的顺序,在Web上做信息检索表现出明显的缺点,需要有其他技术的补充。
这方面最重要的成果就是PageRank。通过在预处理阶段为每篇网页形成一个独立于查询词(也就和网页内容无关)的重要性指标,将它和查询过程中形成的相关性指标结合形成一个最终的排序,是目前搜索引擎给出查询结果排序的主要方法。
3、 文档摘要
搜索引擎给出的结果是一个有序的条目列表,每一个条目有三个基本的元素:标题,网址和摘要。
其中的摘要需要从网页正文中生成。
但相关的技术用到网络搜索引擎来有两个基本困难。一是网页的写作通常不规范,文字比较随意,因此从语言理解的角度难以做好;二是复杂的语言理解算法耗时太多,不适应搜索引擎要高效处理海量网页信息的需求。
根据查询词在文档中的位置,提取出周围的文字来,在显示时将查询词标亮。这是目前大多数搜索引擎采用的方式。为了保证查询的效率,需要在预处理阶段分词的时候记住每个关键词在文档中出现的位置。
5、体系结构
上述工作原理的基础上,作为一个网络应用软件,我们可以勾画出搜索引擎的体系结构:
上图中“控制器”的作用:
网页的搜集,如果是为了向大规模搜索引擎稳定地提供网页数据,通常需要每天搜集上百万网页,而且是持续进行,情况则要复杂许多,核心是要综合解决效率、质量和“礼貌”的问题。这就是“控制器”的作用。
所谓效率,在这里就是如何利用尽量少的资源(计算机设备、网络带宽、时间)来完成预定的网页搜集量。
所谓质量问题,指的是在有限的时间,搜集有限的网页,希望它们尽量是比较“重要”的网页,或者说不要漏掉那些很重要的网页。
礼貌,即是说搜索引擎需要和网站“和睦相处”,不要频繁抓取过多,会被认为是黑客攻击。
知识来源:搜索引擎教材 李晓明等著