搜索引擎核心技术入门

今天刚把《这就是搜索引擎.技术核心详解》一书看完,趁着还有点印象,做一个简单的综述。

先从一个宏观的角度来认识一下搜索引擎的架构是怎样的。

简单来讲,可以将搜索引擎的工作流程分为两部分,一个用户主导的前端级,另外一个是服务器主导的后台级。前端级主要负责发送查询需求并分析,接受搜索结果并排序的功能的这两个功能。当然这只是广义的用户级,因为这只是针对于大型的存储与计算平台来讲的,在图中体现为index files。后台则是主要囊括信息的搜集以及信息的处理,当然在实现这两个简单的功能的时候,涉及众多的技术,比如网络爬虫,网页去重,反,链接分析等


网络爬虫

网络爬虫很好理解,就像它的名称一样,作为一个程序,它一直在按着某种规则在互联网中扒取网页,而最终扒取下来的网页信息就会使用到建立索引中。


当然作为一个搜索引擎的网络引擎,他的网络爬虫性能必须非常优秀。如果网络爬虫扒取的网页质量很差,速度很慢的话,将会直接影响建立起来索引的质量,最终导致用户体现差等悲观结局。而网络爬虫为体现其高性能,必须在扒取策略上设计得很高效,为此爬虫在遍历网页的时候,有宽度优先遍历策略,非完全PageRank策略,OPIC策略,大站优先策略等。另外由于爬虫扒取的网页是静态的,但是实际上网页是在动态更新的,为达到动态更新的目的,搜索引擎需要对扒取结果以某个时间段周期进行校验。更有难者,那就是网络爬虫需要对暗网进行扒取,也就是爬虫需要对一般爬虫不能识别的信息作出判断并智能地扒取。


以上讲述了网络爬虫的健壮体现,而在搜索引擎种,一个好的网络爬虫还需要体现出一定的友好性,比如:一个网络需要保证站内信息的私密性,另一方面不能接受太多数量的网络爬虫访问以免承受大量的网络负载,影响网站负荷。因此,网络爬虫需要遵循一定的爬虫禁爬协议。


索引基础

搜索引擎的索引其实就是单词和文档矩阵的具体数据结构,其中比较基础的有倒排索引。倒排索引主要是将文档集合中每个文档进行分析,然后将整个文档集合进行单词分析,比如得到“计算机”这个单词出现在文档1和文档5中,最终得到一个(单词与(出现该单词的文档集合)的列表),即倒排索引。当然在实际情况下,这个列表的存储是很有讲究的,因为像搜索引擎的列表数量级很大,必须采用高效的数据结构来实现效率查询。


在这里,我首先想说的是,搜索引擎不会是本科期间那种程序只要实现功能的简单存在,而是时时刻刻都应该以效率为主导来涉及代码等。所以在建立索引的时候,需要涉及一些效率可以接受的方法,如:两遍文档遍历法,排序法,归并法。当建立其索引后,还需要实现一个功能,那就是索引应该可以动态改变,以适应互联网中网页的不断更新。除此之外当然无数的技术问题,这里作为概述就不一一道来。


检索模型

大家可以想象,在理论上,网络爬虫是可以扒取尽可能多的网页的,那么可以假设信息量够大。另外,有了信息,通过优秀的索引完成网页处理。那么最终用户就可以来进行信息查询了。在这里,如何把用户输入的查询需求转变为相关性较高的信息找出来,就成为一个搜索引擎是否成功的评价标准。这一部分内容是我看的最仔细的,因为中间涉及的信息提取不再是一成不变的,而是需要建立模型来不断完善结果,其中需要一些数学基础的辅佐。在这一部分,可以看到搜索引擎的大致发展,从简单到复杂,从粗略到精细。


首先是布尔模型。布尔模型的提出比较简单易实现,但是比较粗略。它的主要思想是一个文档与某个关键词的相关性,只有两种可能,那就是相关/不相关,而忽略了用户需要与其他关键词内在的联系。


除了布尔模型,向量空间模型则在相关性方面考虑得更多。它引入了关键词的权重,使关键词在文档中的出现变得更加客观,同时它还对长文档进行了一些规范化操作,使得长文档并不会在查询结果种占据绝对优势。其中有一个概念:cosine相似性,该概念主要通过几何的方法来计算相似性。


然而效果更佳的模型是概率检索模型。该模型以两个假设出发:1.二元假设;2.词汇独立假设。从而通过一系列的数学运算,获得最终相似性的计算值。在这个地方,我认为结果不重要,但是这种将需求通过建模转化为数学结果来表示的思维很值得大家学习。然后,这个模型的改进使得自身更完善,即引入了经验参数,查询权重等。


其实检索模型里面还有机器学习方法,训练集学习,从而应用到实际。


链接分析

链接分析主要针对于网页链接,因为网页链接是网页间相似度高的体现,所以好的搜索引擎必须将网页链接考虑进自身的设计。最简单的模型是随即游走模型,也就是在一个网页中出现不论多少链接,都是随即进入链接,记入链接的网页后再随即进入,以此循环。更好的模型有子集传播模型,首先有一个可以信任的相关性高的子集,然后在这个子集上进行链接传播。这里有赫赫有名的PageRank算法,HITS算法,SALSA算法,Hilltop算法。总而言之就是更加客观的引入链接的网页。


云存储

在了解了搜索引擎的架构之后,大家肯定会对爬虫扒取信息的存储感到吃惊。在这里,搜索引擎的存储是狭义的云存储,而不是虚拟化云计算概念。以Google的云存储和云计算架构为例,大家可以见识到,面对几乎难以想象的数据量,google是如何使用分布式技术实现数据的有效存储。其中GFS,BigTable,Map/reduce三架马车各自扮演了不可忽略的作用。


网页反

网页反的出现,是因为搜索的相关性大意味着访问量的大,而大的访问量意味着商机乃至广告的渗入。

反的主要技术思路可以为以下三种方法:信任传播模型,不信任模型和异常发现模型。其中信任模型主要是先确定一个可信任的网页集,然后通过这个集合再进行一定深度的传播。不信任模型也是这个原理。而异常发现模型主要是对网页进行特征提取,然后形成一个特征,然后用这个特性来判别网页的与否。