一篇文章带你看懂 Google 的 PageRank 算法(2)

PageRank 算法是谷歌创始人拉里·佩奇和谢尔盖·布林开发的一种网页排名算法。通过网络链接结构来确定网页的重要性。这个算法今天看起来有些简单,不过 1996 年 google 可能就靠这个算法起家的吧。

PageRank 背后的基本思想是:一个网页的重要性可以通过链接到该网页的其他网页的数量和质量来衡量。如果一个网页被许多其他重要的网页链接,那么这个网页也被认为是重要的。

转移矩阵

假设有 A、B、C 和 D 网站,用箭头表示他们之间引用关系,也就是 N × N N \times N N×N 矩阵,其中 M i j Mij Mij 表示从 j 网页到网页 i 的链接概率

转移概率矩阵/马尔可夫矩阵,从 A 将跳转到 B 或 C 的概率为 1/2,

PageRank 可以用一个有向图来表示,其中每个网页是图中一个节点,每个超链接是图中一条有向边

也可以用一个矩阵来表示网页间的关系,这里矩阵用大写字母 M M M 来表示
0 0 1 / 3 1 1 / 2 0 1 / 3 0 1 / 2 0 0 0 0 1 1 / 3 0 \begin{bmatrix} 0 & 0 & 1/3 & 1\\ 1/2 & 0 & 1/3 & 0\\ 1/2 & 0 & 0 & 0\\ 0 & 1 & 1/3 & 0\\ \end{bmatrix} 01/21/2000011/31/301/31000

第一列表示 A 到 B、C、D 的概率也就是从 j 到 i 网页链接概率,因为 A (j=0) 有 2 个超链接指向 B 和 C 所以每个到 A 到 B 和 C 概率为 1/2

R t + 1 = M R t R_{t+1} = MR_t Rt+1=MRt
R t + 1 = 0 0 1 / 3 1 1 / 2 0 1 / 3 0 1 / 2 0 0 0 0 1 1 / 3 0 1 / 4 1 / 4 1 / 4 1 / 4 = 1 / 12 2.5 / 12 4.5 / 12 4 / 12 R_{t+1} = \begin{bmatrix} 0 & 0 & 1/3 & 1\\ 1/2 & 0 & 1/3 & 0\\ 1/2 & 0 & 0 & 0\\ 0 & 1 & 1/3 & 0\\ \end{bmatrix} \begin{bmatrix} 1/4 \\ 1/4 \\ 1/4 \\ 1/4 \\ \end{bmatrix} = \begin{bmatrix} 1/12\\ 2.5/12\\ 4.5/12\\ 4/12 \end{bmatrix} Rt+1= 01/21/2000011/31/301/31000 1/41/41/41/4 = 1/122.5/124.5/124/12

随机浏览模型

Dead Ends 问题

随着不断的迭代,整个网络的 PageRank 值会逐渐消失,最终导致所有网页的 PageRank 值都趋向为 0,这是因为 Dead Ends 网页不将任何 PageRank 值传递给其他网页(例如下面的 B 节点)

接下通过一个例子来介绍 Dead Ends 问题 B 没有任何出链(out-links) 这就是 Dead Ends,Dead Ends 会导致网站权重变为 0

1 2 3
A 1/3 0 0
B 1/3 2/3 0
C 1/3 0 0

R t + 1 = 0 0 0 1 0 1 0 0 0 1 / 3 1 / 3 1 / 3 = 0 2 / 3 0 R_{t+1} = \begin{bmatrix} 0 & 0 & 0 \\ 1 & 0 & 1 \\ 0 & 0 & 0 \\ \end{bmatrix} \begin{bmatrix} 1/3 \\ 1/3 \\ 1/3 \\ \end{bmatrix} = \begin{bmatrix} 0 \\ 2/3\\ 0 \end{bmatrix} Rt+1= 010000010 1/31/31/3 = 02/30

teleport 解决方法

调整为
M + a T ( e n ) M + a^T (\frac{e}{n}) M+aT(ne)

  • a = a 0 , a 1 , ⋯   , a n a = a_0,a_1,\\cdots, a_n a=a0,a1,⋯,an 当有一列全为 0 时(即该节点无出链) a i = 1 a_i = 1 ai=1
  • e 为由 1 填满的列矩阵
  • n 为 M 矩阵的行数/列数

0 0 0 1 0 1 0 0 0 + 0 1 / 3 0 0 1 / 3 0 0 1 / 3 0 \begin{bmatrix} 0 & 0 & 0\\ 1 & 0 & 1\\ 0 & 0 & 0\\ \end{bmatrix} + \begin{bmatrix} 0 & 1/3 & 0\\ 0 & 1/3 & 0\\ 0 & 1/3 & 0\\ \end{bmatrix} 010000010 + 0001/31/31/3000
a 0 = 0 , 0 , 0 a 1 = 1 , 1 , 1 a 2 = 0 , 0 , 0 → a = 0 0 0 1 1 1 0 0 0 → a T = 0 1 0 0 1 0 0 1 0 \begin{aligned} a_0 = 0,0,0\\ a_1 = 1,1,1\\ a_2 = 0,0,0\\ \end{aligned} \rightarrow a = \begin{bmatrix} 0 & 0 & 0\\ 1 & 1 & 1\\ 0 & 0 & 0\\ \end{bmatrix} \rightarrow a^T = \begin{bmatrix} 0 & 1 & 0\\ 0 & 1 & 0\\ 0 & 1 & 0\\ \end{bmatrix} a0=0,0,0a1=1,1,1a2=0,0,0→a= 010010010 →aT= 000111000

spider traps 问题

Spider Traps 是指一种特殊的网页结构,其中一组网页相互链接,形成一个闭环。用户(或者说"蜘蛛",即网络爬虫)一旦进入这个环,就会陷入循环,无法跳出。这种结构会对PageRank算法的正常运行造成问题。

首先我们来看一下什么是 spider traps 问题,这里有一个简单模型图,A 节点与其他节点之间无 out-links,也就是 Spider Traps,这将会导致网站权重变为向一个节点偏移。

1 2 3 4 5
A 1/3 2/3 5/6 11/12
B 1/3 1/6 1/12 1/24
C 1/3 1/6 1/12 1/24

当PageRank算法遇到Spider Traps时,算法会不断在这个闭环内分配PageRank值,导致这些网页的PageRank值人为地被提高,而其他不在闭环中的网页的PageRank值则会被不公平地降低。这是因为PageRank算法基于网络链接的结构来分配每个网页的重要性,而在Spider Traps中,链接结构导致算法无法正确评估网页的实际重要性。

Random Teleport

为了解决这个问题,PageRank算法进行了调整,引入了一个随机浏览者模型。这个模型假设即使用户当前浏览的是一个Dead End网页,他们仍然有一定概率随机跳转到网络中的任何其他网页。这种随机跳转的概率通常由一个参数α(通常取值0.85)来控制。

  • 将节点图转换为概率矩阵
  • 修正 M

1 1 / 2 1 / 2 0 0 1 / 2 0 1 / 2 0 \begin{bmatrix} 1 & 1/2 & 1/2 \\ 0 & 0 & 1/2 \\ 0 & 1/2 & 0 \end{bmatrix} 1001/201/21/21/20
P R ( p i ) = 1 − α N + α ∑ p j ∈ M ( p i ) P R ( p j ) L ( p j ) PR(p_i) = \frac{1-\alpha}{N} + \alpha \sum_{p_j \in M(p_i)} \frac{PR(p_j)}{L(p_j)} PR(pi)=N1−α+αpj∈M(pi)∑L(pj)PR(pj)

  • P R ( p i ) PR(p_i) PR(pi) 是网页 p i p_i pi 的 PageRa
  • N 是网络中的网页总数
  • α \alpha α 是一个常数,通常为 0.85,
  • M ( p i ) M(p_i) M(pi) 是链接到网页 p i p_i pi 的所有网页的集合
  • L ( p j ) L(p_j) L(pj) 表示网页 p j p_j pj 的出链接数(out-links)

M = α 1 1 / 2 1 / 2 0 0 1 / 2 0 1 / 2 0 + ( 1 − α ) 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 M = \alpha \begin{bmatrix} 1 & 1/2 & 1/2 \\ 0 & 0 & 1/2 \\ 0 & 1/2 & 0 \\ \end{bmatrix} + (1 - \alpha) \begin{bmatrix} 1/3 & 1/3 & 1/3 \\ 1/3 & 1/3 & 1/3 \\ 1/3 & 1/3 & 1/3 \\ \end{bmatrix} M=α 1001/201/21/21/20 +(1−α) 1/31/31/31/31/31/31/31/31/3
M = 0.85 1 1 / 2 1 / 2 0 0 1 / 2 0 1 / 2 0 + 0.25 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 1 / 3 = 0.85 0.425 0.425 0 0 0.425 0 0.425 0 + 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 M = 0.85 \begin{bmatrix} 1 & 1/2 & 1/2 \\ 0 & 0 & 1/2 \\ 0 & 1/2 & 0 \\ \end{bmatrix} + 0.25 \begin{bmatrix} 1/3 & 1/3 & 1/3 \\ 1/3 & 1/3 & 1/3 \\ 1/3 & 1/3 & 1/3 \\ \end{bmatrix} = \begin{bmatrix} 0.85 & 0.425 & 0.425\\ 0 & 0 & 0.425\\ 0 & 0.425 & 0 \end{bmatrix} + \begin{bmatrix} 0.05 & 0.05 & 0.05 \\ 0.05 & 0.05 & 0.05 \\ 0.05 & 0.05 & 0.05 \end{bmatrix} M=0.85 1001/201/21/21/20 +0.25 1/31/31/31/31/31/31/31/31/3 = 0.85000.42500.4250.4250.4250 + 0.050.050.050.050.050.050.050.050.05
M = 0.9 0.43 0.43 0.05 0.05 0.43 0.05 0.43 0.05 M = \begin{bmatrix} 0.9 & 0.43 & 0.43\\ 0.05 & 0.05 & 0.43\\ 0.05 & 0.43 & 0.05 \end{bmatrix} M= 0.90.050.050.430.050.430.430.430.05

相关推荐
benben04423 分钟前
强化学习之DQN算法族(基于gymnasium开发)
算法
何以解忧,唯有..2 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
想吃火锅10052 小时前
【leetcode】88.合并两个有序数组js
算法
生成论实验室3 小时前
机器人:一个自主运动的系统
人工智能·算法·语言模型·机器人·自动驾驶·agi·安全架构
Qres8213 小时前
算法复键——树状数组
数据结构·算法
H178535090963 小时前
SolidWorks第四部分_直接实体建模特征9_替换面原理
线性代数·算法·机器学习·3d建模·solidworks
不会就选b3 小时前
算法日常・每日刷题--<二分查找>3
算法
绿算技术4 小时前
Mooncake 与绿算ForinnBase GroundPool如何联手打破推理僵局?
科技·算法·架构
-森屿安年-4 小时前
63. 不同路径 II
c++·算法·动态规划