PageRank算法简介
最早的搜索引擎采用的是分类目录的方法,即通过人工进行网页分类并整理出高质量的网站。当时的 Yahoo 和 hao123 就是使用的这种方法。
后来网页越来越多,人工分类已经不现实了。搜索引擎进入了 文本检索 的时代,即计算用户查询关键词与网页内容的相关程度来返回搜索结果。这种方法突破了数量的限制,但是搜索结果不是很好。因为总有某些网页来回地倒腾某些关键词使自己的搜索排名靠前。
谷歌的两位创始人,当时还是美国斯坦福大学 (Stanford University) 研究生的佩奇 (Larry Page) 和布林 (Sergey Brin) 开始了对网页排序问题的研究。他们的借鉴了学术界评判学术论文重要性的通用方法, 那就是看论文的引用次数。由此想到网页的重要性也可以根据这种方法来评价。于是PageRank的核心思想就诞生了,非常简单:
- 如果一个网页被很多其他网页链接到的话说明这个网页比较重要,也就是PageRank值会相对较高
- 如果一个PageRank值很高的网页链接到一个其他的网页,那么被链接到的网页的PageRank值会相应地因此而提高
Simplified algorithm
PageRank算法总的来说就是预先给每个网页一个PR值(下面用PR值指代PageRank值),由于PR值物理意义上为一个网页被访问概率,所以一般是
1
N
\frac{1}{N}
N1,其中
N
N
N为网页总数。另外,一般情况下,所有网页的PR值的总和为1。如果不为1,最后算出来的不同网页之间PR值的大小关系仍然是正确,但是不能直接地反映概率了。预先给定PR值后,不断迭代下面的等式,直至达到平稳分布为止:
P
R
(
u
)
=
∑
v
∈
B
u
P
R
(
v
)
L
(
v
)
PR(u)=\sum_{v\in B_u}\frac{PR(v)}{L(v)}
PR(u)=v∈Bu∑L(v)PR(v)
B u B_u Bu表示链接到 u u u的网页的集合, L ( v ) L(v) L(v)表示节点 v v v的连出的边的数目。
Damping factor
互联网中一个网页只有对自己的出链,或者几个网页的出链形成一个循环圈。那么在不断地迭代过程中,这一个或几个网页的PR值将只增不减,显然不合理。为了解决这个问题,PageRank认为人们以一定概率随机跳到任意一个网页,那么上面的等式就变为:
P
R
(
u
)
=
1
−
d
N
+
∑
v
∈
B
u
P
R
(
v
)
L
(
v
)
PR(u)=\frac{1-d}{N}+\sum_{v\in B_u}\frac{PR(v)}{L(v)}
PR(u)=N1−d+v∈Bu∑L(v)PR(v)
Damping factor一般设为0.85,Bayesian analysis认为最优值为0.31。
Computation
幂迭代法
初始化:
P
R
(
u
;
0
)
=
1
N
PR(u;0)=\frac{1}{N}
PR(u;0)=N1
迭代:
P
R
(
u
;
t
+
1
)
=
1
−
d
N
+
∑
v
∈
B
u
P
R
(
v
;
t
)
L
(
v
)
PR(u;t+1)=\frac{1-d}{N}+\sum_{v\in B_u}\frac{PR(v;t)}{L(v)}
PR(u;t+1)=N1−d+∑v∈BuL(v)PR(v;t),也可以看成是矩阵乘法
R
(
t
+
1
)
=
d
M
R
(
t
)
+
1
−
d
N
R(t+1)=dMR(t)+\frac{1-d}{N}
R(t+1)=dMR(t)+N1−d,
M
=
(
K
−
1
A
)
T
M=(K^{-1}A)^T
M=(K−1A)T,
A
A
A是链接矩阵,
K
K
K是出度对角线矩阵。
终止条件:
∣
R
(
t
+
1
)
−
R
(
t
)
∣
<
ϵ
|R(t+1)-R(t)|<\epsilon
∣R(t+1)−R(t)∣<ϵ
特征值法
因为收敛之后, R ≈ M R R\approx MR R≈MR,所以 R R R为矩阵 M M M特征值1对应的特征向量。
代数法
因为 R = d M R + 1 − d N R=dMR+\frac{1-d}{N} R=dMR+N1−d,那么 R = ( I − d M ) − 1 1 − d N R=(I-dM)^{-1}\frac{1-d}{N} R=(I−dM)−1N1−d。
缺点
PageRank原理简单但效果惊人。然而,PageRank算法还是有一些弊端。
第一,没有区分站内导航链接。很多网站的首页都有很多对站内其他页面的链接,称为站内导航链接。这些链接与不同网站之间的链接相比,肯定是后者更能体现PageRank值的传递关系。
第二,没有过滤广告链接和功能链接(例如常见的“分享到微博”)。这些链接通常没有什么实际价值,前者链接到广告页面,后者常常链接到某个社交网站首页。
第三,对新网页不友好。一个新网页的一般入链相对较少,即使它的内容的质量很高,要成为一个高PR值的页面仍需要很长时间的推广。
针对PageRank算法的缺点,有人提出了TrustRank算法。其最初来自于2004年斯坦福大学和雅虎的一项联合研究,用来检测垃圾网站。TrustRank算法的工作原理:先人工去识别高质量的页面(即“种子”页面),那么由“种子”页面指向的页面也可能是高质量页面,即其TR值也高,与“种子”页面的链接越远,页面的TR值越低。“种子”页面可选出链数较多的网页,也可选PR值较高的网站。
TrustRank算法给出每个网页的TR值。将PR值与TR值结合起来,可以更准确地判断网页的重要性。
现状
谷歌用PR值来划分网页的等级,有0~10级,一般4级以上的都是比较好的网页了。谷歌自己PR值为9,百度也是9。
如今PR值虽不如以前重要了(没有区分页面内的导航链接、广告链接和功能链接导致PR值本身能够反映出的网页价值不精确,并且对新网页不友好),但是PR值还是个很重要的参考因素。
参考文献:
PageRank算法–从原理到实现
WIki