PageRank
PageRank是用Link Analysis来计算结点重要性的一种算法,最经典的应用就是网页的重要性排序。我们可以把互联网看作是一张有向图,每个网址都是一个结点,边就是网站中的超链接,如果网站 i i i中有跳转到网站 j j j的链接,那么就连一条从 i i i到 j j j的边。显然,每个网站的重要性是不一样的,比如www.google.com的重要程度显然要比www.nus.edu.sg的重要程度高。
“Flow” Model
最直接的想法是把边看作投票,根据每个结点的入度排序,认为入度大的结点比较重要。但是每条边的重要程度也不一样,一般来说,从重要的结点射出的边比较重要,因此我们定义:对于结点
i
i
i,如果它的重要度为
r
i
r_i
ri,有
d
i
d_i
di条出边,那么每条出边分得得票数为
r
i
/
d
i
r_i/d_i
ri/di。这里于是对于任意一个结点
j
j
j,它的重要度就可以表示为:
r
j
=
∑
i
→
j
r
i
d
i
r_j\ =\ \sum_{i \rightarrow j}\frac{r_i}{d_i}
rj = i→j∑diri
下图是一个例子
下面改写为矩阵形式。定义矩阵stochastic adjacency matrix
M
M
M,设结点
j
j
j有
d
j
d_j
dj条出边,那么如果
i
→
j
i \rightarrow j
i→j有一条边,就令
M
i
j
=
1
d
j
M_{ij}=\frac{1}{d_j}
Mij=dj1,再令
r
r
r表示结点重要度vector,
r
i
r_i
ri表示结点
i
i
i的重要度。于是,上面的式子就可以直接写作:
r
=
M
r
r\ =\ Mr
r = Mr
Stationary Distribution
我们令
p
(
t
)
p(t)
p(t)表示
t
t
t时刻我们所处结点的概率分布,那么
t
+
1
t+1
t+1时刻的分布就可以写作:
p
(
t
+
1
)
=
M
p
(
t
)
p(t+1)\ =\ M \ p(t)
p(t+1) = M p(t)
那么当
p
(
t
+
1
)
=
M
p
(
t
)
=
p
(
t
)
p(t+1)\ =\ M\ p(t)\ =\ p(t)
p(t+1) = M p(t) = p(t)时,我们称达到了stationary distribution。那么其实我们的
r
r
r就是一个stationary distribution,因此我们只需要求解出
r
r
r即可。
Power Iteration
求解
r
r
r的方法叫做power iteration,就是迭代求解。
r
(
t
+
1
)
=
M
r
(
t
)
r^{(t+1)}\ =\ M r^{(t)}
r(t+1) = Mr(t)
迭代终止的条件是:
∣
r
(
t
+
1
)
−
r
(
t
)
<
δ
∣
|r^{(t+1)}\ -\ r^{(t)} \lt \delta|
∣r(t+1) − r(t)<δ∣
Dead End & Spider Trap
PageRank其实有两种比较特殊的情况需要特殊处理,一个叫做dead end,另一个是spider trap。
dead end
这种情况指的是某个结点没有任何出边,那么当我们走到这个结点的时候就跳不出来了。在这种情况下进行power iteration,最终我们会得到一个全是0的概率分布,这不是我们想要的。
针对这一问题的解决方法叫做Teleport。具体来说,假设结点 u u u是没有出边的,那么在 M M M中, u u u这一列应该全是0。我们手动更改一下,将这个一列修改为一个 ∣ V ∣ |V| ∣V∣的uniform distribution,也就是当我们到达结点 u u u时,我们有 1 ∣ V ∣ \frac{1}{|V|} ∣V∣1的概率跳到任何结点,这样就不会一直卡死在dead end了。
spider trap
spider trap指的是我们进入了一个环,那么在这种情况下进行power iteration的结果就是概率分布只会存在于环上的结点,非环上的结点概率分布为0。
针对这一问题的方法也是类似Teleport。我们增加一个概率 β \beta β,,每一步,我们有 β \beta β的概率继续走出边, 1 − β 1-\beta 1−β的概率随即跳到某个结点, β \beta β的取值大概在 0.8 ∼ 0.9 0.8 \sim 0.9 0.8∼0.9。
Optimized PageRank
解决了上述两个问题之后,我们优化过的PageRank公式如下:
r
j
=
∑
i
→
j
β
r
i
d
i
+
(
1
−
β
)
1
N
r_j\ =\ \sum_{i \rightarrow j}{\beta\frac{r_i}{d_i}\ +\ (1-\beta) \frac{1}{N}}
rj = i→j∑βdiri + (1−β)N1
著名的Google PageRank就是这么来的,写作矩阵形式就是:
G
=
β
M
+
(
1
−
β
)
[
1
N
]
N
×
N
G\ =\ \beta M+(1-\beta)[\frac{1}{N}]_{N \times N}
G = βM+(1−β)[N1]N×N