一、欢迎度历史
1998年 Jon Kleinberg致力于HITS的万维网搜索引擎项目,其中的算法使用了万维网的超链接结构来改进搜索引擎所得的结果。
同时,在离他很近的斯坦福大学里,两名博士生正在从事一项名为PageRank的类似项目,分别是Sergey Brin和Larry Page。
这两个模型之间的联系令人吃惊。然而,Jon并未试图将HITS发展成为一家公司,不过后来企业家们却试着去做了,并因此而赋予了HITS那迟到的商业成功。搜索引擎Teoma的技术基础就是HITS算法的一个扩展。
在介绍之前,我们先将万维网的超链接结构形成一个巨大的有向图,有向链接分为岀链和入链。
网络有向图
1.1 PageRank
Pagerank的论点是,如果一个网页被其他重要的页面所指向,那它就是重要的。值得注意的是,推荐者的地位对推荐的作用是有一定联系的,也与推荐者推荐的总数有所关联。
1.2 HITS
HITS定义了枢纽(hub)和权威(authority),这是网页的属性,当然一个网页可以两者都是。
论点是,如果一个页面指向好的权威网页,那它就是一个好的枢纽网页(从而配上一个高的枢纽评分);而如果一个网页被好的枢纽网页所指向,那它就是一个好的权威网页。
1.3 查询相关性
如果每个页面的欢迎度评分是离线确定的,并且对于无论哪个查询而言(直至下次更新前)均保持恒定,则排名称为查询无关的
PageRank是查询无关的,HITS的原始版本是查询相关的。它们二者都可以修改为相反的那个类型。
二、谷歌的PageRank数学
2.1 求和公式
某个页面的Pi的PageRank记为r(Pi),它是所有指向Pi的页面的PageRank之和。
r(Pi)=∑Pj∈BPir(Pj)|Pj|
Bpi为指向Pi的页面集合,|Pj|是由Pj发出的岀链数量。
通过迭代的方式,解决通过未知页面的PageRank值得出另外未知页面的PageRank值。为了定义这一迭代过程,我们引入更多的记号,令rk+1(Pi)表示为页面Pi在第k+1次循环时的PageRank,则
rk+1(Pi)=∑Pj∈BPirk(Pj)|Pj|(1)
将所有页面Pi均具有r0(Pi)=1/n开始,并一直重复下去,直至收敛到稳定值。
2.2求和方程的矩阵表示
打个比方,以下面这个图为例
我们引入一个n x n阶的矩阵H和一个1 x n阶的行向量πT。矩阵H是一个行归一化超链接矩阵,则上图相应H为:
H=???????????001/30001/201/30001/20000000001/21001/31/2000001/21/20???????????
向引入行向量π(k)T,它表示在第k次循环时的PageRank向量。则(1)式可表示为:
π(k+1)T=π(k)TH(2)
从这个H矩阵可以看出一些端倪,书中总结出4个,我觉得关键在于在计算中通过矩阵计算降低复杂度,这在现实中是个稀疏矩阵,复杂度对于理论来说由平方降为1次。
2.3迭代过程问题
是否会收敛?收敛到唯一向量吗?是否与初始向量有关?收敛时间?
以下分析为两位Google创始人解决的迭代问题。
布林和佩奇最初利用π(0)T=1/neT来开始迭代过程,但这可能导致排名下沉(rank sink),譬如出现多个0,可比性降低,排名下沉很大程度上与悬挂节点(岀链为0)的出现有关。
为了解决这个问题,他们使用了随机上网者的概念,对H矩阵进行调整,随机上网者特点为:
- 随机岀链,包括悬挂节点
- 随机上网者在某个特定页面上所停留的时间比例便是该页面相对重要性的一个度量
于是,我们将H矩阵变为随机矩阵S:
S=???????????01/61/30001/21/61/30001/21/6000001/6001/2101/61/31/20001/601/21/20???????????
可以证明,S是由H的一个秩一修正所给出的,即S=H+a(1/neT),其中,若页面i为悬挂结点则ai=1,否则为0。二值向量a为悬挂结点向量,为列向量。
然而,仅靠这一点还不够,未能达成存在唯一的正向量πT ,且方程能很快地收敛到πT。要做到这一点,布林和佩奇做了另外一个调整,所谓的素性调整。有了这个调整,所得的矩阵就是随机的并且是素的。一个素矩阵是不可约的并且非周期的,因此,链的稳态向量存在且唯一。
转换为素矩阵是基于这样一个论述的。上网者有时会在浏览器URL地址栏输入一个新的目的地,为了对这个行为进行数学建模,布林和佩奇创造了一个新的矩阵G如下:
G=αS+(1?α)1/neeT
式中,a是一个0到1的标量(在之后的章节会反复提到a在谷歌中取0.85),表示随机上网者根据万维网的超链接结构进行浏览的时间百分比。G成为谷歌矩阵,E=1/neeT可称为跳转矩阵,是均匀分布的,即在进行跳转时是公平跳转。
在书中,分为6点简单概括G带来的后果:
- G是随机的。
- G是不可约的。
- G是非周期的,Gii>0导致。
- G是素的。
- G是完全稠密的。从计算的角度,这是很糟糕的。但G可以写为非常稀疏的超链接矩阵H的秩一修正。
G=αS+(1?α)1/neeT=α(H+a(1/neT))+(1?α)1/neeT=αH+[α(a)+(1?α)e]1/neT
因此,谷歌修正后的PageRank法为
π(k+1)T=π(k)TG
2.4 PageRank向量的计算
将求解πT转换为如下特征向量问题
πT=πTGπTe=1
将求解πT转换为求解如下的性齐次系统:
πT(E?G)=0TπTe=1
第一个系统为找到对应于主特征值λ1=1的G的归一化主左特征向量。在第二个系统中,目标则是找到E-G的归一化左零向量。两个系统均服从归一化方程πTe=1,该方程确保πT是一个概率向量。
2.4.1 幂法计算
PageRank矩阵G的特点使得幂法成为了显而易见的最佳选择。幂法是求取矩阵主特征值和特征向量的最古老同时也是最简单的迭代方法之一。缺点的计算速度缓慢。
π(k+1)T=π(k)TG=αS+(1?α)1/nπ(k)TeeT=α(H+a(1/neT))+(1?α)1/neeT=απ(k)TH+[απ(k)Ta+1?α]eT/n
式中,向量-矩阵乘法απ(k)TH执行于H这个极端稀疏的矩阵之上,而S和G从来就没有被实际生成或存储过,每个向量-矩阵乘法的复杂度为O(n),因为H的每一行有差不多10个非零元素,这就是使用幂法的主要原因。
这里还有几个优点:
- 幂法中矩阵系数仅通过向量-矩阵乘法运算的程序来进行访问,而没有实际对矩阵加以操作。
- 幂法存储方面,除了稀疏矩阵H和悬挂结点向量a之外,就只需要保存\alpha \pi^{(k)T}$了,这个向量是完全稠密的。
- 迭代次数仅需50~100次。
为什么仅需50次呢,解释一下,在马尔科夫链理论中给出了答案,一般而言,应用于某个矩阵的幂法的渐进收敛速率依赖于绝对值最大的两个特征值λ1和λ2的比值。确切来说,渐进收敛速率就是|λ/λ1|k→0的速率。
对于G这样的随机矩阵,λ1=1,由于G也是素的,因此|λ2|<1。
通过一些理论的支撑,有以下关系:
λk=αμk
其中μk<=1
在万维网结构中,μk约等于1,因此,|μ2(G)|≈α。
因此,渐进收敛速率在50次的情况为:
α50=0.8550≈0.000296
即在第50次迭代时,可以期望近似PageRank向量的精度大约为小数点后2~3位。这个精度已经足够了,当然要真正区分需要小数点后10位精度,但是当PageRank评分和内容评分结合起来之后,高精度就变得不那么重要了。