文章目录
一、简介
要问搜索引擎是什么,很多人第一反应就是以百度,谷歌,雅虎为代表的搜索引擎。这些搜索引擎往往基于不同的算法,将分布于全球数百万机器上中最有价值的链接按价值的Ranking返回给查询者。长时间以来,网页搜索排名一直是互联网行业最具挑战的任务。本文将介绍几个典型的算法及应用。
二、PageRank
PageRank是谷歌创始人拉里佩奇和谢尔盖布林在斯坦福大学开发的推荐算法。它利用了超文本信息中丰富的链接信息,通过link-based的方法分析网页的价值。PageRank从两个方面去分析网页的价值:
- 入链数量:是否有足够多的网页将链接指向它。
- 入链质量:是否有足够重量级的网站将链接指向它。
2.1计算公式
2.1.1 原始PR算法
最初的PageRank公式如下,一个网页
A
A
A的价值
P
R
(
A
)
PR(A)
PR(A)为
P
R
(
A
)
=
∑
i
∈
T
P
R
(
T
i
)
C
(
T
i
)
PR(A)=\sum_{i\in T}\dfrac{PR(T_i)}{C(T_i)}
PR(A)=i∈T∑C(Ti)PR(Ti)
其中
T
T
T是指向网页
A
A
A的网页集,
C
(
T
i
)
C(T_i)
C(Ti)是网页
T
i
T_i
Ti的出链数量。这里举个例子,假设ABCD网页遵循如下链接结构:
那么第一个迭代时,
P
R
(
A
)
=
P
R
(
C
)
/
1
=
1
PR(A)=PR(C)/1=1
PR(A)=PR(C)/1=1,
P
R
(
C
)
=
P
R
(
A
)
/
2
+
P
R
(
B
)
/
1
+
P
R
(
D
)
/
1
=
2.5
PR(C)=PR(A)/2+PR(B)/1+PR(D)/1=2.5
PR(C)=PR(A)/2+PR(B)/1+PR(D)/1=2.5, 依此类推。
2.1.2 Rank Sink问题与改良版PR
试想这么一种情况,两个页面 X , Y X, Y X,Y相互指向对方,但是却不再指向其他页面了,其他页面却有指向这两个页面的入链。根据 P R ( A ) = ∑ i ∈ T P R ( T i ) C ( T i ) PR(A)=\sum_{i\in T}\dfrac{PR(T_i)}{C(T_i)} PR(A)=∑i∈TC(Ti)PR(Ti)的公式, C ( X ) = C ( Y ) = 1 C(X)=C(Y)=1 C(X)=C(Y)=1, P R ( X ) = P R ( Y ) + ∑ i ∈ T − ( X , Y ) P R ( T i ) / C ( T i ) PR(X)=PR(Y)+\sum_{i\in T-(X,Y)}PR(T_i)/C(T_i) PR(X)=PR(Y)+i∈T−(X,Y)∑PR(Ti)/C(Ti), P R ( Y ) = P R ( X ) + ∑ i ∈ T − ( X , Y ) P R ( T i ) / C ( T i ) PR(Y)=PR(X)+\sum_{i\in T-(X,Y)}PR(T_i)/C(T_i) PR(Y)=PR(X)+i∈T−(X,Y)∑PR(Ti)/C(Ti)X和Y的PR值会只增不减,只在这两个链接之间传递,如同黑洞一般吞噬其他页面的PR值。这种现象也被称为Rank Sink。
改良版的Page Rank引进了阻尼系数
d
d
d(damping factor),意义是浏览网页A的用户有
d
d
d的可能继续向后浏览,有
1
−
d
1-d
1−d的可能停止浏览,随机跳到新的URL中。改良后的PageRank公式为
P
R
(
A
)
=
(
1
−
d
)
+
d
∑
i
∈
T
P
R
(
T
i
)
C
(
T
i
)
PR(A)=(1-d)+d\sum_{i\in T}\dfrac{PR(T_i)}{C(T_i)}
PR(A)=(1−d)+di∈T∑C(Ti)PR(Ti)以上面的ABCD链接结构为例子,假设阻尼系数
d
d
d为1.5
一般来说,经过数轮迭代的PR值都会收敛,搜索引擎可以隔一段时间就离线跑一遍PR算法,收敛后的数据能直接提供给线上查询。
PageRank矩阵表示
我们将上述公式以线性代数的方式表示。
假设所有网页的PR值都以一个矩阵表示
R
=
[
P
R
(
P
1
)
P
R
(
P
2
)
.
.
.
P
R
(
P
N
)
]
R=\begin{bmatrix}PR(P_1)\\PR(P_2)\\...\\PR(P_N)\end{bmatrix}
R=⎣⎢⎢⎡PR(P1)PR(P2)...PR(PN)⎦⎥⎥⎤
令H为链接矩阵:如果
P
i
P_i
Pi指向
P
j
P_j
Pj,
H
(
i
,
j
)
=
1
H(i,j)=1
H(i,j)=1,否则
H
(
i
,
j
)
=
0
H(i,j)=0
H(i,j)=0,那么迭代方程可以被表示为
R
=
1
−
d
N
+
d
H
R
R=\frac{1-d}{N}+dHR
R=N1−d+dHR
我们定义转移矩阵
A
=
d
H
+
1
−
d
N
e
e
T
A=dH+\frac{1-d}{N}ee^T
A=dH+N1−deeT
PR值得计算如下,其中
R
n
R_n
Rn为第n次迭代时的
R
R
R矩阵:
R
n
+
1
=
A
R
n
R_{n+1}=AR_n
Rn+1=ARn
该收敛过程可以通过幂方法和特征方程法去求解。
幂方法的思想是迭代。令赋予 R R R每一个页面随机PR值,然后通过 R n + 1 = A R n R_{n+1}=AR_n Rn+1=ARn不断迭代,在收敛不等式 ∣ R n + 1 − R n ∣ < ϵ |R_{n+1}-R_{n}|<\epsilon ∣Rn+1−Rn∣<ϵ满足后,停止迭代。
特征值法更接近问题本质。回忆一下特征值的公式, A x = λ x Ax=\lambda x Ax=λx, x x x是特征向量, λ \lambda λ是特征向量。求 R R R其实就是当A矩阵特征值 λ = 1 \lambda=1 λ=1时,特征向量 x x x的值,因为 x = R , λ = 1 x=R, \lambda=1 x=R,λ=1时, A x = λ x ⇒ A R = R Ax=\lambda x\Rightarrow AR = R Ax=λx⇒AR=R 。
由此,我们需要注意的另一个问题就是dangling node问题,dangling node是无出链的网页,它在 H H H矩阵中向量为全0,但是这样的数据会导致矩阵的秩下降,从而无法求解矩阵的特征值。这种情况我们对 H H H矩阵中全0的列进行改写:如果网页 i i i是dangling node,对所有网页 j j j,令 h i , j = 1 N h_{i,j}=\frac{1}{N} hi,j=N1。
三、HITS
HITS(Hyperlink-Induced Topic Search)是一个跟PageRank同期推出的link-based排名方法。在HITS算法中,每一个页面都有两个属性:hub和authority。hub,有中枢之意,用于衡量出链的authority之和;authority,指页面的权威,用入链的hub之和进行衡量。
- p网页的auth可以表示为 x p = ∑ q ∣ q → p y p x_p=\sum_{q|q\to p}y_p xp=∑q∣q→pyp
- p网页的hub可以表示为 x p = ∑ q ∣ p → q x q x_p=\sum_{q|p\to q}x_q xp=∑q∣p→qxq
HITS算法跟PageRank最大的不同是,HITS是一个线上的query-based的算法。它只有在用户输入特定的topic之后,将包含该topic的所有网页列举出来,然后实时用HITS算法计算出Authority值最高的网页返回给用户,这种算法注定了处理的网页集不能太大。
3.1 HITS计算
跟PageRank类似,HITS算法也需要迭代计算状态,在收敛方程满足后停止迭代,而且HITS也可以用矩阵的方式进行计算,假设Authority矩阵为 X = < x 1 , x 2 , . . . , x n > X=<x_1,x_2,...,x_n> X=<x1,x2,...,xn>,Hub矩阵为 Y = < y 1 , y 2 , . . . , y n > Y=<y_1,y_2,...,y_n> Y=<y1,y2,...,yn>,A为邻接矩阵。那么这个迭代可以被表示为
- 第一次迭代
- X 1 → A T Y 0 X_1 \to A^TY_0 X1→ATY0
- Y 1 → A X 0 Y_1 \to AX_0 Y1→AX0
- 第二次迭代
- X 2 → A T Y 1 → ( A T A ) X 0 X_2 \to A^TY_1\to(A^TA)X_0 X2→ATY1→(ATA)X0
- Y 2 → A X 0 → ( A A T ) Y 0 Y_2 \to AX_0\to(AA^T)Y_0 Y2→AX0→(AAT)Y0
- 第三次迭代
- X 3 → A T Y 2 → ( A T A ) A Y 0 X_3 \to A^TY_2\to(A^TA)AY_0 X3→ATY2→(ATA)AY0
- Y 3 → A X 2 → ( A A T ) A X 0 Y_3 \to AX_2\to(AA^T)AX_0 Y3→AX2→(AAT)AX0
- 第四次迭代
- X 4 → A T Y 3 → ( A T A ) 2 X 0 X_4 \to A^TY_3\to(A^TA)^2X_0 X4→ATY3→(ATA)2X0
- Y 4 → A X 3 → ( A A T ) 2 Y 0 Y_4 \to AX_3\to(AA^T)^2Y_0 Y4→AX3→(AAT)2Y0
聪明的小伙伴已经发现规律了, X 2 n = ( A T A ) n X 0 X_{2n}=(A^TA)^nX_0 X2n=(ATA)nX0, Y 2 n = ( A A T ) n Y 0 Y_{2n}=(AA^T)^nY_0 Y2n=(AAT)nY0, 收敛与否基于 A A T AA^T AAT和 A T A A^TA ATA的值,能否用幂方法求得收敛。收敛条件是什么?假设它会收敛,收敛于 ( A A T ) n = x (AA^T)^n=x (AAT)n=x,一定有 ( A A T ) 2 x = x (AA^T)^2x=x (AAT)2x=x,又是喜闻乐见的特征方程!而且 A A T AA^T AAT是对称矩阵,n*n的实对称矩阵一定有 n n n各特征值(包括重根),所以是有解的。最终 x x x一定会收敛至特征向量处。为了保证 λ = 1 \lambda=1 λ=1,我们需要在每次迭代后对其进行正则化。这样就能通过幂方法迭代求得最终结果。
四、其他应用
除了搜索引擎,link-based ranking在其他领域也有被使用到。
4.1 引用矩阵Bibliometrics
搞科研的应该对一个概念很熟悉——影响因子(Impact factor)。影响因子可以用来评价一个期刊被引用数量,作为整个期刊的含金量的代表。假设 C n ( x , y ) C_n(x,y) Cn(x,y)为当年 x x x刊物引用第 n n n年 y y y刊物总次数, C n ( x ) C_n(x) Cn(x)为第 n n n年 x x x刊物的论文发文量总和,某刊物 x x x在第 n n n年的影响因子为 I F ( x ) = C n − 1 ( y , x ) + C n − 2 ( y , x ) C n − 1 ( y ) + C n − 2 ( y ) IF(x)=\dfrac{C_{n-1}(y,x)+C_{n-2}(y,x)}{C_{n-1}(y)+C_{n-2}(y)} IF(x)=Cn−1(y)+Cn−2(y)Cn−1(y,x)+Cn−2(y,x)
4.2 经济学
比较经典的是列昂惕夫生产函数。该模型可以用于均衡要素投入量的比例,使得供需达到平衡。因该模型列昂惕夫也获得了第五届诺贝尔经济学奖。
该模型规定某一个行业的投入和产出,以图和矩阵的形式表示其关系,用类似于PageRank的幂方法求得最终平衡点,是经典的线性代数问题。