搜索引擎如何推荐网页
搜索引擎如何推荐网页?
Google 的选择是 PageRank。
PageRank,又称网页排名、谷歌左侧排名、PR,是Google公司所使用的对其搜索引擎搜索结果中的网页进行排名的一种算法。
PageRank 与矩阵的关系
我们先来看下 PageRank 是如何计算的。我假设一共有 4 个网页 A、B、C、D。它们之间的链接信息如图所示:
与图形对应的简化公式可以表示为:
我们再来对比看看矩阵点乘的计算公式。
以上两个公式在形式上是基本一致的。
因此,可以把 PageRank 简化公式的计算,分解为两个矩阵的点乘。一个矩阵是当前每张网页的 PageRank 得分,另一个矩阵就是邻接矩阵。所谓邻接矩阵,其实就是表示图结点相邻关系的矩阵。
为了方便理解,用下面这个拓扑图作为例子详细解释。
基于上面这个图,原始矩阵为:
有了上述这个邻接矩阵,我们就可以开始最简单的 PageRank 计算。PageRank 的计算是采样迭代法实现的。这里我把初始值都设为 1,并把第一次计算的结果列在这里。
已经成功迈出了第一步,但是还需要考虑随机跳转的可能性。
可以把上述公式分解为如下两个矩阵的点乘:
仍然使用前面的例子,来看看经过随机跳转之后,PageRank 值变成了多少。这里 α 取 0.9。
我们前面提到,PageRank 算法需要迭代式计算。为了避免计算后的数值越来越大甚至溢出,我们可以进行归一化处理,保证所有结点的数值之和为 1。经过这个处理之后,我们得到第一轮的 PageRank 数值,也就是下面这个行向量:
[0.37027027 0.24864865 0.37027027 0.00540541 0.00540541]
接下来,我们只需要再重复之前的步骤,直到每个结点的值趋于稳定就可以了。
PageRank 的程序实现
这个过程的 Python 实现:
运行结果如图:
有一个关于图论和网络建模的工具叫 NetworkX,它是用 Python 语言开发的工具,内置了常用的图与网络分析算法,可以方便我们进行网络数据分析。
希拉里邮件事件相信你也有耳闻,对这个数据的背景我们就不做介绍了。你可以从 GitHub 上下载这个数据集:https://github.com/cystanford/PageRank。
执行后可以得到如下图示:
参考
https://zh.wikipedia.org/wiki/PageRank
https://time.geekbang.org/column/article/85194
https://time.geekbang.org/column/article/83034
https://time.geekbang.org/column/article/83471
版权声明: 本文为 InfoQ 作者【dongge】的原创文章。
原文链接:【http://xie.infoq.cn/article/2b5fc35fb428e83e5cc30a8e3】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论