搜索引擎到工作原理第一节搜索引擎的定义和功能构成所谓“搜索引擎”,说到底是一个计算机应用软件系统,或者说是一个网络应用软件系统。
从网络用户的角度看,它根据用户提交的类自然语言查询词或者短语,返回一系列很可能与该查询相关的网页信息,供用户进一步判断和选取。
为了有效地做到这一点,它大致上被分成三个功能模块,或者三个子系统:即网页搜集,预处理和查询服务。
应该指出,在实践中这三个部分是相对独立的,它们的工作形成了搜索引擎工作的三个阶段,通常分别由人工启动。
同时我们注意到,在早期的搜索引擎中,系统处理的网页数量少,预处理部分的工作比较简单,只是涉及到汉语的分词(英文还没有这个问题)和建索引,因此也有将分词合并到网页搜集过程中,将建索引归到查询服务子系统中,从而整个系统看起来只有两个模块的安排。
图片一:搜索引擎三段式工作原理模式图第二节、网页搜集搜索引擎这样一个软件系统应该是何种工作方式?如果说软件系统是工作在某还是即时。
我们都有经验,在网络比较畅通的引擎服务的基础应该是一批预先搜集好的网页个数据集合上的程序的话,这个软件系统操作的数据不仅包括内容不可预测的用户查询,还要包括在数量上动态变化的海量网页,并且这些网页不会主动送到系统来,而是需要由系统去抓取。
首先,我们考虑抓取的时机:事先情况下,从网上下载一篇网页大约需要1秒钟左右,因此如果在用户查询的时候即时去网上抓来成千上万的网页,一个个分析处理,和用户的查询匹配,不可能满足搜索引擎的响应时间要求。
不仅如此,这样做的系统效益也不高(会重复抓取太多的网页);面对大量的用户查询,不可能想象每来一个查询,系统就到网上“搜索”一次。
因此我们看到,大规模引擎服务的基础应该是一批预先搜集好的网页(直接或者间接1)。
这一批网页如何维护?可以有两种基本的考虑。
定期搜集,每次搜集替换上一次的内容,我们称之为“批量搜集”。
由于每次都是重新来一次,对于大规模搜索引擎来说,每次搜集的时间通常会花几周。
而由于这样做开销大,较通常两次搜集的间隔时间也不会很短(例如早期天网的版本大约每3个月来一次,Google在一段时间曾是每隔28天来一次)。
这样做的好处是系统实现比较简单,主要缺点“是时新性”(freshness)不高,还有重复搜集所带来的额外带宽的消耗。
增量搜集,开始时搜集一批,往后只是(1)搜集新出现的网页,(2)搜集那些在上次搜集后有过改变的网页,(3)发现自从上次搜集后已经不再存在了的网页,并从库中删除。
由于除新闻网站外,许多网页的内容变化并不是很经常的(有研究指出50%网页的平均生命周期大约为50天,这样做每次搜集的网页量不会很大(例如我们在2003年初估计中国每天有30-50万变化了的网页),于是可以经常启动搜集过程(例如每天)。
30万网页,一台PC机,在一般的网络条件下,半天也就搜集完了。
这样的系统表现出来的信息时新性就会比较高,主要缺点是系统实现比较复杂;这种复杂还不仅在于搜集过程,而是还在于下面要谈到的建索引的过程。
上面讲的是系统网页数据库维护的基本策略。
在这两种极端的情况之间也可能有一些折中的方案,J. Cho博士在这方面做过深入的研究[Cho and Garcia-Molina,2000],[Cho,2002],根据一种网页变化模型和系统所含内容时新性的定义,提出了相应优化的网页搜集策略。
其中一个有趣的结论是:在系统搜集能力一定的情况下,若有两类网页(例如“商业”和“教育”),它们的更新周期差别很大(例如“商业”类网页平均更新周期是“天”,而“教育”类网页平均更新周期是“月”),则系统应该将注意力放在更新慢的网页上[Cho and Garcia-Molina,2000],以使系统整体的时新性达到比较高的取值。
在具体搜集过程中,如何抓取一篇篇的网页,也可以有不同的考虑。
最常见的一种是所谓“爬取”:将Web上的网页集合看成是一个有向图,搜集过程从给定起始URL集合S (或者说“种子”)开始,沿着网页中的链接,按照先深、先宽、或者某种别的策略遍历,不停的从S中移除URL,下载相应的网页,解析出网页中的超链接URL,看是否已经被访问过,将未访问过的那些URL加入集合S。
整个过程可以形象地想象为一个蜘蛛(spider)在蜘蛛网(Web)上爬行(crawl)。
后面我们会看到,真正的系统其实是多“个蜘蛛”同时在爬。
这种方式的好处除了概念很漂亮,一般实现起来也不困难外,还有很重要的一条是容易通过一定的策略,使搜集到的网页相对比较“重要”。
前面提过,任何搜索引擎是不可能将Web 上的网页搜集完全的,通常都是在其他条件的限制下决定搜集过程的结束(例如磁盘满,或者搜集时间已经太长了)。
因此就有一个尽量使搜到的网页比较重要的问题,这对于那些并不追求很大的数量覆盖率的搜索引擎特别重要。
研究表明,按照先宽搜索方式得到的网页集合要比先深搜索得到的集合重要(这里当然有一个重要性的指标问题)。
这种方式的一个困难是要从每一篇网页中提取出所含的URL。
由于HTML的灵活性,其中出现URL的方式各种各样,将这个环节做得彻底不容易(例如我们现在还没有很好的简单办法从JavaScript 脚本中提取URL)。
同时,由于Web 的“蝴蝶结”形状,这种方式搜集到的网页不大会超过所有目标网页数量2的2/3。
另外一种可能的方式是在第一次全面网页搜集后,系统维护相应的URL集合S,往后的搜集直接基于这个集合。
每搜到一个网页,如果它发生变化并含有新的URL,则将它们对应的网页也抓回来,并将这些新URL也放到集合S中;如果S中某个url对应的网页不存在了,则将它从S中删除。
这种方式也可以看成是一种极端的先宽搜索,即第一层是一个很大的集合,往下最多只延伸一层。
还有一种方法是让网站拥有者主动向搜索引擎提交它们的网址(为了宣传自己,通常会有这种积极性),系统在一定时间内2(天到数月不等)定向向那些网站派出“蜘蛛”程序,扫描该网站的所有网页并将有关信息存入数据库中。
大型商业搜索引擎一般都提供这种功能。
第三节、预处理得到海量的原始网页集合,距离面向网络用户的检索服务之间还有相当的距离。
宏观地看,服务子系统是一个程序。
采用Wirth关于“程序=算法+数据结构”的观点来考察个程序,一个合适的数据结构是查询子系统工作的核心和关键。
这里只是指出:现行最有效的数据结构是“倒排文件”(inverted file);倒排文件是用文档中所含关键词作为索引,文档作为索引目标的一种结构(类似于普通书籍中,索引是关键词,书的页面是索引目标。
)我们在第八章中有进一步分析。
下面讨论从网页集合形成这样的倒排文件过程中的几个主要问题,即我们所说的“预处理”。
主要包括四个方面,关键词的提取,“镜像网页”(网页的内容完全相同,未加任何修改)或“转载网页”(near-replicas,主题内容基本相同但可能有一些额外的编辑信息等,转载网页也称为“近似镜像网页”)的消除,链接分析和网页重要程度的计算。
1. 关键词的提取随便取一篇网页的源文件(例如通过浏览器的“查看源文件”功能),我们可以看到其中情况纷乱繁杂。
除了我们从浏览器中能够正常看到的文字内容外,还有大量的HTML标记。
根据天网统计,网页文档源文件的大小(字节量)通常大约是其中内容大小的4倍(例如 就是如此!)。
另外,由于HTML 文档产生来源的多样性,许多网页在内容上比较随意,不仅文字不讲究规范、完整,而且还可能包含许多和主要内容无关的信息(例如广告,导航条,版权说明等)。
这些情况既给有效的信息查询带来了挑战,也带来了一些新的机遇,在后面的章节将会有进一步的论述。
这里我们只是指出,为了支持后面的查询服务,需要从网页源文件中提取出能够代表它的内容的一些特征。
从人们现在的认识和实践来看,所含的关键词即为这种特征最好的代表。
于是,作为预处理阶段的一个基本务,任就是要提取出网页源文件的内容部分所含的关键词。
对于中文来说,就是要根据一个词Σ典,用一个所谓“切词软件”,从网页文字中切出Σ所含的词语来。
在那之后,一篇网页主要就由一组词来近似代表了,p = {t1, t2, …, tn}。
一般来讲,我们可能得到很多词,同一个词可能在一篇网页中多次出现。
从效果(effectiveness)和效率(efficiency)考虑,不应该让所有的词都出现在网页的表示中,要去掉诸如“的”,“在”等没有内容指示意义的词,称为“停用词” (stop word)。
这样,对一篇网页来说,有效的词语数量大约在200个左右。
2. 重复或转载网页的消除与生俱来的数字化和网络化给网页的复制以及转载和修改再发表带来了便利,因此我们看到Web 上的信息存在大量的重复现象。
天网在2003 年的一次大规模统计分析表明,网页的重复率平均大约为4。
也就是说,当你通过一个URL在网上看到一篇网页的时候,平均还有另外3个不同的URL也给出相同或者基本相似的内容。
这种现象对于广大的网民来说是有正面意义的,因为有了更多的信息访问机会。
但对于搜索引擎来说,则主要是负面的;它不仅在搜集网页时要消耗机器时间和网络带宽资源,而且如果在查询结果中出现,无意义地消耗了计算机显示屏资源,也会引来用户的抱怨,“这么多重复的,给我一个就够了”。
因此,消除内容重复或主题内容重复的网页是预处理阶段的一个重要任务。
3. 链接分析前面提到,大量的HTML标记既给网页的预处理造成了一些麻烦,也带来了一些新的机遇。
从信息检索的角度讲,如果系统面对的仅仅是内容的文字,我们能依据的就是“共有词汇假设”(shared bag of words),即内容所包含的关键词集合,最多加上词频(term frequency或tf、TF)和词在文档集合中出现的文档频率(document frequency或df、DF)之类的统计量。
而TF和DF这样的频率信息能在一定程度上指示词语在一篇文档中的相对重要性或者和某些内容的相关性,这是有意义的。
有了HTML标记后,情况还可能进一步改善,例如在同一篇文档中,<H1>和</H1>之间的信息很可能就比在<H4>和</H4>之间的信息更重要。
特别地,HTML文档中所含的指向其他文档的链接信息是人们近几年来特别关注的对象,认为它们不仅给出了网页之间的关系,而且还对判断网页的内容有很重要的作用。
例如“北大学报”这几个字在北京大学学报社会科学版的主页上是没有的,因此一个仅靠内容文字分析的搜索引擎就不可能返回该主页作为结果。
但是北京大学主页上是用“北大学报(社)”作为链接信息指向了北京大学学报社会科学版的主页。
因此在很好利用链接信息的搜索引擎中应该能返回北京大学学报社会科学版的主页。