PageRank算法 到 textRank

article/2025/9/25 19:25:01

1. PageRank算法概述

        PageRank,网页排名,又称网页级别Google左侧排名或佩奇排名。

        是Google创始人拉里·佩奇和谢尔盖·布林于1997年构建早期的搜索系统原型时提出的链接分析算法,自从Google在商业上获得空前的成功后,该 算法也成为其他搜索引擎和学术界十分关注的计算模型。目前很多重要的链接分析算法都是在PageRank算法基础上衍生出来的。PageRank是 Google用于用来标识网页的等级/重要性的一种方法,是Google用来衡量一个网站的好坏的唯一标准。在揉合了诸如Title标识和 Keywords标识等所有其它因素之后,Google通过PageRank来调整结果,使那些更具“等级/重要性”的网页在搜索结果中另网站排名获得提 升,从而提高搜索结果的相关性和质量。其级别从0到10级,10级为满分。PR值越高说明该网页越受欢迎(越重要)。例如:一个PR值为1的网站表明这个 网站不太具有流行度,而PR值为7到10则表明这个网站非常受欢迎(或者说极其重要)。一般PR值达到4,就算是一个不错的网站了。Google把自己的网站的PR值定到10,这说明Google这个网站是非常受欢迎的,也可以说这个网站非常重要。

 

2. 从入链数量到 PageRank

        在PageRank提出之前,已经有研究者提出利用网页的入链数量来进行链接分析计算,这种入链方法假设一个网页的入链越多,则该网页越重要。早期的很多搜索引擎也采纳了入链数量作为链接分析方法,对于搜索引擎效果提升也有较明显的效果。 PageRank除了考虑到入链数量的影响,还参考了网页质量因素,两者相结合获得了更好的网页重要性评价标准。
对于某个互联网网页A来说,该网页PageRank的计算基于以下两个基本假设:
l    数量假设:在Web图模型中,如果一个页面节点接收到的其他网页指向的入链数量越多,那么这个页面越重要。
l    质量假设指向页面A的入链质量不同,质量高的页面会通过链接向其他页面传递更多的权重。所以越是质量高的页面指向页面A,则页面A越重要。
       利用以上两个假设,PageRank算法刚开始赋予每个网页相同的重要性得分,通过迭代递归计算来更新每个页面节点的PageRank得分,直到得分稳定为止。 PageRank计算得出的结果是网页的重要性评价,这和用户输入的查询是没有任何关系的,即算法是主题无关的。假设有一个搜索引擎,其相似度计算函数不考虑内容相似因素,完全采用PageRank来进行排序,那么这个搜索引擎的表现是什么样子的呢?这个搜索引擎对于任意不同的查询请求,返回的结果都是相同的,即返回PageRank值最高的页面。

 

3. PageRank算法原理

      PageRank的计算充分利用了两个假设:数量假设质量假设。步骤如下:
      1)在初始阶段网页通过链接关系构建起Web图,每个页面设置相同的PageRank值,通过若干轮的计算,会得到每个页面所获得的最终PageRank值。随着每一轮的计算进行,网页当前的PageRank值会不断得到更新。

      2)在一轮中更新页面PageRank得分的计算方法:在一轮更新页面PageRank得分的计算中,每 个页面将其当前的PageRank值平均分配到本页面包含的出链上,这样每个链接即获得了相应的权值。而每个页面将所有指向本页面的入链所传入的权值求和,即可得到新的PageRank得分。当每个页面都获得了更新后的PageRank值,就完成了一轮PageRank计算。 

 

3.2 基本思想:

       如果网页T存在一个指向网页A的连接,则表明T的所有者认为A比较重要,从而把T的一部分重要性得分赋予A。这个重要性得分值为:PR(T)/L(T)

     其中PR(T)为T的PageRank值,L(T)为T的出链数

        则A的PageRank值为一系列类似于T的页面重要性得分值的累加。

        即一个页面的得票数由所有链向它的页面的重要性来决定,到一个页面的超链接相当于对该页投一票。一个页面的PageRank是由所有链向它的页面(链入页面)的重要性经过递归算法得到的。一个有较多链入的页面会有较高的等级,相反如果一个页面没有任何链入页面,那么它没有等级。

3.3 PageRank简单计算:

       假设一个由只有4个页面组成的集合:A,B,C和D。如果所有页面都链向A,那么A的PR(PageRank)值将是B,C及D的和。

      

       继续假设B也有链接到C,并且D也有链接到包括A的3个页面。一个页面不能投票2次。所以B给每个页面半票。以同样的逻辑,D投出的票只有三分之一算到了A的PageRank上。

      

      换句话说,根据链出总数平分一个页面的PR值。

      

例子:

        如图1 所示的例子来说明PageRank的具体计算过程。  

                           

       

 

3.4  修正PageRank计算公式:

         由于存在一些出链为0,也就是那些不链接任何其他网页的网, 也称为孤立网页,使得很多网页能被访问到。因此需要对 PageRank公式进行修正,即在简单公式的基础上增加了阻尼系数(dampingfactor)q, q一般取值q=0.85。

      其意义是,在任意时刻,用户到达某页面后并继续向后浏览的概率。 1-q= 0.15就是用户停止点击,随机跳到新URL的概率)的算法被用到了所有页面上,估算页面可能被上网者放入书签的概率。

      最后,即所有这些被换算为一个百分比再乘上一个系数q。由于下面的算法,没有页面的PageRank会是0。所以,Google通过数学系统给了每个页面一个最小值。

     

     这个公式就是.S Brin和 L. Page 在《The Anatomy of aLarge- scale Hypertextual Web Search Engine Computer Networks and ISDN Systems 》定义的公式。

     所以一个页面的PageRank是由其他页面的PageRank计算得到。Google不断的重复计算每个页面的PageRank。如果给每个页面一个随 机PageRank值(非0),那么经过不断的重复计算,这些页面的PR值会趋向于正常和稳定。这就是搜索引擎使用它的原因。

 

4. PageRank幂法计算(线性代数应用)

4.1 完整公式:

关于这节内容,可以查阅:谷歌背后的数学

首先求完整的公式:

Arvind Arasu 在《Junghoo Cho Hector Garcia - Molina, Andreas Paepcke, SriramRaghavan. Searching the Web》 更加准确的表达为:

 

是被研究的页面,是链入页面的数量,是链出页面的数量,而N是所有页面的数量。

PageRank值是一个特殊矩阵中的特征向量。这个特征向量为:

 

R是如下等式的一个解:

如果网页i有指向网页j的一个链接,则

否则=0。

4.2 使用幂法求PageRank

      那我们PageRank 公式可以转换为求解的值,

      其中矩阵为 A = q  × P + ( 1 一 q) * /N 。 P 为概率转移矩阵,为 n  维的全 1 行. 则 =

     

     幂法计算过程如下:
      X  设任意一个初始向量, 即设置初始每个网页的 PageRank值均。一般为1.

     R = AX;

     while  (1 )(

           if ( l X - R I  <  ){ //如果最后两次的结果近似或者相同,返回R

                 returnR;

          }    else   {

               X =R;

              R = AX;

         }

    }

4.3 求解步骤:

一、 P概率转移矩阵的计算过程:

        先建立一个网页间的链接关系的模型,即我们需要合适的数据结构表示页面间的连接关系。

      1) 首先我们使用图的形式来表述网页之间关系:

       现在假设只有四张网页集合:A、B、C,其抽象结构如下图1:

       

                                   图1 网页间的链接关系

      显然这个图是强连通的(从任一节点出发都可以到达另外任何一个节点)。

      2)我们用矩阵表示连通图:

       用邻接矩阵 P表示这个图中顶点关系 ,如果顶(页面)i向顶点(页面)j有链接情况 ,则pij  =   1 ,否则pij   =   0 。如图2所示。如果网页文件总数为N , 那么这个网页链接矩阵就是一个N x N  的矩 阵 。 

      3)网页链接概率矩阵

       然后将每一行除以该行非零数字之和,即(每行非0数之和就是链接网个数)则得到新矩阵P’,如图3所示。 这个矩阵记录了 每个网页跳转到其他网页的概率,即其中i行j列的值表示用户从页面i 转到页面j的概率。图1 中A页面链向B、C,所以一个用户从A跳转到B、C的概率各为1/2。

      4)概率转移矩阵P

       采用P’ 的转置矩 阵进行计算, 也就是上面提到的概率转移矩阵P 。  如图4所示:

     

           

         图2  网页链接矩阵:                                     图3  网页链接概率矩阵:  

 

 

                        图4  P’ 的转置矩 阵

 

二、 A矩阵计算过程。


      1)P概率转移矩阵  :

      

      2)/N 为:

    

      3)A矩阵为:q  × P + ( 1 一 q) * /N = 0.85  × P + 0.15  */N

    

      初始每个网页的 PageRank值均为1 , 即X~t = ( 1 , 1 , 1 ) 。 

三、 循环迭代计算PageRank的过程

      第一步:

       

          因为X 与R的差别较大。继续迭代。

          第二步:

          

       继续迭代这个过程...

      直到最后两次的结果近似或者相同,即R最终收敛,R 约等于X,此时计算停止。最终的R 就是各个页面的 PageRank 值。

用幂法计算PageRank 值总是收敛的,即计算的次数是有限的。

 

      Larry Page和Sergey Brin 两人从理论上证明了不论初始值如何选取,这种算法都保证了网页排名的估计值能收敛到他们的真实值。

      由于互联网上网页的数量是巨大的,上面提到的二维矩阵从理论上讲有网页数目平方之多个元素。如果我们假定有十亿个网页,那么这个矩阵就有一百亿亿个元素。这样大的矩阵相乘,计算量是非常大的。Larry Page和Sergey Brin两人利用稀疏矩阵计算的技巧,大大的简化了计算量。

 

5. PageRank算法优缺点

优点

        是一个与查询无关的静态算法,所有网页的PageRank值通过离线计算获得;有效减少在线查询时的计算量,极大降低了查询响应时间。

缺点:

       1)人们的查询具有主题特征,PageRank忽略了主题相关性,导致结果的相关性和主题性降低

        2)旧的页面等级会比新页面高。因为即使是非常好的新页面也不会有很多上游链接,除非它是某个站点的子站点。

TextRankPageRank关键词提取算法

本文主要用于实现使用TextRank算法的关键字提取

TextRank是PageRank算法的变种,用于文本关键字 关键句的提取

主要参考为原作者Rada Mihalcea论文《TextRank:Bring Order into texts》

整个算法步骤:

【1】文本分词

            可以使用常见的java分词,本例使用的是IKAnalyer

【2】词性标注

            这个暂时没有实现 【只是对提取效果会有一定的影响 一般会选择名次和动词作为关键字】 不影响算法思想实现

【3】构建初始转置矩阵【图的一种表示方式】

           我们以文本对象中的每一个独立文本分词作为一个顶点,采用邻接矩阵来表示文本之间的关联,比如:

           “A B C D”

            "BC A"

            "AC

 

A

B

C

D

A

0

0

0

0

B

1

0

0

0

C

1

1

0

0

D

0

0

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

          (不知道怎么搞的 这表格删除不了多余 请无视)

         words=【A,B,C,D】整个文档的单词数(去重复)

         (每个单元格的含义:M[i,j]代表从j->i有指向意即单词words[j] 后面有单词words[i])

 

假设上面为3段待提取的文字,分词以空格形式切分,那么我们可以得到下面的一个矩阵M

           对上面的矩阵稍作处理 使 每一列的值结果如下:[有点像单元化处理m[i][j]=m[i][j]/(sum[0-N][j])

 

A

B

C

D

A

0

0

0

0

B

1/2

0

0

0

C

1/2

1

0

0

D

0

0

1

0

 

 

 

 

 

 

具体实现:部分源码

[java] view plaincopy

  1. /** 
  2.  * 传入经过分词处理后的wordsWrapper对象 
  3.  *matrix[i][j]代表从j->i有指向 现在为未带权处理 
  4.  * @param wordsWrapper 
  5.  * @return 返回生成的double矩阵 
  6.  */  
  7. public static double[][] listToGraph(WordsWrapper wordsWrapper) {  
  8.     int wordCount = wordsWrapper.wordcount;  
  9.     List<String> nodulWords = Arrays.asList(wordsWrapper.nodulWords);  
  10.     double[][] a = new double[wordCount][wordCount];  
  11.     ArrayList<String> content = wordsWrapper.words;  
  12.   
  13.     for (String x : content) {  
  14.         String xs[] = x.split(" ");  
  15.         int curindex = -1, preindex = -1, nextindex = -1;  
  16.         for (int i = 0; i < xs.length; i++) {  
  17.             String tx = xs[i];  
  18.             int index = nodulWords.indexOf(tx);  
  19.             if (i != 0) {  
  20.                 preindex = nodulWords.indexOf(xs[i - 1]);  
  21.             }  
  22.   
  23.             if (preindex != -1) {  
  24.                 a[index][preindex] = 1d;  
  25.             }  
  26.         }  
  27.     }  
  28.     //just for test  
  29.     // System.out.println("before ...");  
  30.   
  31.     //~~~test end here  
  32.   
  33.     //初始矩阵处理  
  34.     for (int j = 0; j < wordCount; j++) {  
  35.   
  36.         //这里可以修正 为带权值的  
  37.         int nozero = 0;  
  38.         for (int i = 0; i < wordCount; i++) {  
  39.             if (a[i][j] != 0) {  
  40.                 nozero++;  
  41.             }  
  42.         }  
  43.         if (nozero != 0) {  
  44.             for (int i = 0; i < wordCount; i++) {  
  45.                 a[i][j] = a[i][j] / nozero;  
  46.             }  
  47.         }  
  48.     }  
  49.     return a;  
  50. }  

 

 

 

 

【4】迭代运算

     采用最大迭代次数和误差控制判断是否要求迭代

    关于每个单词的PR(PageRank)值计算,在论文总是得分计算公式:

 

其中各个参数含义:

S(Vi)--顶点i的得分 可以理解为单词i的PR值

d-----阻尼系数 默认为;0.85

In(Vi)---所有指向顶点i的顶点 【比如:单词A 面跟着单词B 那么A属于In(B)】

|Out(Vj)|---节点j的出度【与图算法中的出度意义一样 上面的是入度】

 

具体实现:【最大迭代次数(20)和 最大容错率由自己指定(0.000001)】

[java] view plaincopy

  1. /** 
  2.     * 判断是否需要下一次pagerank迭代 会进行精度计算和总的迭代次数考虑 
  3.     * 
  4.     * @param before 之前迭代结果 PR值 
  5.     * @param cur当前迭代结果 PR值 
  6.     * @param curIteration 已经迭代次数 
  7.     * @return 是否需要下一次迭代 
  8.     */  
  9.    public static boolean neededDoNext(double[] before, double[] cur, int curIteration) {  
  10.        //先检查迭代次数是否已经超过最大迭代次数  
  11.        if (curIteration > MAX_ITERATE_NUM) {  
  12.            return false;  
  13.        } else {  
  14.            //精度要求  
  15.            int n = before.length;  
  16.            for (int i = 0; i < n; i++) {  
  17.                  
  18.                if (Math.abs(cur[i] - before[i]) > DEFAULT_ERROR_RATE) {  
  19.                    return true;  
  20.                }  
  21.            }  
  22.              
  23.            System.out.println("All is ok???");  
  24.            outputArray(before);  
  25.            outputArray(cur);  
  26.                      
  27.            //所有都满足精度要求  
  28.            return false;  
  29.        }  
  30.   
  31.    }  

 

迭代计算处理核心:

double []prevPR//记录前一次的算出来的pr值初始值设置为全0

double []curPR//记录当前算出的PR值初始值设定为全1/wordCount;

[java] view plaincopy

  1. while (neededDoNext(prevPR, curPR, iterationCount)) {  
  2.          //计算下一次迭代  
  3.          prevPR=curPR;  
  4.          curPR = doPageRank(transMatrix,prevPR,outDegrees);  
  5.   
  6.            
  7.          System.out.println("当前迭代次数:"+iterationCount+"RESULT:");  
  8.          outputArray(curPR);  
  9.          iterationCount++;  
  10.      }  

 

效果演示:

 

总共迭代次数为:21
word->d score->0.4023749808259771
word->b score->0.3210029191796684
word->c score->0.5938468678121206
word->a score->0.4023749808259771

可以看出本文的关键字应该是C 注意pagerank可能不会收敛 所以设置最大迭代次数

 

【5】后处理

提供将临近的关键字 结合起来形成新的关键字【未完成】

 

【6】写在最后

由于看的是英文的论文 可能有的理解有失偏颇有的地方理解的不到位还望指教,

还有如果使用带权图可以获得更好的计算效果【论文中有叙述】实现起来也就是修改PR[i] 或者score的计算,原理是一样

 

 

 

 



http://chatgpt.dhexx.cn/article/AR5Hhd2M.shtml

相关文章

PageRank算法浅析

转载请注明出处&#xff01;&#xff01;&#xff01;http://blog.csdn.net/zhonghuan1992 本文是根据 Topic-Sensitive PageRank Google’s PageRank:The Math Behind the Search Engine http://blog.csdn.net/hguisu/article/details/7996185 http://blog.codinglabs.…

PageRank 算法详解

转载自&#xff1a;https://blog.csdn.net/m0_37786726/article/details/79864012 参考文献&#xff1a;https://blog.csdn.net/androidlushangderen/article/details/43311943 链接分析 在链接分析中有2个经典的算法&#xff0c;1个是PageRank算法&#xff0c;还有1个是HITS…

数据挖掘十大算法:PageRank算法原理及实现

一、PageRank的概念 PageRank&#xff0c;网页排名&#xff0c; 是一种由根据网页之间相互的超链接计算的技术&#xff0c;而作为网页排名的要素之一&#xff0c; 它由Larry Page 和 Sergey Brin在20世纪90年代后期发明&#xff0c;并以拉里佩吉&#xff08;Larry Page&#xf…

PageRank 算法及实例分析

本文一部分是针对图的PageRank 的实现&#xff0c;以及具体数据集的分析过程的记录。 另一部分是BFS的实现&#xff0c;并记录每一层的节点数。 数据集下载地址 soc-Slashdot0811 、 roadNet-CA 、 soc-LiveJournal1 1. java 实现代码 Main.java import java.util.List;pu…

PageRank算法(二)

原文地址&#xff1a;https://blog.csdn.net/monkey_d_meng/article/details/6556295 说明&#xff1a;这是我学习过程中看到对PageRank来龙去脉解释非常清晰的博客&#xff0c;博主很厉害&#xff0c;大家可以关注一下原创作者&#xff01; 一、PageRank算法的简单举例 Goo…

PageRank 算法实现

大数据管理与分析实验报告 实验一 大数据系统基本实验 实验二 文档倒排索引算法实现 实验三 PageRank 算法实现 实验目的 PageRank 网页排名的算法&#xff0c;曾是Google 发家致富的法宝。用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。通过对PageRank 的…

(简单介绍)PageRank算法

文章目录 前言引入形式化PageRank 前言 这个是一个经典算法&#xff0c;还是有必要了解的&#xff0c;这里由于讲得不会很详细&#xff0c;所以要求你有一点数学知识&#xff0c;如果有&#xff0c;看完这篇就大概明白PageRank是个啥了。本篇不涉及证明之类的&#xff0c;而是…

算法--PageRank

概念 PageRank是Google提出的算法&#xff0c;用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。是Google创始人拉里佩奇和谢尔盖布林于1997年创造的PageRank实现了将链接价值概念作为排名因素。 GOOGLE PageRank并不是唯一的链接相关的排名算法&#xff0c;而…

pagerank以及个性化的pagerank算法

pagerank以及个性化的pagerank算法 pagerank最开始是Google提出来用来衡量网页重要度排行的算法。 她的思想是基于网页之间互相的链接作为加权投票。假如网页a指向b&#xff0c; 那么网页b的重要程度受网页a的影响&#xff0c;a越重要&#xff0c;则b就越重要。假如网页c也指…

PageRank算法原理详解

&#xfeff;&#xfeff; 转自&#xff1a;http://blog.csdn.net/hguisu/article/details/7996185 1. PageRank算法概述 PageRank,即网页排名&#xff0c;又称网页级别、Google左侧排名或佩奇排名。 是Google创始人拉里佩奇和谢尔盖布林于1997年构建早期的搜索系统原型时提出…

PageRank算法改进

PageRank算法的应用 PageRank 算法是 Google 搜索引擎进行网页排名的一种算法&#xff0c;那么它如何映射到其他领域&#xff1f; 比如&#xff0c;我们如何在文献排名中应用PageRank算法呢&#xff1f; 对文献的质量进行排序是对文献价值进行评估的一种重要手段&#xff0c…

什么是Pagerank?Pagerank算法介绍与计算公式

一、什么是Pagerank&#xff1f; PageRank&#xff0c;网页排名&#xff0c;又称网页级别、Google左侧排名或佩奇排名&#xff0c;是一种由根据网页之间相互的超链接计算的技术&#xff0c;而作为网页排名的要素之一&#xff0c;而我们SEO简称为PR&#xff0c;以Google公司创办…

PageRank算法 -- 从原理到实现

本文整理自博文PageRank算法 – 从原理到实现 1. 算法来源 这个要从搜索引擎的发展讲起。最早的搜索引擎采用的是 分类目录1的方法,即通过人工进行网页分类并整理出高质量的网站。那时 Yahoo 和国内的 hao123 就是使用的这种方法。 后来网页越来越多,人工分类已经不现实了…

第4关: 网页排序——PageRank算法

要求&#xff1a;编写实现网页数据集PageRank算法的程序&#xff0c;对网页数据集进行处理得到网页权重排序。 ####相关知识 ######PageRank算法原理 1.基本思想&#xff1a; 如果网页T存在一个指向网页A的连接&#xff0c;则表明T的所有者认为A比较重要&#xff0c;从而把T的一…

PageRank算法--从原理到实现

本文将介绍PageRank算法的相关内容&#xff0c;具体如下&#xff1a; 算法来源算法原理算法证明PR值计算方法 1 幂迭代法2 特征值法3 代数法 算法实现 1 基于迭代法的简单实现2 MapReduce实现 PageRank算法的缺点写在最后参考资料 1. 算法来源 这个要从搜索引擎的发展讲起。最…

PageRank算法原理与实现

正文共835个字&#xff0c;8张图&#xff0c;预计阅读时间6分钟。 1、PageRank 1.1.简介 PageRank&#xff0c;又称网页排名、谷歌左侧排名&#xff0c;是一种由搜索引擎根据网页之间相互的超链接计算的技术&#xff0c;而作为网页排名的要素之一&#xff0c;以Google公司创办人…

PageRank算法原理及代码

本文内容出自帅器学习的课程内容&#xff0c;讲得原理清晰&#xff0c;概念深入&#xff0c;链接&#xff1a; PANKRANK算法视频 另有一篇知乎文章&#xff0c;PAGERANK讲得系统透彻&#xff0c;链接在此&#xff1a;关键词提取和摘要算法TextRank详解与实战 PAGERANK算法是一…

PageRank算法 -- 图算法

一、简述&#xff1a; PageRank算法是一个迭代求解算法&#xff0c;可以处理网页排名&#xff08;根据网页的重要性进行排序&#xff09;、社会影响力分析、文本摘要 等问题。 PageRank算法在1996年由Page和Brin提出 PageRank适用于解决用有向图表示的图数据 二、各节点重要性…

PageRank算法

一、算法原理&#xff1a; 1、如果一个网页被很多其他网页链接到的话说明这个网页比较重要&#xff0c;也就是PageRank值会相对较高 2、如果一个PageRank值很高的网页链接到一个其他的网页&#xff0c;那么被链接到的网页PageRank值也会相应提高。 例子&#xff1a; 如果一…

pagerank算法详解

目录 一、pagerank简介两个重要假设 二、pagerank算法公式定义计算演示矩阵化计算 三、存在的两个问题问题1.Dead Ends问题2.Spider Traps 一、pagerank简介 PageRank算法的基本想法是在有向图上定义一个随机游走模型&#xff0c;即一阶马尔可夫链&#xff0c;描述随机游走者沿…