我们感兴趣的是,在有像超级链接构造那样的互相参照关系的时候,定量地知道哪一个页面是最「重要」的。
换句话大胆地说,这个也就是严密计算「应该从哪一页开始读取」这个指标的过程。
就算从谁都不看的小页面开始读取也没有办法。
那么,一般地说为了使得像 Web 那样的超级链接构造能够反映在在排列次序上,需要在计算机上建立超级链接构造的数字模型。
怎么模型化需要取决于安装者的方针所以一概而论,但是如果应用图表理论来观察超级链接构造的话,最终常常回到线形代数考虑方法上去。
这对于 PageRank 也是一样的。
计算方法的原理
作为最基本的考虑方法,就是用行列阵的形式来表达链接关系。从页面 i 链接到另一张页面 j 的时,将其成分定义为1,反之则定义为 0 。
即,行列阵 A 的成分 aij 可以用 aij=1 if (从页面 i 向页面 j 「 有 」 链接的情况)
0 if (从页面 i 向页面 j 「没有」链接的情况)
来表示。文件数用 N 来表示的话,这个行列阵就成为 N×N 的方阵。
这个相当于在图表理论中的「邻接行列」。
也就是说,Web 的链接关系可以看做是采用了邻接关系有向图表 S。
总而言之,只要建立了链接,就应该有邻接关系。
(*注)由点和点连接的线构成的图形被称为「图表(graph)」。这些点被称为「顶点(vertex)」或者「节点(node)」;这些线被称为「边(edge)」或者「弧(arc)」。
图表分为两类,“边”没有方向的图表被称为「无向图表(undirected graph)」,“边”带有方向的图表被称为「有向图表(directed graph)」。
把有向图表想像成单向通行的道路就可以了。
图表能用各种的方法来表示,但一般用在数据结构上的是「邻接行列(adjacency matrix)」和「邻接列表(adjacency list)」。
需要注意的是,如果是无向图表,邻接行列 A 就成为了对称行列,而如果是有向图表,A 就会成为不对称行列。
以下是用位图表示的 Apache 的在线手册(共128页)的邻接行列。
当黑点呈横向排列时,表示这个页面有很多正向链接(即向外导出的链接);反之,当黑店呈纵向排列时,表示这个页面有很多反向链接。
PageRank 的行列阵是把这个邻接行列倒置后(行和列互换),为了将各列(column)矢量的总和变成 1 (全概率), 把各个列矢量除以各自的链接数(非零要素数)。
这样作成的行列被称为「推移概率行列」,含有 N 个概率变量,各个行矢量表示状态之间的推移概率。
倒置的理由是,PageRank 并非重视「链接到多少地方」而是重视「被多少地方链接」。
PageRank 的计算,就是求属于这个推移概率行列最大特性值的固有矢量(优固有矢量)。
这是因为,当线性变换系 t→∞ 渐近时,我们能够根据变换行列的"绝对价值最大的特性值"和"属于它的固有矢量"将其从根本上记述下来。
换句话说,用推移概率行列表示的概率过程,是反复对这个行列进行乘法运算的一个过程,并且能够计算出前方状态的概率。
再者,虽然听起来很难,但是求特性值和固有矢量的值是能够严密分析的一种基础的数学手段。
我们能够自由地给矢量的初始值赋值,但是因为不断地将行列相乘,得到的矢量却会集中在一些特定数值的组合中。
我们把那些稳定的数值的组合称为固有矢量,把固有矢量中特征性的标量(scalar)称为特性值,把这样的计算方法总称为分解特性值,把解特性值的问题称为特性值问题。
(*注) 对 N 次的正方行列 A 把满足 Ax =λx 的数 λ 称为 A 的特性值,称 x 为属于 λ 的固有矢量。
如果你怎么也不能适应行列的概念的话,你也可以考虑 N×N 的二元排列就可以了。同时,也可以把矢量考虑成为长度为 N 的普通的(一元)排列就可以了。
简单的例子
让我们用简单的例子来试着逐次计算 PageRank 。
首先考虑一下有像下图表示那样的链接关系的7个HTML文件。
并且,这些HTML文件间的链接关系只是闭合于这1-7的文件中。
也就是说,除了这些文档以外没有其他任何链接的出入。另外请注意,所有的页面都有正向和反向链接(即没有终点)。
首先,把这张推移图图表构造的邻接列表表示为排列式,就有以下式子。即,根据各个链接源ID列举链接目标的ID。链接源I D 链接目标 ID
1 2,3 ,4,5, 7
2 1
3 1,2
4 2,3,5
5 1,3,4,6
6 1,5
7 5
以这个邻接列表中所表示的链接关系的邻接行列 A 是以下这样的 7×7 的正方行列。
一个仅有要素 0 和 1 位图行列(bitmap matrix)。横向查看第 i 行表示从文件 i 正向链接的文件ID。A = [
0, 1, 1, 1, 1, 0, 1;
1, 0, 0, 0, 0, 0, 0;
1, 1, 0, 0, 0, 0, 0;
0, 1, 1, 0, 1, 0, 0;
1, 0, 1, 1, 0, 1, 0;
1, 0, 0, 0, 1, 0, 0;
0, 0, 0, 0, 1, 0, 0;
]
PageRank 式的推移概率行列 M ,是将 A 倒置后将各个数值除以各自的非零要素后得到的。
即以下这个 7×7 的正方行列。横向查看第 i 行非零要素表示有指向文件 i 链接的文件ID(文件 i 的反向链接源)。
请注意,各纵列的值相加的和为 1(全概率)。M = [
0, 1, 1/2, 0, 1/4, 1/2, 0;
1/5, 0, 1/2, 1/3, 0, 0, 0;
1/5, 0, 0, 1/3, 1/4, 0, 0;
1/5, 0, 0, 0, 1/4, 0, 0;
1/5, 0, 0, 1/3, 0, 1/2, 1;
0, 0, 0, 0, 1/4, 0, 0;
1/5, 0, 0, 0, 0, 0, 0;
]
表示 PageRank 的矢量 R (各个的页面的等级数的队列),存在着 R = cMR 的关系(c 为定量)。
在这种情况下,R 相当于线形代数中的固有矢量,c 相当于对应特性值的倒数。为了求得 R ,只要对这个正方行列 M 作特性值分解就可以了。
在此,我们就暂且使用决 GNU Octave 这个计算程序实际计算一下特性值和固有矢量。
(*注) GNU Octave ,是支持数值计算,类似于描述性出色的 MATLAB 的编程语言。
扩展后的处理语言更适合于行列演算,但基本上和C语言的语风相像,因此可读性很高。详细请参照 http://www.octave.org/。
当然,除了Octave以外 MATLAB 和 Scilab 也是非常不错的语言,但是根据 GPL, Octave 是最容易得到的。