谷歌三驾马车——mapreduce,page rank,google file system。
PageRank 算法不止可以让用户搜索到自己关心的内容,也往往能让质量更高的网页得以排到更前的位置,同时它也是一个典型的 MapReduce 的应用场景。
基于引用的排名
思想源于学术论文的引用次数,高引用的文章一般来说被认为是质量高的文章。
被更多超链接指向的网页,可以推断它往往会有更好的质量,因为当时许多 HomePage 类的导航网站都会链接到一些提供优质服务的网站,如果一个网站质量很差,自然也不会被太多链接所指向。
但不同网页的链接,所代表的权重应该是不同的
假设 u 代表了某一个网页;Fu 代表 u 所指向的网页集合,Nu 代表 Fu 集合的大小;Bu 代表指向 u 的网页集合;c 是一个因子,用来保持所有网页权重之和是一个常数。
R(u) 表示网页 u 的权重
不太好理解,看一个例子:
出度权重的计算:
左上权重为100,出度为2,那么我们认为他的每条出度权重即为50
入度权重的计算:
右上网页入度有两个,一个是被二分的100,就是50,另一个是被三分的9,就是3.所以被指向的这个网页的权重即为50+3=53;
如何初始化权重
无论怎么初始化权重,最终都会趋于平稳,数学上这个问题被称为马氏链平稳状态定理。
在更大的图上,这样的收敛性质,在所有节点强连通的情况下依然是可以得到保障的。所以在有限次的计算中,一旦给定了网页链接图,所有网页的权重都是收敛到一个稳定值的。那么在搜索的时候我们基于这个权重来做排名,就可以得到一个比较优的搜索结果了。
特殊问题1——Dangling link——有入无出
指的是那些有入边但是没有出边的节点,在网页链接图中,有这样的节点存在会导致很大的问题。
解决方法:直接移出,等剩余网络收敛,再加入回去计算权重,但不影响已经收敛的权重
这样的节点对其他节点权重的计算没有任何贡献,既然让它们参与计算会导致所有权重收敛为 0,不如直接把它们都移除
不过这个移除过程可能会导致新的 Dangling links 产生,所以整个过程需要迭代地进行,直到剩余的网页中不再存在 Dangling links。当然,被移除的额外节点会对整个马氏链的计算产生一定影响,但是 Larry Page 认为这个影响在谷歌搜索引擎收纳的巨量网页前是可以接受的。
移除后,等新的网页链接图上的计算收敛,我们再把被移除的节点加入图中,进行权重计算,但是不去修改所有已经收敛的权重,这样就可以得到全部网页的权重了。
特殊问题2——spider traps
指虽然有出度,但是指向自己
和上面一个问题导致的结果一样,会导致所有权重都集中在这一个节点上。
pagerank运行之后,很有可能各个节点之间的权重分布是不均匀的,某一些网络边缘的节点入度很少,权重就几乎为0,而另一部分权重则极大。导致两极分化。
解决方法:增加跳转因子,使某些权重小的节点不至于出现几乎没有权值的情况,以抑制蜘蛛陷阱
添加了跳转因子 β 后,每个新的权重计算就不只依赖原图中的链接,还考虑了雨露均沾的跳转因子。这样,Spider Traps 就会被抑制了,至少不会出现某些节点上几乎没有权重的情况,可以得到一个比较合理的网页排名权重。