当前位置: 首页 > news >正文

什么是Page Rank及其由来 – Google 的民主表决式网页排名技术

谈 Page Rank – Google 的民主表决式网页排名技术



大家可能听说过,Google 革命性的发明是它名为 “Page Rank” 的网页排名算法,这项技术彻底解决了搜索结果排序的问题。其实最先试图给互联网上的众多网站排序的并不是 Google。 Yahoo! 公司最初第一个用目录分类的方式让用户通过互联网检索信息,但由于当时计算机容量和速度的限制,当时的 Yahoo! 和同时代的其它搜索引擎都存在一个共同的问题: 收录的网页太少,而且只能对网页中常见内容相关的实际用词进行索引。那时,用户很难找到很相关信息。我记得 1999 年以前查找一篇论文,要换好几个搜索引擎。后来 DEC 公司开发了 AltaVista 搜索引擎,只用一台 ALPHA 服务器,却收录了比以往引擎都多的网页,而且对里面的每个词进行索引。AltaVista 虽然让用户搜索到大量结果,但大部分结果却与查询不太相关,有时找想看的网页需要翻好几页。所以最初的 AltaVista 在一定程度上解决了覆盖率的问题,但不能很好地对结果进行排序。

Google 的 “Page Rank” (网页排名)是怎么回事呢?其实简单说就是民主表决。打个比方,假如我们要找李开复博士,有一百个人举手说自己是李开复。那么谁是真的呢?也许有好几个真的,但即使如此谁又是大家真正想找的呢?:-) 如果大家都说在 Google 公司的那个是真的,那么他就是真的。

在互联网上,如果一个网页被很多其它网页所链接,说明它受到普遍的承认和信赖,那么它的排名就高。这就是 Page Rank 的核心思想。 当然 Google 的 Page Rank 算法实际上要复杂得多。比如说,对来自不同网页的链接对待不同,本身网页排名高的链接更可靠,于是给这些链接予较大的权重。Page Rank 考虑了这个因素,可是现在问题又来了,计算搜索结果的网页排名过程中需要用到网页本身的排名,这不成了先有鸡还是先有蛋的问题了吗?

Google 的两个创始人拉里•佩奇 ( Larry Page )和谢尔盖•布林 ( Sergey Brin) 把这个问题变成了一个二维矩阵相乘的问题,并且用迭代的方法解决了这个问题。他们先假定所有网页的排名是相同的,并且根据这个初始值,算出各个网页的第一次迭代排名,然后再根据第一次迭代排名算出第二次的排名。他们两人从理论上证明了不论初始值如何选取,这种算法都保证了网页排名的估计值能收敛到他们的真实值。值得一提的事,这种算法是完全没有任何人工干预的。

理论问题解决了,又遇到实际问题。因为互联网上网页的数量是巨大的,上面提到的二维矩阵从理论上讲有网页数目平方之多个元素。如果我们假定有十亿个网页,那么这个矩阵 就有一百亿亿个元素。这样大的矩阵相乘,计算量是非常大的。拉里和谢尔盖两人利用稀疏矩阵计算的技巧,大大的简化了计算量,并实现了这个网页排名算法。今天 Google 的工程师把这个算法移植到并行的计算机中,进一步缩短了计算时间,使网页更新的周期比以前短了许多。

我来 Google 后,拉里 (Larry) 在和我们几个新员工座谈时,讲起他当年和谢尔盖(Sergey) 是怎么想到网页排名算法的。他说:"当时我们觉得整个互联网就像一张大的图 (Graph),每个网站就像一个节点,而每个网页的链接就像一个弧。我想,互联网可以用一个图或者矩阵描述,我也许可以用这个发现做个博士论文。" 他和谢尔盖就这样发明了 Page Rank 的算法。

网页排名的高明之处在于它把整个互联网当作了一个整体对待。它无意识中符合了系统论的观点。相比之下,以前的信息检索大多把每一个网页当作独立的个体对待,很多人当初只注意了网页内容和查询语句的相关性,忽略了网页之间的关系。

今天,Google 搜索引擎比最初复杂、完善了许多。但是网页排名在 Google 所有算法中依然是至关重要的。在学术界, 这个算法被公认为是文献检索中最大的贡献之一,并且被很多大学引入了信息检索课程 (Information Retrieval) 的教程。

转载于:https://www.cnblogs.com/core/archive/2007/07/03/804648.html

相关文章:

  • 利用BCP导入数据到SQL中
  • Windows Mobile 5.0模拟器用ActiveSync来使用PC机的网络
  • More than meets the eye
  • CEO十五条法则 (是基于对CEO更加的关怀)
  • java和c#企业开发
  • SQL SERVER数据库开发之存储过程应用(转)
  • 关于数字的智力测试
  • Ettercap-交换环境下的嗅探器使用方法
  • 闲话时间调度算法
  • 搜索引擎技术文章
  • Lucene.net 实现全文搜索(转)
  • [文摘20071010]没女
  • 用XML和SQL 2000来管理存储过程调用
  • SharePoint Server 2007 页面模型
  • GridView
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • gf框架之分页模块(五) - 自定义分页
  • Java精华积累:初学者都应该搞懂的问题
  • js写一个简单的选项卡
  • php ci框架整合银盛支付
  • react-native 安卓真机环境搭建
  • 从零开始的无人驾驶 1
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 飞驰在Mesos的涡轮引擎上
  • 分布式事物理论与实践
  • 计算机在识别图像时“看到”了什么?
  • 检测对象或数组
  • 数据可视化之 Sankey 桑基图的实现
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 智能合约开发环境搭建及Hello World合约
  • 《码出高效》学习笔记与书中错误记录
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​第20课 在Android Native开发中加入新的C++类
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (04)odoo视图操作
  • (2)nginx 安装、启停
  • (2)STL算法之元素计数
  • (超详细)语音信号处理之特征提取
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (汇总)os模块以及shutil模块对文件的操作
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (状压dp)uva 10817 Headmaster's Headache
  • .axf 转化 .bin文件 的方法
  • .a文件和.so文件
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET 4.0中的泛型协变和反变
  • .NET C#版本和.NET版本以及VS版本的对应关系