前言

写这篇文章主要是为了后面的TextRank算法做铺垫,所以我会非常简短的描述,可能读者理解起来有一点费劲。

PageRank

佩奇排名(PageRank),又称网页排名、谷歌左侧排名、PR等,是Google公司所使用的对其搜索引擎搜索结果中的网页进行排名的一种算法。是Google创始人拉里·佩奇和谢尔盖·布林于1997年构建早期的搜索系统原型时提出的链接分析算法,

  • PageRank是Google用于用来标识网页的等级/重要性的一种方法,是Google用来衡量一个网站的好坏的唯一标准。
  • Google通过PageRank来调整结果,使那些更具“等级/重要性”的网页在搜索结果中另网站排名获得提升,从而提高搜索结果的相关性和质量。

当然这是早期算法,现在应该不用了。主要思想是:

  • 数量假设:如果越多的网页指向网页A,即网页A的入链数量越多,则该网页A越重要
  • 质量假设:一个网页是重要的,那么它指向的网页也是重要的

基于这两个假设建立模型,这是一张图模型,每一个页面都是一个节点,节点之间有带方向的直线表明我指向你,来一张图吧:

模型是图模型,那么重要性分数怎么计算?根据上述中心思想如何实现呢?简单一点来算,你自己也能想出来:

  • 1、A指向C,C重要性加1,也可以说每个节点一开始默认都是1,指向一个节点,这个节点重要性加1
  • 2、上图中:C重要性分数2,A重要性分数1,B重要性分数1

似乎也是这么回事,这个计算方式还挺像样的,但是,好像跟我们的假设不太一样:

  • C那么重要,指向A,说明A也很重要,怎么给A的分数就是1了,跟A给B的分数一样?
  • 有的节点有两个指向,比如A节点同时指向B、C节点,但是权重都是1,似乎指向的多少都不影响给的权重。

有的人就想着不能这么算,他提出:

  • 一个节点指向其他节点,那么它的分数应该平均给其他节点,而不是每次都是给1
    你不能是无限分数呀,你指向那么多节点,都给1,那么相当于你这个节点有无穷的分数,无限节点诞生?
  • 像上图那样循环 B−>C−>A−>BB->C->A->BB−>C−>A−>B,这样循环计算分数下去,什么时候才结束呀?
    依据收敛准则,收敛到一定的分数就停止,不再计算。

所以改进一下:

  • 第一轮开始:默认都是1
    B节点指向C:+1,C指向A:+1,A指向B、C,B:+0.5,C:+0.5
    最终,B:0.5,A:1,C:1.5
  • 第二轮开始,根据第一轮的结果继续
    最终,B:1,A:1.5,C1
  • 再来第三轮,后面就不继续了

这里要注意一点:不能拿已经算好的A的权重再参与到当前轮数的计算里面,很多博客都是把当前的计算结果参与到当前轮数的其他节点的计算,这是错误的,必须注意一下。

所以我们抽象出函数就是:
PR(pi)=∑pj(PR(pj)L(pj))PR(p_i) = \sum_{pj}(\frac{PR(p_j)}{L(p_j)}) PR(pi​)=pj∑​(L(pj​)PR(pj​)​)

参数解释:

  • pjpjpj:是pipipi的入链,C有A、B指向,所以要遍历A、B
  • L(pj)L(p_j)L(pj​):表示pjpjpj的出链的个数,A有两个出链,所以等于2

这个公式不太好理解,我重写一个。

PR(pi)=∑pj∈E(pi)(PR(pj)Len(pj))PR(p_i) = \sum_{pj \in E(pi)}(\frac{PR(p_j)}{Len(pj)}) PR(pi​)=pj∈E(pi)∑​(Len(pj)PR(pj​)​)

用矩阵来表示更好的理解,我们就拿上述的图来做关系矩阵:
P3∗3=00112001210\begin{aligned} \mathbb{P}^{3*3}=\begin{array} {|cccc|} 0&0&1\\ \frac{1}{2}&0&0\\ \frac{1}{2}&1&0\\ \end{array} \end{aligned} P3∗3=021​21​​001​100​​
行坐标、列坐标都是A、B、C,我们从两个角度来理解:

  • 按列理解:每一列表示,列节点到各个节点的关联,第一列列节点是A,A到B、C,所以B行是12\frac{1}{2}21​,C同理,这一列数据相加等于1,代表其他节点占A节点的占比
  • 按行理解:每一行表示当前节点的权重受其他节点的影响,也可以是权重计算公式,比如第一行,行节点是A,A=CA=CA=C,第三行节点是C,C=12A+BC=\frac{1}{2}A+BC=21​A+B,C的计算受A、B的影响

上述矩阵是节点之间的关系矩阵,怎么计算得到最终的分数呢?我们还是认为给一个默认值,乘以这个关系矩阵,会得到一个新的分数,这样

  • 1、默认值都给1,记作V0V_0V0​
  • 2、利用公式Vi=P∗Vi−1V_i=P*V_{i-1}Vi​=P∗Vi−1​来迭代计算,V1=P∗V0V_1=P*V_{0}V1​=P∗V0​,V2=P∗V1V_2=P*V_{1}V2​=P∗V1​
  • 3、这样迭代计算,直到上一轮与下一轮的差值小于某个值,即Vi−Vi−1<θV_i-V_{i-1}<\thetaVi​−Vi−1​<θ,这样就收敛来,就可以终止

以上就是大致的流程,其实还可以思考为什么会收敛?这个也要证明,不然永远都不会收敛。

改进

其实我觉得有一些问题,

  • 那就是为什么每次都是收敛?
  • 一个节点不跟其他任何节点关联,那么这个节点就是0,但是用户可能通过URL 拼接自己去访问其他网页节点
  • 另一个就是这个网页节点自己引用自己,这样将最终导致概率分布值全部转移到自己上来,这使得其他网页的概率分布值为0。

基于以上的考虑,有人指出,添加一个阻尼系数ddd:

  • 一方面为了这个阻尼系数用来表示一个概率,这个概率表示跳转到其他网页节点的概率,避免被自我引用导致其他都是0
  • 另一种就是自己没有入链,这样最终自己的分数都是0,这样自己指向的网页最终也会为0,为了避免这种情况,会引入阻尼系数来给一个默认值

具体公式是:

PR(pi)=(1−d)+d∗∑pj∈E(pi)(PR(pj)Len(pj))PR(p_i) = (1-d)+d*\sum_{pj \in E(pi)}(\frac{PR(p_j)}{Len(pj)}) PR(pi​)=(1−d)+d∗pj∈E(pi)∑​(Len(pj)PR(pj​)​)

ddd一般取0.85,(1−d)(1-d)(1−d)代表着不考虑入站链接的情况下随机进入一个页面的概率,也就是没有入链的情况下的节点权重。在0.85的阻尼系数下,大约100多次迭代就能收敛到PR向量。当阻尼系数接近1时,需要的迭代次数会陡然增加很多,且排序不稳定。

收敛问题

实际上,在随机过程理论中,上述矩阵被称为“转移概率矩阵”。这种离散状态按照离散时间的随机转移过程称为马氏链(马尔可夫链,Markov Chain),也就是我们把PageRank收敛性问题转化为了求马尔可夫链的平稳分布的问题,那么我们就可以从马氏链的角度来分析问题。因此,对于PageRank的收敛性问题的证明也就迎刃而解了,只需要证明马氏链在什么情况下才会出现平稳分布即可。我们可以知道马氏链有三个推论:

推论1. 有限状态的不可约非周期马尔可夫链必存在平稳分布。

推论2. 若不可约马尔可夫链的所有状态是非常返或零常返的,则不存在平稳分布。

推论3. 若{Xi}是不可约的非周期马氏链的平稳分布,则lim(n→∞)Pj(n) = Xi。

这一块恰好pagerank符合这三个推论,所以它是收敛的。

优点与缺点

点:评估网页排名其他因素考虑的更多一些,不仅仅是网页入链、出链。

优点:

  • 优点:简单,容易实现
  • PageRank算法通过网页间的链接来评价网页的重要性,在一定程度上避免和减少了人为因素对排序结果的影响;
  • 采用与查询无关的离线计算方式,使其具有较高的响应速度 ;
  • 一个网页只能通过别的网页对其引用来增加自身的PR值,且算法的均分策略使得一个网页的引用越多,被引用网页所获得的PR值就越少。

因此,算法可以有效避免那些为了提高网站的搜索排名而故意使用链接的行为。

缺点:
(1 )主题漂移问题
PageRank 算法仅利用网络的链接结构,无法判断网页内容上的相似性;且算法根据向外链接平均分配权值使得主题不相关的网页获得与主题相关的网页同样的重视度,出现主题漂移。
(2 )偏重旧网页问题
决定网页 P R 值的主要因素是指向它的链接个数的多少。一个含有重要价值的新网页,可能因为链接数目的限制很难出现在搜索结果的前面,而不能获得与实际价值相符的排名。 算法并不一定能反映网页的重要性,存在偏重旧网页现象。
(3 )忽视用户个性化问题
PageRank算法在设计之初,没有考虑用户的个性化需要。个性化搜索引擎的兴起,对 PageRank排序算法提出新的挑战。

参考博客

PageRank算法简介及Map-Reduce实现
PageRank算法的计算及其优缺点

PageRank 页面排名算法相关推荐

  1. 谷歌页面排名算法 - 未完

    一.PageRank算法原理 一个合格的收索引擎,它所具备的最基础的功能便是网页搜索,根据用户给出的关键字查询出最匹配,最能满足用户需求的页面.那么搜索引擎到底应该如何排序才好呢? 这在谷歌引领互联网 ...

  2. PageRank网页排名算法

    PageRank是十大数据挖掘算法之一 PageRank算法,即网页排名算法,由Google创始人拉里佩奇在斯坦福上学的时候提出来的.该算法用于对网页进行排名,排名高的网页表示该网页被访问的概率高. ...

  3. 图算法(一):Pagerank算法(网页排名算法)【适用场景:网页排序、社交网络重点人物发掘等】【一种由搜索引擎根据网页(节点)之间相互的超链接进行计算的技术,用来体现网页(节点)的相关性和重要性】

    一.概述 PageRank算法又称网页排名算法,是一种由搜索引擎根据网页(节点)之间相互的超链接进行计算的技术,用来体现网页(节点)的相关性和重要性. 如果一个网页被很多其他网页链接到,说明这个网页比 ...

  4. 4.页面评价算法 Heritrix应用与扩展

    页面评价算法----pagerank算法 网页评价算法作为网页的组织管理工具,充分利用了互联网的巨大链接结构,即一个网页被其他网页链接的数量就决定了该网页的重要性.网页评价算法可以保证系统对用户的需求 ...

  5. 马尔可夫过程和马尔可夫链_Google页面排名和马尔可夫链

    马尔可夫过程和马尔可夫链 Whenever you give a query on Google, you will get the web pages in an order based on th ...

  6. 你知道“啥是佩奇”,却不一定了解佩奇排名算法

    作者 | 程序员小吴 从初学者的角度学习算法,以动画的形式呈现解题的思路. 来源 | 五分钟学算法 佩奇排名介绍 佩奇排名是根据页面之间的链接结构计算页面的值的一种算法.下面我们通过动画来理解进行计算 ...

  7. 【图】2015年Google搜索引擎排名算法(完整版)

    2015年中旬,国外SEO网站发布了一份2015年Google搜索引擎排名算法的最新数据,从各个角度看待搜索引擎算法排名影响因素的变化.其组织每两年都会成立一个SEO专家调查小组,针对"Go ...

  8. 基于用户投票的排名算法(一):Delicious和Hacker

    作者: 阮一峰 日期: 2012年2月24日 互联网的出现,意味着"信息大爆炸". 用户担心的,不再是信息太少,而是信息太多.如何从大量信息之中,快速有效地找出最重要的内容,成了互 ...

  9. 投票源码程序_基于用户投票的排名算法

    基于用户投票的排名算法(一):Delicious和Hacker News 互联网的出现,意味着"信息大爆炸". 用户担心的,不再是信息太少,而是信息太多.如何从大量信息之中,快速有 ...

最新文章

  1. flutter 实现不可滚动的ListView构建器
  2. mysql增加sort_buffer_设置sort_buffer_size
  3. 搭建高可用的redis集群,避免standalone模式带给你的苦难
  4. .NET中关于T4模板的使用
  5. 《原力计划【第二季】》第1周周榜揭晓!!!
  6. mac mysql 8.0.11安装_Mac下安装mysql8.0.11
  7. Ajax基础之原生js封装
  8. 从头开始学JavaScript (四)——操作符
  9. 【元胞自动机】基于matlab元胞自动机超车换道【含Matlab源码 359期】
  10. 离散数学 - 04 图论
  11. dp算法求解矩阵连乘的问题
  12. 计算机组成原理答案 耿,计算机组成理习题课2.ppt
  13. 同方微电子3S理念护航金融IC卡
  14. 2022年登高架设操作证考试题及在线模拟考试
  15. Java基础——面向对象(中级)
  16. 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(一)计算机系统构成及硬件基础知识...
  17. FreeRTOS任务控制函数
  18. 《吴军 阅读与习作讲义》 序和第3章 日常实用写作
  19. Linux服务器简单配置
  20. R语言使用plot函数可视化数据、使用pch参数设置数据点的形状、使用lwd参数和bg参数设置数据点边框宽度、背景颜色(仅限于 21到25)

热门文章

  1. 读《你自以为的极限,只是别人的起点》有感
  2. mysql进程daemon_守护进程(Daemon)
  3. python定时开关机的代码_用python写一个windows下的定时关机脚本(推荐)
  4. DIRECTX中独占模式与窗口模式的切换(译)
  5. php之sort,php中sort函数的使用方法
  6. 武汉大学计算机学院易碧波,研究生工作部
  7. 算法(1) 冒泡排序
  8. html图片高度全屏居中,CSS解决固定高度图片居中裁剪问题
  9. PHP 网络游戏防沉迷接口 代码与坑
  10. DOM跨域的三种解决方案:document.domain、window.name、window.postMessage