以前几个人为了应付生产实习验收,做了个渣渣搜索引擎,现在发现,那简直渣死了。稍微看了下《Mining of Massive Datasets》关于PageRank的描述,稍微整理一下(本文中所有图都出自该书)。
1. 早期搜索引擎
通过倒排索引的方法得到页面所含的词项(term),也就是一个词在哪些网页中出现,以及所在位置。当有查询时,根据查询的词在页面中出现的位置以及次数给出一个结果的排序。
这种算法在现在看来是十分荒唐的,因为我如果想要提高我的blog的排名,我完全可以在页面上写满“喵呜”,然后通过各种各样的方式(例如颜色和背景色一样)把这些垃圾文字隐藏起来。这样当有人搜索“喵”或者“喵呜”的话,我的blog排名就会非常靠前,但是,我的blog跟猫并没有半毛钱关系。
所以,谷歌做了两点改进:
- 使用PageRank算法来模拟用户的行为,也就是模拟用户在网上任意跳转,而被访问次数越多过的网站越重要
- 在判断网页内容的时候也需要考虑向该网页链接的页面的内容。
但是我们并不能通过一个页面的入链数来估计一个网页的重要性,如果做的话我们可以制造成百上千个垃圾页面都链到同一个网页,那么这个网页的入链数很高,但是很多垃圾网页都能链到的页面显然不是什么重要的页面。而且,链接在某知名网站出现和不知名的垃圾网站或广告网站里出现的概念是不一样的。
2. PageRank定义
PageRank可以想象是给网页的一个打分,分数越高表示网页的重要性越大。
首先,可以将Web上的所有网页当成节点,而链接关系可以当成是边,如果A页面中有指向B页面的链接,那么意味着节点A到节点B有一条边,指向B节点,那么这样可以把整个Web想象成一个巨大的有向图。如果一个虚拟用户在节点A,而A的出度为 Na ,那么下一步虚拟用户在A的任意一个出度节点的概率都是 1Na ,因此可以计算出转移矩阵 M 其中如果
举个例子:
这里有4个页面A、B、C、D,链接的关系有:A链向B、C、D;B链向A、D;C链向A;D链向B、C。因此,转移矩阵 M 就应该为:
其中D点有2个出链分别是B、C,因此, M24=M34=12 ,而 M14=M44=0