PageRank 笔记

PageRank

要说到 PageRank 算法的来源,这个要从搜索引擎的发展讲起。最早的搜索引擎采用的是分类目录的方法,即通过人工进行网页分类并整理出高质量的网站。那时 Yahoo 和国内的 hao123 就是使用这种方法。

后来网页越来越多,人工分类已经不现实了。搜索引擎进入了文本检索的时代,即计算用户查询关键词与网页内容的相关程度来返回搜索结果。这种方法突破了数量的限制,但是搜索结果不是很好。因为总有某些网页来回地倒腾某些关键词使自己的搜索排名靠前。

于是我们的主角登场了。谷歌的两位创始人,当时还是美国斯坦福大学研究生的佩奇和布林开始了对网页排序问题的研究。他们借鉴了学术界评判学术论文重要性的通用方法,那就是看论文的引用次数。由此想到网页的重要性也可以根据这种方法来评价。于是 PageRank 的核心思想就诞生了。

  • 如果一个网页被很多其他网页链接到的话,说明这个网页比较重要,也就是 PageRank 值会相对较高。
  • 如果一个 PageRank 值很高的网页链接到一个其他的网页,那么链接到的网页的 PageRank 值也会相应地提高。

PageRank 算法计算每一个网页的 PageRank 值,然后根据这个值的大小对网页的重要性进行排序。它的思想是模拟一个悠闲的上网者,上网者首先随机选择一个网页打开,然后在这个网页上呆了几分钟,跳转到该网页所指向的链接,这样无所事事、漫无目的地在网页上跳来跳去,PageRank 就是估计这个悠闲的上网者分布在各个网页上的概率。

PageRank 背后的两个基本假设:

  • 数量假设:更重要的网页可能被更多的网页链接到。
  • 质量假设:有更高的 PageRank 的网页将会传递更高的权重。

PageRank 模型

我们可以将 Web 作如下抽象:

  • 将每个网页抽象成一个节点;
  • 如果一个页面 A 有链接直接链向 B,则存在一条有向边从 A 到 B。

因此,整个 Web 被抽象为一张有向图。

Web抽象

此时,我们需要用一种合适的数据结构来表示页面以及页面间的连接关系。假设当一个用户停留在某页面时,跳转到它所链接的所有页面的概率是相同的。例如,上图中 A 页面链向 B、C、D,所以用户从 A 页面跳转到 B、C、D 的概率各为 1/3。设一共有 N 个网页,则可以组织这样一个 N 维矩阵:其中 i 行 j 列的值表示用户从页面 j 跳转到页面 i 的概率。这样的一个矩阵叫做转移矩阵(Transition Matrix)。
M = [ A → A B → A C → A D → A A → B B → B C → B D → B A → C B → C C → C D → C A → D B → D C → D D → D ] M = [ 0 1 2 0 1 2 1 3 0 0 1 2 1 3 1 2 0 0 1 3 0 1 0 ] M = \begin{bmatrix} A \rightarrow A && B \rightarrow A && C \rightarrow A && D \rightarrow A \\ A \rightarrow B && B \rightarrow B && C \rightarrow B && D \rightarrow B \\ A \rightarrow C && B \rightarrow C && C \rightarrow C && D \rightarrow C \\ A \rightarrow D && B \rightarrow D && C \rightarrow D && D \rightarrow D \\ \end{bmatrix} \quad M = \begin{bmatrix} 0 && \frac{1}{2} && 0 && \frac{1}{2} \\ \frac{1}{3} && 0 && 0 && \frac{1}{2} \\ \frac{1}{3} && \frac{1}{2} && 0 && 0 \\ \frac{1}{3} && 0 && 1 && 0 \\ \end{bmatrix} M=AAABACADBABBBCBDCACBCCCDDADBDCDDM=03131312102100001212100
观察转移矩阵可以发现:

  • 矩阵的每一列代表一个具体网页的出链,简单地说就是当前网页向其他网页的链接;
  • 矩阵的每一行代表一个具体网页的入链,简单地说就是其他网页向当前网页的链接。

PageRank 初始化

PageRank 值的物理意义是一个网页被访问的概率,初始时用户访问每个页面的概率均等,假设一共有 N 个网页,每个网页的初始 PR 值 = 1 / N。我们可以将这些网页的初始 PR 值保存到一个向量中。

继续沿用先前的图,初始 PR 值向量 P 0 = ( P R A , P R B , P R C , P R D ) T = ( 1 4 , 1 4 , 1 4 , 1 4 ) T P_0 = (PR_A, PR_B, PR_C, PR_D)^T = (\frac{1}{4}, \frac{1}{4}, \frac{1}{4}, \frac{1}{4})^T P0=(PRA,PRB,PRC,PRD)T=(41,41,41,41)T

PageRank 计算

继续使用先前的例子,由 A、B、C、D 四个页面组成的 Web。

Web抽象

对于页面 A 来说,有 B、D 页面链向它,那么 A 的 PR 值(PageRank 值)将是 B、D 页面 PR 值之和。
P R ( A ) = P R ( B ) + P R ( D ) PR(A) = PR(B) + PR(D) PR(A)=PR(B)+PR(D)
由于页面 B 也有链接到页面 C,一个页面不能投票 2 次,所以 B 给每个页面半票。同样的,D 投出的票也只有 1/2 算到了 A 的 PageRank 上。
P R ( A ) = P R ( B ) 2 + P R ( D ) 2 PR(A) = \frac{PR(B)}{2} + \frac{PR(D)}{2} PR(A)=2PR(B)+2PR(D)
换句话说,根据链出总数平分一个页面的 PR 值,令 L(X) 表示 X 页面的链出总数,那么 A 的 PageRank 值计算公式可写成如下统一形式。
P R ( A ) = P R ( B ) L ( B ) + P R ( D ) L ( D ) PR(A) = \frac{PR(B)}{L(B)} + \frac{PR(D)}{L(D)} PR(A)=L(B)PR(B)+L(D)PR(D)
我们再把上面的公式简化一下,将其推广到更大的范围。
P R i = ∑ j ∈ B i P R j L j PR_i = \sum_{j \in B_i}\frac{PR_j}{L_j} PRi=jBiLjPRj
其中 P R i PR_i PRi 表示网页 i 的 pagerank 值, P R j PR_j PRj 表示网页 j 的 pagerank 值, L j L_j Lj 表示网页 j 链出的链接数, B i B_i Bi 表示链接到网页 i 的网页集合。

这样,我们就可以计算任意一个网页的 pagerank 值。那么要怎么计算呢?观察 PR(A) 的计算公式我们可以发现,PR(A) 实际上等于转移矩阵 M 的第一行乘上初始 PR 值。我们回想一下转移矩阵的性质,每一行表示其他网页链接到当前网页的概率,这一行的概率指相加实际上就是我们上述推导的公式。所以,如果要同时计算 Web 上的所有页面,我们可以直接计算转移矩阵 M 每一行的概率值累加和。
[ 1 5 6 5 6 4 3 ] \begin{bmatrix} 1 && \frac{5}{6} && \frac{5}{6} && \frac{4}{3} \end{bmatrix} [1656534]
由于我们计算的是概率值,且初始每个页面的概率都相等,因此我们可求出在经过上述出链和入链后,各个页面的停留概率。
P 1 = M ⋅ P 0 = [ 0 1 2 0 1 2 1 3 0 0 1 2 1 3 1 2 0 0 1 3 0 1 0 ] ⋅ [ 1 4 1 4 1 4 1 4 ] = [ 1 4 5 24 5 24 1 3 ] P_1 = M \cdot P_0 = \begin{bmatrix} 0 && \frac{1}{2} && 0 && \frac{1}{2} \\ \frac{1}{3} && 0 && 0 && \frac{1}{2} \\ \frac{1}{3} && \frac{1}{2} && 0 && 0 \\ \frac{1}{3} && 0 && 1 && 0 \\ \end{bmatrix} \cdot \begin{bmatrix} \frac{1}{4} \\ \frac{1}{4} \\ \frac{1}{4} \\ \frac{1}{4} \\ \end{bmatrix} = \begin{bmatrix} \frac{1}{4} \\ \frac{5}{24} \\ \frac{5}{24} \\ \frac{1}{3} \\ \end{bmatrix} P1=MP0=0313131210210000121210041414141=4124524531

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cKD0rPuB-1584525452315)(https://s2.ax1x.com/2019/04/28/EQ86Qx.jpg)]

终止点问题

先前所举的例子是一个理想状态:假设所有网页组成的有向图是强连通的,即从一个网页可以到达任意网页。但实际的网络链接环境没有这么理想,有一些网页不指向任何网页,或不存在指向自己的链接。

PageRank 笔记_第1张图片

【终止点】:一个没有任何出链的网页,例如上图的 C 点。上网者浏览到 C 网页将终止于该网页,而无法继续浏览其他网页。

根据上图我们可以写出转移矩阵 M:
M = [ 0 1 2 0 0 1 3 0 0 1 2 1 3 0 0 1 2 1 3 1 2 0 0 ] M = \begin{bmatrix} 0 & \frac{1}{2} & 0 & 0 \\ \frac{1}{3} & 0 & 0 & \frac{1}{2} \\ \frac{1}{3} & 0 & 0 & \frac{1}{2} \\ \frac{1}{3} & \frac{1}{2} & 0 & 0 \\ \end{bmatrix} M=03131312100210000021210

然后根据公式 P n = M ⋅ P n − 1 = M n ⋅ P 0 P_n = M \cdot P_{n-1} = M^n \cdot P_0 Pn=MPn1=MnP0 迭代计算出 PR 值向量。
P 0 = [ 1 / 4 1 / 4 1 / 4 1 / 4 ] P 1 = M ⋅ P 0 = [ 3 / 24 5 / 24 5 / 24 5 / 24 ] P 2 = M ⋅ P 1 = [ 5 / 48 7 / 48 7 / 48 7 / 48 ] ⋯ P n = M ⋅ P n − 1 = [ 0 0 0 0 ] P_0 = \begin{bmatrix} 1/4 \\ 1/4 \\ 1/4 \\ 1/4 \\ \end{bmatrix} \quad P_1 = M \cdot P_0 = \begin{bmatrix} 3/24 \\ 5/24 \\ 5/24 \\ 5/24 \\ \end{bmatrix} P_2 = M \cdot P_1 = \begin{bmatrix} 5/48 \\ 7/48 \\ 7/48 \\ 7/48 \\ \end{bmatrix} \quad \cdots \quad P_n = M \cdot P_{n-1} = \begin{bmatrix} 0 \\ 0 \\ 0 \\ 0 \\ \end{bmatrix} P0=1/41/41/41/4P1=MP0=3/245/245/245/24P2=MP1=5/487/487/487/48Pn=MPn1=0000
可以看到,经过多次跳转之后,所有网页的 PR 值都是 0,这样的计算结果是无意义的。为什么会这样?因为转移矩阵 M 的第 3 列全为 0,这是导致迭代结果最终归零的“罪魁祸首”。

终止点问题示例图2.png

【解决方案】:当访问到终止点 C 而“走投无路”时,以等概率随机跳转到下一个网页,从而开启一次新的访问。

  • 改造终止点 C,使它能够等概率地游走到网络中的所有页面,即添加从 C 到包括它本身的所有页面的链接。
  • 在上例中就是将转移矩阵 M 的第三列的每一项改为 1/4。这样改造后,每一个节点都有出链,相应的 M 的每一列的列累加和都为 1。

陷阱问题

陷阱指的是只有指向自身链接的网页,见下图 C。

陷阱问题示例图.png

上网者浏览到 C 网页将陷入无休止的循环之中,根据上图我们可以写出转移矩阵 M:
M = [ 0 1 2 0 0 1 3 0 0 1 2 1 3 0 1 1 2 1 3 1 2 0 0 ] M = \begin{bmatrix} 0 & \frac{1}{2} & 0 & 0 \\ \frac{1}{3} & 0 & 0 & \frac{1}{2} \\ \frac{1}{3} & 0 & 1 & \frac{1}{2} \\ \frac{1}{3} & \frac{1}{2} & 0 & 0 \\ \end{bmatrix} M=03131312100210010021210

根据公式 P n = M ⋅ P n − 1 = M n ⋅ P 0 P_n = M \cdot P_{n-1} = M^n \cdot P_0 Pn=MPn1=MnP0,迭代计算出 PR 值向量。
[ 1 / 4 1 / 4 1 / 4 1 / 4 ] [ 3 / 24 5 / 24 11 / 24 5 / 24 ] [ 5 / 48 7 / 48 29 / 48 7 / 48 ] ⋯ [ 0 0 1 0 ] \begin{bmatrix} 1/4 \\ 1/4 \\ 1/4 \\ 1/4 \\ \end{bmatrix} \quad \begin{bmatrix} 3/24 \\ 5/24 \\ 11/24 \\ 5/24 \\ \end{bmatrix} \quad \begin{bmatrix} 5/48 \\ 7/48 \\ 29/48 \\ 7/48 \\ \end{bmatrix} \quad \cdots \begin{bmatrix} 0 \\ 0 \\ 1 \\ 0 \\ \end{bmatrix} 1/41/41/41/43/245/2411/245/245/487/4829/487/480010
可以看到经过多次跳转,跳转到陷阱页面的概率值为 1,而跳转到其他正常网页的概率值为 0,这样的计算结果也是无意义的。

除了自己只链接自己这一种形式的陷阱,还存在一种多个页面相互链接的陷阱。

陷阱问题示例2

上图中 5、6、7 三个页面构成一个闭环,它们紧密链接成环而没有外出的链接,最终也会导致上网者“深陷于此”。同样的,经过多次跳转,陷阱网页的概率值之和为 1,而其他正常网页的概率值为 0。

当用户遇到终止点或者陷阱的话,他不会不知所措,也不会无休止地自己打转,他会通过浏览器的地址栏输入新的地址,以逃离这个网页。也就是说,用户以一个网页跳转至另一个网页的过程中,会以一定概率不点击当前网页的链接,而是在地址栏中输入一个新的地址。

【解决方案】:随机浏览模型。

随机浏览模型

假定一个上网者从一个随机的网页开始浏览,此时有两种选择:

  • 通过点击当前页面的其他链接开始下一次浏览;
  • 通过在浏览器的地址栏输入新的地址以开启一个新的网页。

其中,上网者通过点击链接开启新页面的概率为 d(d 也称阻尼系数,通常取 0.85)。此时,我们的 PageRank 模型变为:在每一个页面,用户都有 d 的概率通过点击链接进入下一个页面;此外,还有 1 - d 的概率随机跳转,此时跳转到其他页面的概率为 1 / N(当前页面的其他链接数)。

【随机浏览模型公式】:
P R i = d ∑ j ∈ B i P R j L j + 1 − d N PR_i = d\sum_{j\in B_i}\frac{PR_j}{L_j} + \frac{1 - d}{N} PRi=djBiLjPRj+N1d
【概率转移公式】:
P n = d M ⋅ P n − 1 + ( 1 − d ) P 0 P n = A P n − 1 A = d M + ( 1 − d ) e e T / N P_n = dM \cdot P_{n-1} + (1-d)P_0 \\ P_n = AP_{n-1} \quad A = dM + (1-d)ee^T/N Pn=dMPn1+(1d)P0Pn=APn1A=dM+(1d)eeT/N

如何通过随机浏览模型解决陷阱问题呢?仍然以先前的实例为例。

陷阱问题示例图.png

先使用概率转移公式计算跳转到每个页面的概率值。
P 0 = [ 1 / 4 1 / 4 1 / 4 1 / 4 ] P 1 = 0.85 ∗ [ 0 1 / 2 0 0 1 / 3 0 0 1 / 2 1 / 3 0 1 1 / 2 1 / 3 1 / 2 0 0 ] [ 1 / 4 1 / 4 1 / 4 1 / 4 ] + 0.15 ∗ [ 1 / 4 1 / 4 1 / 4 1 / 4 ] P_0 = \begin{bmatrix} 1/4 \\ 1/4 \\ 1/4 \\ 1/4 \\ \end{bmatrix} \quad P_1 = 0.85 * \begin{bmatrix} 0 & 1/2 & 0 & 0 \\ 1/3 & 0 & 0 & 1/2 \\ 1/3 & 0 & 1 & 1/2 \\ 1/3 & 1/2 & 0 & 0 \\ \end{bmatrix} \qquad \begin{bmatrix} 1/4 \\ 1/4 \\ 1/4 \\ 1/4 \\ \end{bmatrix} + 0.15 * \begin{bmatrix} 1/4 \\ 1/4 \\ 1/4 \\ 1/4 \\ \end{bmatrix} P0=1/41/41/41/4P1=0.8501/31/31/31/2001/2001001/21/201/41/41/41/4+0.151/41/41/41/4

由于存在一定的概率跳出循环,因此可以避免陷阱问题。

随机浏览模型的收敛性

PageRank 模型的前提:假设用户选择浏览的下一个网页与过去浏览过哪些网页无关,而仅依赖于当前所在的页面,则该过程可以认为是一个有限状态、离散时间的随机过程。

这种“将来”的情况与“过去”无关,而只与“当前”状态有关的性质称为马尔可夫性。具有马尔可夫性的随机过程称为马尔可夫过程。时间和状态都是离散的马尔可夫过程称为马尔可夫链—— P 0 , P 1 , P 2 , ⋯   , P n P_0, P_1, P_2, \cdots, P_n P0,P1,P2,,Pn 是一个马尔可夫链。

对于马尔可夫链 P n = A P n − 1 P_n = AP_{n-1} Pn=APn1,当概率转移矩阵 A 满足以下 3 个条件时, P n P_n Pn 最终收敛,保持在一个稳定值附近。

  • A 为随机矩阵:即所有 A[i][j] >= 0,且 A 的所有列向量的元素和为 1;
  • A 是不可约的:A 是不可约的当且仅当 A 所对应的图是强连通的。
  • A 是非周期的:对某个不等于 1 的自然数 K,如果 A k = E A^k = E Ak=E,则称 A 为周期矩阵,K 是矩阵 A 的周期。而 A 的每个元素都是正数,所以无论 A 与自身相乘多少次所得到的矩阵,其元素都不可能出现 0,自然也不可能为 E,所以 A 是非周期的。

Link Spam 与反作弊

首先介绍两个新的概念——链接农场和黄金链。

  • 链接农场:是指由互联网中的一部分网页组成,这些网页非常密集地互相连接在一起。通过创建一个堆砌大量链接而没有实质内容的网页,这些链接彼此互链,或指向特定网站,以提高某个或者某些特定网页的 PageRank 值。
  • 黄金链:指一些高权重的网站出售首页的链接给作弊网站,以提高作弊网站的 PageRank 值。

链接作弊者眼中的 Web 组成结构:

  • 不可达网页:作弊者无法影响的网页。Web 中的大部分网页都属于这一类。
  • 可达网页:虽然不受作弊者控制,但作弊者可以影响它们。
  • 自有网页:作弊者拥有并完全控制的网页。

PageRank 笔记_第2张图片

假设目标网页 T 的总 PageRank 值为 y,则 y 由三部分组成:

  • 可达网页的贡献,设为 x;
  • Web 中所有网页平均分到的贡献:(1 - β)/n,这部分值很小,可以忽略。
  • 自有网页的贡献:设有 m 个自有网页,每个自有网页的 PageRank 值为 β y / m + ( 1 − β ) / n \beta y/m + (1-\beta)/n βy/m+(1β)/n

综上所述
y = x + β m ( β y m + ( 1 − β ) n ) = x + β 2 y + β ( 1 − β ) m n y = x + \beta m(\frac{\beta y}{m} + \frac{(1-\beta)}{n}) = x + \beta^2 y + \frac{\beta(1-\beta)m}{n} y=x+βm(mβy+n(1β))=x+β2y+nβ(1β)m
解得
y = x 1 − β 2 + β m ( 1 + β ) n y = \frac{x}{1-\beta^2} + \frac{\beta m}{(1+\beta)n} y=1β2x+(1+β)nβm
(注:之前上述公式的后一项分母写成了 ( 1 − β ) n (1-\beta)n (1β)n,经 ershitianxia 同学的指正,已修改为 ( 1 + β ) n (1+\beta)n (1+β)n,对先前阅读过该篇文章而造成误解的读者表示歉意,也很感谢 ershitianxia 同学的评论,说明我写的文章还是能够让读者读下去的。)

如果选择 β = 0.85,那么 1 / ( 1 − β 2 ) = 3.6 , β / ( 1 + β ) = 0.46 1 / (1-β^2) = 3.6, \beta/(1+\beta) = 0.46 1/(1β2)=3.6,β/(1+β)=0.46。也就是说,上述结构能够把可达网页的 PageRank 贡献放大到 3.6 倍,并且还可以获得自有网页数目和总网页数目比值(m/n)的 46%。

那么要如何针对这一种作弊行为呢?搜索引擎可以修改 PageRank 算法的定义来自动降低链接作弊网页的重要度。

【TrustRank】:如果一个网页的 PageRank 值远高于可信网页的值,则很可能这个网页被 Spam 了。

  • 设一个页面的 PageRank 值为 P,TrustRank(可信网页的 PageRank 值) 为 T,则定义网页的垃圾质量(Spam Mass)为:(P - T) / P。
  • Spam Mass 越大,说明此页面被 Spam 的可能性越大。那么我们就可以通过降低该网页的 PageRank 值来避免作弊行为。

PageRank 算法缺点

  • 主题漂移问题:PageRank 算法仅利用网络的链接结构,无法判断网页内容上的相似性;且算法根据向外链接平均分配权值使得主题不相关的网页获得与主题相关的网页同样的重视度,出现主题漂移。
  • 没有过滤广告链接和功能链接:例如常见的“分享到微博”,这些链接通常没有什么实际价值,前者链接到广告页面,后者常常链接到某个社交网站首页。
  • 对新网页不友好:一个新网页的入链相对较少,即便它的内容质量很高,但要成为一个高 PR 值的页面仍需要很长时间的推广。

其他:搜索引擎的发展趋势

社会化搜索

随着Facebook的流行,社交网络平台和应用占据了互联网的主流,社交网络平台强调用户之间的联系和交互,这对传统的搜索技术提出了新的挑战。

传统搜索技术强调搜索结果和用户需求的相关性,社会化搜索除了相关性外,还额外增加了一个维社交网络内其他用户发布的信息、点评或验证过的信息则更容易信赖,这是与用户度,即搜索结果的可信赖性。对某个搜索结果,传统的结果可能成千上万,但如果处于用户的心里密切相关的。社会化搜索为用户提供更准确、更值得信任的搜索结果。

实时搜索

随着微博的个人媒体平台兴起,对搜索引擎的实时性要求日益增高,我想这也是搜索时引擎未来的一个发展方向。

实时搜索最突出的特点是时效性强,越来越多的突发事件首次发布在微博上,实时搜索核心强调的就是“快”,用户发布的信息第一时间能被搜索引擎搜索到。

不过在国内,实时搜索由于各方面的原因无法普及使用,比如 Google 的实时搜索是被重置的,百度也没有明显的实时搜索入口。

多媒体搜索

目前搜索引擎的查询还是基于文字的,即使是图片和视频搜索也是基于文本方式。那么未来的多媒体搜索技术则会弥补查询这一缺失。多媒体形式除了文字,主要包括图片、音频、视频。

多媒体搜索比纯文本搜索要复杂许多,一般多媒体搜索包含 4 个主要步骤:多媒体特征提取、多媒体数据流分割、多媒体数据分类和多媒体数据搜索引擎。

思维导图

pagerank 思维导图

你可能感兴趣的:(PageRank 笔记)