PageRank算法和谷歌搜索讲解

吴裕雄

PageRank算法实际上就是Google使用它来计算每个网页价值的算法。 Google每次的搜索结果都有成百上千万甚至上亿个相关的查询网页链接。如果将所有的查询结果不加区分,就立即显示给客户看的话,那么用户很有可能看到的就是一些没有多大用的东西,那么Google也就肯定会遭到淘汰的。

那么如何向用户显示对他们有用的网页链接呢?Google想出了一个办法——就是给那成百上千万个网页计算出一个值。这个值呢就叫做PageRank(页面价值得分)。通过计算这个值呢,可以区分出每个网页价值有多高。下面来认识一下谷歌网页快速响应的问题。

它是如何做到的呢?它其实是通过:倒排索引 这个技术来实现的。它通过全文进行索引,但它对全文进行索引的keyworld,不是文章的全体,而是把文章进行一个分词。举个例子,输入:我是一名学生。进行搜索,它首先将 我 作为一个词,或者把 我是 作为一个词,又或者把 一名 作为一个词,把 学 生 作为一个或两个词,具体怎么分就看谷歌具体的算法了,但谷歌作为一个商业公司,它当然不会把源代码公布了。将所有的词放到一张表中,每个词都对应着一个倒排列表。倒排列表是从查询到的一堆不加区分的网页链接中得来,它是键值对形式的,如 单词 我 这一行 倒排列表中有(3,5),就表示:我 这个词出现在标识号为3的网页,它(我)的具体位置在偏移量为5这个位置。当然它是很长很多的:(3,5)(7,3)....通过索引来查询这些词,是很快的,因为分词的总量不是很多。搜索到词后,在查找那个词的倒排列表,就可以很快找到相关的网页了。顺便说一下:Google它是没有使用任何的数据库的,它的存储是基于系统的文件分布式存储。那Google怎么才能够把高价值的网页显示出给用户呢?Google它是通过PageRank(页面价值得分)来实现的。

Google通过爬虫技术来抓取网页,它所能够知道的信息只能是它获取到的,像某一个站点的点击数这些信息,它是无法知道的,因此不能使用这些看似有用的信息来做判断。那Google它怎么利用它抓取到的信息属性来判断页面的价值的呢?它是通过:网页链接数来进行做运算,通过计算得出的。在抓取到的页面中,如果有一个页面被其它许多的页面指向的话,那么这个页面很有可能就是一个很有价值的页面。反过来,如果一个页面几乎没有一个页面指向它,那么这个页面很有可能就不是一个很重要的页面。所以我们就可以通过一个页面的链接数,来判断它的价值数。但我们不能忽视一个这样的问题:如果某一个页面被某一个国家政府或者机关访问了的话,那么即使它的链接数很少,但它被某个国家或机关关注过的话,那么它也很有可能是一个重要的网页。所以这里有个链接的权值该如何分配的问题。下面来看一下:Google它是怎么来建立一个数学模型来进行计算PageRank的。

假如有四个网页,编号为 1 2 3 4,它们的链接是这样子的:1-->2,1-->4,2-->3,2-->4,3-->4,4-->3,4-->2;那么可以通过一个4*4的矩阵来将这些指向关系表示出了,这个矩阵就是原始矩阵。用S来表示:

怎么得到的,就不做具体说明了。实在看不懂,再问我吧。令谷歌矩阵G=S*a+(1-a)*U*1/n

a取值范围(0,1),它的值主要通过大量的数据运算和经验得出的,由谷歌工程师得出,作用是来调整PageRank这个值的,n是网页数,例子的话,n=4.U是一个全部元素都是1的矩阵。接下来要找到谷歌矩阵G的特征向量q,使得q=G*q,这个特征向量q,它的第一个元素就是网页1的PageRank,它的第二个元素就是网页2的PageRank,以此类推....

那怎么求个q值呢?可以通过迭代的方式求得,先求得q1,再求q2...一直求下去,肯定是可以取得最终的q值的,这个在数学上已经被证明了的。也可以求到一个qn,把这个qn当成是q的一个近似解。PageRank从数学角度来说,就是这么简单,但如果要用计算机来具体算的时候,是根本没有办法算的,因为谷歌一次查询就有成百上千亿个网页,那它的原始矩阵S就是一个成百上千亿乘以成百上千亿,这样的矩阵就算是超级计算机也是处理不了的,而且每天谷歌查询数都是过亿的,那么这些就更多了。谷歌它是通过分布式来计算的,也就是Map-Reduce 和 DFS ,Hadoop也是基于谷歌这种分布式处理数据而被创造出来的。

它主要是将一个个网页分配到一个个节点(服务器或PC)(可以有成百上万个)来进行本地的数据分析和处理,每个节点独立进行计算,最后只是返回一个结果。(具体请参考hadoop Map-Reduce 和HDFS),就这样就可以计算出那个特征向量q了。

PageRank算法和谷歌搜索讲解的更多相关文章

  1. 谷歌PageRank算法

    1. 从Google网页排序到PageRank算法 (1)谷歌网页怎么排序? 先对搜索关键词进行分词,如“技术社区”分词为“技术”和“社区”: 根据建立的倒排索引返回同时包含分词后结果的网页: 将返回 ...

  2. 谷歌pagerank算法简介

    在这篇博客中我们讨论一下谷歌pagerank算法.这是参考的原博客连接:http://blog.jobbole.com/71431/ PageRank的Page可是认为是网页,表示网页排名,也可以认为 ...

  3. [转]PageRank算法

    原文引自: 原文引自: http://blog.csdn.net/hguisu/article/details/7996185 感谢 1. PageRank算法概述 PageRank,即网页排名,又称 ...

  4. PageRank算法--从原理到实现

    本文将介绍PageRank算法的相关内容,具体如下: 1.算法来源 2.算法原理 3.算法证明 4.PR值计算方法 4.1 幂迭代法 4.2 特征值法 4.3 代数法 5.算法实现 5.1 基于迭代法 ...

  5. Machine Learning:PageRank算法

    1. PageRank算法概述 PageRank,即网页排名,又称网页级别.Google左側排名或佩奇排名.         在谷歌主导互联网搜索之前, 多数搜索引擎採用的排序方法, 是以被搜索词语在 ...

  6. 97、PageRank算法学习

    最近由于.......你懂得,需要一些搜索方面的知识,于是乎我重新复习了一下上半年读的那本书<数学之美>Dr吴军老师写的. 感觉读完这种书还是写一下比较好,因为将来说不定就会忘记了. 接下 ...

  7. 基于Neo4j的个性化Pagerank算法文章推荐系统实践

    新版的Neo4j图形算法库(algo)中增加了个性化Pagerank的支持,我一直想找个有意思的应用来验证一下此算法效果.最近我看Peter Lofgren的一篇论文<高效个性化Pagerank ...

  8. 【原创】机器学习之PageRank算法应用与C#实现(2)球队排名应用与C#代码

    在上一篇文章:机器学习之PageRank算法应用与C#实现(1)算法介绍 中,对PageRank算法的原理和过程进行了详细的介绍,并通过一个很简单的例子对过程进行了讲解.从上一篇文章可以很快的了解Pa ...

  9. 【原创】机器学习之PageRank算法应用与C#实现(1)算法介绍

    考虑到知识的复杂性,连续性,将本算法及应用分为3篇文章,请关注,将在本月逐步发表. 1.机器学习之PageRank算法应用与C#实现(1)算法介绍 2.机器学习之PageRank算法应用与C#实现(2 ...

随机推荐

  1. HBase原理和架构

    HBase是什么 HBase在生态体系中的位置 HBase vs HDFS HBase表的特点 HBase是真正的分布式存储,存储级别达到TB级别,而才传统数据库就不是真正的分布式了,传统数据库在底层 ...

  2. Apached+resin服务搭建

    一.前言 Resin是CAUCHO公司的产品,是一个非常流行的支持servlets 和jsp的引擎,速度非常快.对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言 ...

  3. admin源码解析以及仿照admin设计stark组件

    ---恢复内容开始--- admin源码解析 一 启动:每个APP下的apps.py文件中. 首先执行每个APP下的admin.py 文件. def autodiscover(): autodisco ...

  4. 可恶的 0xc0000005异常

    昨天快下班的时候自己写的代码突然跑出了这个异常,,搞的我特别的无语,因为昨天女朋友要过来了,给我出现了这么一个bug,心里很不爽,果断低下班了,另外一个原因就是公司其他人都跑了,每次基本都是我一个人最 ...

  5. 【Eclipse】Eclipse 安装 SVN 插件的三种方法

    最近使用Eclipse时,修改代码总是看不到变化,不知道那个文件修改了,想起了当时开发C++的时候,有相关的插件,于是乎就网搜了下,果然有Eclipse的SVN配置. 接下来,我采用了第二种方式,一起 ...

  6. MySQL----ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

    1.问题描述 在导入同事提供的一个sql文件时候,出现了一个1071错误,总结学习一下: 2.分析问题 错误的字面意思是说mysql字段设置的值太长了,不能大于767个字节,在网上找了一些资料后才知道 ...

  7. 17.docker及scrapy-splash安装-1

    docker 安装网址: https://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ 这就安装成功了!!!

  8. records.config中文详解

    转载:http://www.safecdn.cn/cdn/2018/12/records-config-zh/106.html records.config参数的一些备注 CONFIG proxy.c ...

  9. spring 之 lazy-init Autowired depends-on

    1 lazy-init lazy-init是延迟初始化的意思. spring中容器都是尽早的创建和配置所有的单例bean,因此当容器在启动时,就会去配置和创建单例bean.  默认情况下 beans ...

  10. centos限制用户使用部分命令

    参考网:https://access.redhat.com/solutions/65822# 环境 Red Hat Enterprise Linux 5 Red Hat Enterprise Linu ...