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. samba安装

    第一步下载: wget https://download.samba.org/pub/samba/stable/samba-4.6.7.tar.gz 看了下没看到啥有用的直接安装: ./configu ...

  2. 怎样找到微信小程序功能呢?

    怎样找到微信小程序功能呢? 17年1月9号这个功能刚推出时,非常火,但我在微信中迟迟找不到微信小程序功能,微信明明更新到了最新版也没有:后来经过以下步骤才找到这个功能! 1.微信版本不能过低,这个一般 ...

  3. Kafka分布式集群部署

    这个是kafka的官网地址:http://kafka.apache.org/ 1.kafka是一个消息系统. 2.kafka对流数据可以高效的实时处理. 3.分布式集群的环境下能够保证数据的安全. k ...

  4. solr如何让全词匹配结果在最前面

    在全文搜索中默认排序是按照匹配度权值score排序的,权值越大位置越靠前,那为什么有很多时候全词匹配反而不在最前面那,其实很简单因为全词匹配权值也就是100,但是还有很多权值大于100的排在了前面. ...

  5. SQL Server 查询性能优化——创建索引原则(一)

    索引是什么?索引是提高查询性能的一个重要工具,索引就是把查询语句所需要的少量数据添加到索引分页中,这样访问数据时只要访问少数索引的分页就可以.但是索引对于提高查询性能也不是万能的,也不是建立越多的索引 ...

  6. mysql千万级数据库插入速度和读取速度的调整记录

    一般情况下mysql上百万数据读取和插入更新是没什么问题了,但到了上千万级就会出现很慢,下面我们来看mysql千万级数据库插入速度和读取速度的调整记录吧. 1)提高数据库插入性能中心思想:尽量将数据一 ...

  7. 关于W8.1不能安装VS2015(包括2017等)

    电脑本来是W7 64位+OPENCV3.1,今天突然系统崩溃了,然后感觉W7过时了遇到很多问题直接系统崩溃还得了啊,干脆装了一个W8.1了. 好吧~~本来想直接说问题的,干脆先把装系统给记录一下--& ...

  8. Python——列表深浅拷贝

    一.深浅拷贝 如果希望将列表复制一份,通过列表的内置方法copy就可以实现: s = [[1,2],3,4] s1 = s.copy() print(s) print(s1) 拷贝出的列表s1与原列表 ...

  9. 面向对象epoll并发

    面向对象epoll # -*- coding: utf-8 -*- import socket import selectors import re import sys HTML_ROOT = &q ...

  10. 安装Anaconda3进行python版本管理

    1.下载Anaconda3,我选择了python3的64位版本 2.windows安装,选择加入了系统目录 3.进入命令行进行版本安装 // 安装一个指定版本conda create --name p ...