You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
8.9 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 049 | PageRank算法的核心思想是什么
上周我们介绍了信息搜索系统的历史进程,剖析了搜索系统的多轮打分系统,还深入探讨了倒排索引,聊了聊它的核心技术。
这周我要和你分享的是在互联网搜索引擎兴起之后的一个研发需要,那就是如何理解网页和网页之间的关系,特别是怎么从这些关系中提取网页中除文字以外的其他特性。这部分的一些核心算法曾是提高搜索引擎质量的重要推进力量。另外,我们这周要分享的算法也适用于其他能够把信息用结点与结点关系来表达的信息网络。
今天,我们先看一看用图来表达网页与网页之间的关系,并且计算网页重要性的经典算法:**PageRank**。
## PageRank的简要历史
时至今日谢尔盖·布林Sergey Brin和拉里·佩奇Larry Page作为Google这一雄厚科技帝国的创始人已经耳熟能详。但在1995年他们两人还都是在斯坦福大学计算机系苦读的博士生。那个年代互联网方兴未艾。雅虎作为信息时代的第一代巨人诞生了布林和佩奇都希望能够创立属于自己的搜索引擎。1998年夏天两个人都暂时离开斯坦福大学的博士生项目转而全职投入到Google的研发工作中。他们把整个项目的一个总结发表在了1998年的万维网国际会议上 WWW7the seventh international conference on World Wide Web见参考文献\[1\])。**这是PageRank算法的第一次完整表述**。
PageRank一经提出就在学术界引起了很大反响各类变形以及对PageRank的各种解释和分析层出不穷。在这之后很长的一段时间里PageRank几乎成了网页链接分析的代名词。给你推荐一篇参考文献\[2\],作为进一步深入了解的阅读资料。
## PageRank的基本原理
我在这里先介绍一下PageRank的最基本形式这也是布林和佩奇最早发表PageRank时的思路。
首先,我们来看一下每一个网页的周边结构。**每一个网页都有一个“输出链接”Outlink的集合**。这里输出链接指的是从当前网页出发所指向的其他页面。比如从页面A有一个链接到页面B。那么B就是A的输出链接。根据这个定义可以同样定义“**输入链接**”Inlink指的就是指向当前页面的其他页面。比如页面C指向页面A那么C就是A的输入链接。
有了输入链接和输出链接的概念后下面我们来定义一个页面的PageRank。我们假定每一个页面都有一个值叫作PageRank来衡量这个页面的重要程度。这个值是这么定义的**当前页面I的PageRank值是I的所有输入链接PageRank值的加权和**。
那么权重是多少呢对于I的某一个输入链接J假设其有N个输出链接那么这个权重就是N分之一。也就是说J把自己的PageRank的N分之一分给I。从这个意义上来看I的PageRank就是其所有输入链接把他们自身的PageRank按照他们各自输出链接的比例分配给I。谁的输出链接多谁分配的就少一些反之谁的输出链接少谁分配的就多一些。这是一个非常形象直观的定义。
然而有了这个定义还是远远不够的因为在这个定义下页面I和页面J以及其他任何页面的PageRank值是事先不知道的。也就是等式两边都有未知数这看上去是个无解的问题。
布林和佩奇在他们的论文中采用了一种迭代算法。**这个算法很直观那就是既然不知道这些PageRank的值那我们就给他们一组初始值这个初始值可以是这样的情形所有页面有相同的PageRank值**。然后根据我们上面所说的这个定义更新所有页面的PageRank值。就这么一遍一遍地更新下去直到所有页面的PageRank不再发生很大变化或者说最后收敛到一个固定值为止。他们在文章中展示了实际计算的情况往往是在比较少的迭代次数后PageRank值就能够收敛。
以上就是整个PageRank算法的基本思想和一种迭代算法。
## PageRank算法的改进
完全按照我们上面介绍的这个最原始的PageRank算法布林和佩奇很快就遇到了麻烦。
**第一个麻烦就是有一些页面并没有输出链接比如某些PDF文件或者一些图片文件**。由于没有输出链接这些页面只能聚集从上游输入链接散发过来的PageRank值而不能把自己的PageRank值分发出去。这样的结果就是这些页面成为一些“悬空”Dangling结点。**悬空结点存在的最大问题就是会使得PageRank的计算变得不收敛**。这些结点成了PageRank值的“黑洞”导致悬空结点的PageRank值越来越大直至“吸干”其他所有输入链接的值。
要解决这个问题,就要为悬空结点“引流”,能够把这些点的值分发出去、引出去。**谢尔盖和拉里找到的一个方法是,对于每一个悬空结点,都认为这个结点能够随机到达整个网络上的其他任意一个结点**。也就相当于人工地从这个结点连接到所有页面的一个结点让当前悬空结点的PageRank能够“均匀”地分散出去到其他所有的结点这就解决了悬空结点的问题。
然而原始的PageRank还存在其他问题。要想保证PageRank的收敛性并且能够收敛到唯一解我们还需要第二个改进。**第二个改进就是,即便一个页面有自然的输出链接,我们也需要一个机制,能够从这个页面跳转到其他任何一个页面**。这也就是模拟假设一个用户已经浏览到了某个页面,一方面用户可以顺着这个页面提供的输出链接继续浏览下去,另一方面,这个用户可以随机跳转到其他任何一个页面。
有了这个机制以后对于所有的结点来说PageRank的分配也就自然地产生了变化。在之前的定义中每个页面仅仅把自己的PageRank值输送给自己原生的所有输出链接中。而现在这是一部分的“分享”另外一部分还包括把自己的PageRank值分享到所有的页面。当然后者的总量应该比前者要少。于是**这里可以引入一个参数,来控制有多大的比例我们是顺着输出链接走,而多大的比例跳转其他页面**。通常情况下这个参数的取值范围大约是60%~85%。
有了这两个改进之后,整个网络上的每个页面实际上已经可以到达其他任何页面。也就是说,**整个页面网络成了一个完全联通的图PageRank算法就有了唯一的收敛的解**。
## PageRank分析
PageRank被提出后不久就有学者开始针对PageRank模型和算法的性质进行分析。大家很快发现还有一些其他的方法可以对PageRank进行解释。
**第一种比较流行的也是更加正规的解释PageRank的方法是把我们刚才说的这个分配等式写成矩阵的形式**。那么,整个算法就变成了一个标准的求解一个随机矩阵的“左特征向量”的过程。这个随机矩阵就是我们刚才讲的经过了两次修改后的跳转规律的矩阵形式。而刚才所说的迭代方法正好就是求解特征向量的“**乘幂法**”Power Method。在一定条件下的随机矩阵经过乘幂法就一定能够得到一个唯一解。
**另外一种解释是把刚才我们说的这个矩阵形式进行一次代数变形也就是把等式两边的各项都移动到等式的一边而另一边自然就是0**。那么整个式子就变了一个“线性系统”的求解过程。也就是说从代数的角度来解释整个PageRank的求解过程。
## 小结
今天我为你讲了现代搜索技术中的一个重要分支链接分析中最重要的算法PageRank的核心思想 。 一起来回顾下要点第一我们讲了PageRank的一些简明历史和算法最原始的定义和思路 。第二我们讲了PageRank的两种改进。第三我们简要地介绍了针对PageRank的两种解释方法。
最后给你留一个思考题除了乘幂法你觉得还有什么方法可以用来求解PageRank值
欢迎你给我留言,和我一起讨论。
**参考文献**
1. Sergey Brin and Lawrence Page. The anatomy of a large-scale hypertextual Web search engine. _Proceedings of the seventh international conference on World Wide Web 7 (WWW7)_, Philip H. Enslow, Jr. and Allen Ellis (Eds.). Elsevier Science Publishers B. V., Amsterdam, The Netherlands, The Netherlands, 107-117, 1998.
2. Langville, Amy N.; Meyer, Carl D. Deeper Inside PageRank. _Internet Math_. no. 3, 335-380, 2003.
**论文链接**
* [The anatomy of a large-scale hypertextual Web search engine](http://infolab.stanford.edu/~backrub/google.html)
* [Deeper Inside PageRank](http://meyer.math.ncsu.edu/Meyer/PS_Files/DeeperInsidePR.pdf)