《数学之美》阅读笔记之Google搜索技术浅析

博主虽然学计算机出身,惭愧的是对计算机的许多方向都不了解。决定从现在开始,多读书,对各个方向都看一看。刚看完数学之美这本书,介绍了许多数学原理在计算机行业的应用。博主想简单总结一下,本篇主要围绕搜索引擎技术来介绍。

当我们在Google搜索框里面打一个词时,Google可以立即返回全网的搜索结果。这看似简单的背后,其实有着很复杂的处理过程。能够这么快的返回查询结果,依赖于搜索引擎对全网知识所做的预处理。这个预处理就是网络爬虫和索引表。索引表类似于书本的目录,根据目录,可以迅速找到某些内容所在的页码。索引表存储的是从关键词到所在网页的映射关系。很容易想到,全网有着数亿计的网页数目,这个索引一定十分巨大。而且,每个关键字也对应着的许多网页,这就构成了我们在搜索引擎里输入一个词时的候选网页集合。当我们输入多个词时,会得到多个集合,它们的交集自然就是包含了所有关键字的候选网页。

1.爬虫

那么,索引表是如何产生的呢?互联网有着庞大的网页数目,而且网页信息是每天都在变的,怎么收集这么多网页信息呢?完成这个功能的部件一般称为网络爬虫。整个互联网可以用一个巨大的图来描述,每个网页都是其中一个节点,网页之间的链接可以描述为节点之间的边。网络爬虫的作用就是遍历整个图,收集信息。 假定以qq.com作为入口,爬虫首先采集该网页上的关键字信息,然后分析该页面直接链接出的所有网页,例如tech.qq.com, house.qq.com, jd.com等。接下来,从这些网页出发,又可以链接到更多的网页。重复这个过程,计算机就可以下载整个互联网的信息。爬虫一词比较形象的描述了这个过程。考虑到全网巨大的数据量,网页动态更新等问题,实际搜索引擎中的爬虫比这个复杂得多。

2.PageRank

根据索引表查询出来的候选集还不能直接返回给用户,虽然它可以包含了用户查找的所有关键字,但是网页质量参差不齐。网页质量是一个非常影响搜索结果体验的因素。Google一出来就能迅速占领搜索市场的一个很重要的因素就是它的返回的网页是根据质量排名的,用户能够很容易找到想要的结果。那么,网页质量该如何评价呢?Google在这一方面作出了革命性的贡献,这就是它的PageRank算法。PageRank的基本原理有两点:

(1)如果一个网页被很多其他网页链接,那么这个网页肯定是比较可靠和普遍信任的。就像是在淘宝上买东西一样,如果某个商品有大量人推荐,我们很容易相信它是比较靠谱的。

(2)如果一个可靠性较高的网页指向了另外一个网页,那么这另外一个网页也是比较可靠的。这就是所谓的名人推荐效应。名人代言一个广告,肯定比无名小辈好。

下面是来自wikipedia的一张图。图中ABCDEF均表示网页,球的大小表示了网页质量。从图中可以看出,指向B和E的网页均较多,因而B和E排名较高。另外,虽然指向C的网页很少,但是有排名较高的B指向了C,因而C的得分也比较高,排名甚至比E还好。

那么,如何计算PageRank呢?因为,一个网页的排名是依赖于指向它的网页的,所以很适合于用迭代法计算。假定初始条件下,N个网页的PageRank值都是1/N。如果网页k指向了n个网页,那么将k的PageRank值平摊给这n个网页。一个网页的PageRank取它所分得的所有平摊值的和。重复迭代计算直到结果收敛。上面只描述了一个简单的PageRank值的计算思路。事实上,网页之间的权值可以前很多比较复杂的计算办法。在实际应用中,网页数量也是一个巨大的数字,所以计算量大得难以估计。

3.网页相关性

在评估了网页质量后,下面就是如何度量网页和关键词相关性的问题了。使用过搜索引擎的人都知道,返回结果如果不是我想要的会令人非常恼火。一个简单的想法是,包含了关键词数量越多的网页,相关性就越大。这样,确实可以找到包含关键词数量比较多的网页,不过有一个漏洞,很明显,内容较长的网页很占便宜。所以,进一步的,可以考虑用关键词出现的频率作为比较依据,即搜索关键词数量除以文章的总词数,这个通常被称作单文本词频(Term Frequency)。如果一个查询包含了n个关键词,那么相关性可以用TF1+TF2+...+TFn来衡量。

进一步的,上述方法还有一个漏洞。比较“数学”和“勾股定理”两个词,数学更难识别,因为包含数学的网页数量较多,相反,包含“勾股定理”的网页就要少好多,更易于识别。因而,需要给每个词设置一个权重。如果这个词易于确定搜索主题,就给一个较大的权重。例如,“勾股定理”限定了网页的内容,相对的,数学这个词描述的内容则太宽泛了。根据统计经验,如果一个词出现过的网页数量越多,那么它越难锁定网页,它对应的权重应该较小。相反的,如果一个词在网页中很少出现,那么它很容易锁定搜索目标,这样权重就越大。在信息检索中,通常使用逆文本频率指数(Inverse
Documentary Frequency,简写为IDF)来描述这个权重,这的值为log(D/Dw),其中D是全部网页数,Dw是单词w出现过的网页数目。如果一个词在所有网页中均出现,即Dw=D,那么这的IDF=log(1/1)=0,很好理解,它对于筛选搜索结果没有任何帮助。

这样,如果一个搜索结果有n个词,那么其网页相关性可以计算为TF1*IDF1+TF2*IDF2+...+TFn*IDFn。TF-IDF被公认为信息检索中最重要的发明。在搜索、文献分类等领域都有着广泛的应用。

关于搜索引擎的介绍,就说这么多。搜索引擎是一个非常复杂的系统,有许多值得深入研究的问题。例如,在全网这么大规模的数据量下,索引表该如何设计,爬虫怎么收集全网信息,怎么实时监测网页动态变化,PageRank中有没有更靠谱的权重计算方法,这些系统在分布式平台下如何实现等。当然,这些还是需要有实际工作经验的人来回答了。博主并不是专业做搜索引擎的,只能简单的概括一下了。

时间: 2024-10-12 21:08:27

《数学之美》阅读笔记之Google搜索技术浅析的相关文章

数学之美-阅读笔记

吴军的这本数学之美从google黑板报到实体书出版应该说一直都是比较火的,吴军博士作为早期加入google的那帮人,一直在搞搜索引擎的方向,除了本身是大牛还跟很多大牛一起共事过,眼界.见识.思维高度也不是一般人能比的.下面是一些凌乱的总结. 1.整个信息论的基础就是数学.如果往更远看,我们自然语言和文字的起源背后都受着数学规律的支配. 2.人们生活的经验作为一种特定的信息,其实是那个时代最宝贵的财富.(读者注:其实现在也是!) 3.信息冗余是信息安全的保障. 4.事实上,他们全靠的是数学,更准确

架构之美阅读笔记01

初识架构,什么是架构,架构美在何处?不同领域的设计师对架构的理解大相径庭:软件架构师对一个好的架构的要求诸如对用户友好,响应及时,易维护,没有重大错误,易安装,可靠性高,可通过标准的方式同其他系统通信等等特点.通过进一步深入了解,更加深了对架构和架构之美的了解. "建造的艺术或科学,特别是设计和建造人类使用的建筑时的艺术或实践,同时考虑到美学因素和实用因素."架构是提供一种特定的方式来解决共同的问题,这种方式具有实用性和美学性:架构是美观.坚固.实用三个方面的平衡配合.好的系统架构展示

架构之美阅读笔记之五

今天我学习的是架构之美的第五章--面向资源的架构:在web中.这一章,作者讲述说明了,企业中聚焦信息的架构展示了雨web一样的特点:伸缩性,弹性,架构歉意策略,信息驱动和访问控制等. Web服务的目标是提供建立可复用的业务服务基础的架构,希望能在不影响客户的情况下在各个地方以不同的编程语言异步地访问所有的功能,但是为了实现这个目标所用的技术组合使人感到迷惑,而且没有真正解决实际中组织机构的架构所面临的问题,,出现了一些服务恶化的问题. 面向资源的架构的标识是向命名的资源发起逻辑请求的过程,这些请

架构之美阅读笔记之三

今天我学习的是架构之美的第三章--伸缩性架构设计.这一张也是涉及到了第二部分,企业级用用架构.首先我们要引出,伸缩性架构设计,也就是为什么要伸缩性的架构.主要原因是,我们在设计系统架构Ⅹ,要确保系统在伸缩时的弹性.为了适应使用软件架构的不同应用程序,使用该架构的程序员等,软件系统架构必须要具有伸缩性. 要是系统架构是伸缩性的,则系统应该是分布式的,并发的.就像书中讲到的Darkstar项目,由于在线人数,不同时间等的影响,游戏的负载情况也会不同,服务器的数量,连接方式,为了应对这些不同的情况,也

架构之美阅读笔记02

第三章伸缩性构架设计 本章的重点是怎样确保系统在伸缩时的弹性.因为访问量的不稳定,所以伸缩性显得尤为重要.而在虚拟世界中伸缩性的问题进一步复杂化.伸缩性设计的背景就是游戏的开发和发行,玩家的交互,玩家的对电脑的要求.并发的芯片比更高时钟速度的芯片更容易开发.游戏中玩家的交互只和少部分人发生交互.所以这也适合并发. 我们的首要目标就是把一台单机运行一个单线程部署到多线程和多台计算机上应该由基础设施来考虑.游戏世界始于一个很胖的客户端(具有强大功能的pc),所有数据尽量放在客户端.服务器尽量保持简单

架构之美阅读笔记五

第十一章解释了一组非常简单的组件和一门扩展语言如何将一个不起眼的文本编辑器编程了一个操作系统,成为程序员工具箱中的瑞士军刀:第十二章展示了冲刺和统计评审这样的社区过程如何帮助软件架构从简单的骨架演变为美丽的系统. 第十一章为我们展示了GNU Emacs的故事:滋长的特性是其优势.首先我认识到了Emacs是什么.它和我们经常使用的其他文本编辑器类似,当我们用Emacs打开一个文件时,将弹出一个窗口,并显示出该文件的内容,我们可以对其内容进行修改,然后保存这些修改后退出.Emacs架构所采用的是在交

架构之美阅读笔记四

首先要确定系统的功能和约束,也就是,它必须做什么以及在什么限制条件下工作,这样也就确定了问题空间.接下来我们要了解事实,重要问题和架构的关注点.确定工作流也是一个极为重要的步骤,来自于我们对于如何划分系统的考虑. 系统架构常见的关注点有,功能性:产品向特的用户提供哪些功能?可变性:软件将来可能需要哪些改变?性能:产品将达到怎样的性能?容量:多少用户可以并发使用该系统?该系统将为用户保存多少数据?生态系统:在不是的生态环境中,该系统将于其他系统进行哪些交互?模块化:如何将编写软件的任务分解为工作指

架构之美阅读笔记六

一个好的架构的形成不仅是架构师的功劳,还有团队的集体合作,主要因素:确实进行有意为之的前端设计:设计者有很好的素质和经验:在开发过程中,保持清晰的设计观点:授权团队负责软件的整体设计:不要害怕改变设计:让合适的人加入到团队中,让团队保持健康的工作关系:在合适的时候做出决定:好的项目管理和合适的最后期限. 在后来介绍架构伸缩性的时候以常见的在线游戏的设计为例,这类软件对系统的伸缩性要求很高,要能实时伸缩,减少延时.随即提出了两种解决方案:分区和基于地理位置,每个地理区域的玩家运行在一台服务器上.

架构之美阅读笔记06

大多数系统核心的是数据,而不是算法.用户不会接触QuickSort,而是去访问一个数据仓库.数据推动了用户喜欢的产品,所以架构师围绕数据创建了其余的传统"n层"软件站.Facebook即是一个围绕数据建立架构的例子."Facebook社会关系网站"在概念上是一个标准的"n层"栈,用户的请求会从Facebook的内部库中取出数据,然后通过Facebook的逻辑进行转换,最后通过Facebook的界面输出.本章向读者展示了Facebook以一种受控的