zoukankan      html  css  js  c++  java
  • PageRank算法和谷歌搜索讲解

    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,它的第一个元素就是网页1PageRank,它的第二个元素就是网页2PageRank,以此类推....

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

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

  • 相关阅读:
    lvs三种模式的优缺点对比
    linux下的$0-n作用
    图解 HTTP 笔记(一)——了解 Web 及网络基础
    从源码学习使用 node-delegates
    从源码看 Vue 中的 Mixin
    常见 Web 性能优化方式
    解密虚拟 DOM——snabbdom 核心源码解读
    浅谈 JSONP
    代码覆盖率测试及 GitHub 自动化集成
    Redis 学习笔记
  • 原文地址:https://www.cnblogs.com/tszr/p/10050782.html
Copyright © 2011-2022 走看看