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

520 阅读2分钟

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

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

转移矩阵

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

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

009.png

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

也可以用一个矩阵来表示网页间的关系,这里矩阵用大写字母 MM 来表示

[001/311/201/301/2000011/30]\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}

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

Rt+1=MRtR_{t+1} = MR_t

Rt+1=[001/311/201/301/2000011/30][1/41/41/41/4]=[1/122.5/124.5/124/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}

随机浏览模型

Dead Ends 问题

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

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

fm_005.png

123
A1/300
B1/32/30
C1/300
Rt+1=[000101000][1/31/31/3]=[02/30]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}

fm_006.jpeg

teleport 解决方法

调整为

M+aT(en)M + a^T (\frac{e}{n})
  • a=[a0,a1,,an]a = [a_0,a_1,\cdots, a_n] 当有一列全为 0 时(即该节点无出链) ai=1a_i = 1
  • e 为由 1 填满的列矩阵
  • n 为 M 矩阵的行数/列数
[000101000]+[01/3001/3001/30]\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}
a0=[0,0,0]a1=[1,1,1]a2=[0,0,0]a=[000111000]aT=[010010010]\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}

spider traps 问题

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

fm_007.png

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

12345
A1/32/35/611/12
B1/31/61/121/24
C1/31/61/121/24

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

Random Teleport

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

  • 将节点图转换为概率矩阵
  • 修正 M
[11/21/2001/201/20]\begin{bmatrix} 1 & 1/2 & 1/2 \\ 0 & 0 & 1/2 \\ 0 & 1/2 & 0 \end{bmatrix}
PR(pi)=1αN+αpjM(pi)PR(pj)L(pj)PR(p_i) = \frac{1-\alpha}{N} + \alpha \sum_{p_j \in M(p_i)} \frac{PR(p_j)}{L(p_j)}
  • PR(pi)PR(p_i) 是网页 pip_i 的 PageRa
  • N 是网络中的网页总数
  • α\alpha 是一个常数,通常为 0.85,
  • M(pi)M(p_i) 是链接到网页pip_i 的所有网页的集合
  • L(pj)L(p_j) 表示网页pjp_j 的出链接数(out-links)
M=α[11/21/2001/201/20]+(1α)[1/31/31/31/31/31/31/31/31/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=0.85[11/21/2001/201/20]+0.25[1/31/31/31/31/31/31/31/31/3]=[0.850.4250.425000.42500.4250]+[0.050.050.050.050.050.050.050.050.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.90.430.430.050.050.430.050.430.05]M = \begin{bmatrix} 0.9 & 0.43 & 0.43\\ 0.05 & 0.05 & 0.43\\ 0.05 & 0.43 & 0.05 \end{bmatrix}