在PageRank发明之前,搜索引擎采用的还是最原始的关键字匹配技术,于是呢在搜索结果中经常会遇到「挂羊头卖狗肉」的垃圾网站,对这些网站,当时的Yahoo采用还是人工清理的方法。这时候Google的两位创始人Page和Brin就在想,有没有一种算法,能够给出网页重要性的排序呢?这样就可以优先推荐重要网页,而让那些垃圾网页石沉大海了。
Page和Brin发现,网页的超链接结构中就蕴含了重要程度的信息。由于一个网页的超链接指向的主要是与其内容相关的网页,那么我们不难想象,如果有许多网页都同时指向某一个网页,这个网页就一定非常重要。
PageRank的核心思想:
首先,我们将Web做如下抽象:1、将每个网页抽象成一个节点;2、如果一个页面A有链接直接链向B,则存在一条有向边从A到B(多个相同链接不重复计算边)。因此,整个Web被抽象为一张有向图。
现在假设世界上只有四张网页:A、B、C、D,其抽象结构如下图:
当一个用户停留在某页面时,跳转到页面上每个被链页面的概率是相同的。例如,上图中A页面链向B、C、D,所以一个用户从A跳转到B、C、D的概率各为1/3。设一共有N个网页,则可以组织这样一个N维矩阵:其中i行j列的值表示用户从页面j转到页面i的概率。这样一个矩阵叫做转移矩阵(Transition Matrix)。
下面的转移矩阵M对应上图:
要满足收敛性,需要具备一个条件:图是强连通的,即从任意网页可以到达其他任意网页
否者使用矩阵连续相乘就会出现两种问题:1.终止点问题;2.陷阱问题
1.如果有些网页不指向其他网页(可能是垃圾网页),如果按照上面的计算,上网者到达这样的网页后便走投无路、四顾茫然,导致前面累计得到的转移概率被清零,这样计算下去得到的概率分布向量所有元素几乎为0。
2.上网者跑到C网页后,就像跳进了陷阱,陷入了漩涡,再也不能从C中出来,将最终导致概率分布值全部转移到C上来,这使得其他网页的概率分布值为0,从而整个网页排名就失去了意义。
解决终止点问题和陷阱问题
地址栏输入而跳转到各个网页的概率是1/n;
上网者每一步查看当前网页的概率为a,那么从浏览器地址栏跳转的概率为(1-a)
[注]采用矩阵相乘, 不断迭代,直到迭代前后概率分布向量的值变化不大,一般迭代到30次以上就收敛了,取e为所有分量都为1/n的列向量。真的web结构的转移矩阵非常大,目前的网页数量已经超过100亿, 转移矩阵是100亿*100亿的矩阵,直接按矩阵乘法的计算方法不可行,需要借助Map-Reduce的计算方式来解决。
借助Map-Reduce的计算方式 参考链接:PageRank算法–从原理到实现
PageRank算法的缺点
这是一个天才的算法, 原理简单但效果惊人。 然而, PageRank算法还是有一些弊端。
第一, 没有区分站内导航链接。 很多网站的首页都有很多对站内其他页面的链接, 称为站内导航链接。 这些链接与不同网站之间的链接相比,肯定是后者更能体现PageRank值的传递关系。
第二, 没有过滤广告链接和功能链接(例如常见的“分享到微博”)。这些链接通常没有什么实际价值, 前者链接到广告页面, 后者常常链接到某个社交网站首页。
第三, 对新网页不友好。一个新网页的一般入链相对较少,即使它的内容的质量很高,要成为一个高PR值的页面仍需要很长时间的推广。
PageRank算法 —主要参考使用
浅析PageRank算法 —背景介绍的很清楚,通俗易懂
PageRank算法–从原理到实现 —有算法的实现部分,很值得阅读