算法: 搜索引擎里的排名算法

我们经常使用的 Google 在以前就是使用排名算法来计算搜索结果的,当然这个算法不太好,而
且漏洞很多,容易被别人利用。不过,我们还是可以了解一下以前的人是怎么计算搜索结果的排名的。

介绍

PageRank (排名算法) 是一种链接分析算法,它通过对超链接集合里的数量进行权重赋值来体现这个网页的重要性。

PageRank(下称 PR 值) 的结果来自于图论里的数字算法,每个网页都看成一个节点 (Node),链接到别的网页的链接看成边 (Edge)。这些指向某个网页的超链接就叫做 “对该网页的投票”,这个投票还有递归的性质:每个网页的权重大小也依赖于所有链接该页面的页面的权重值。举个例子,一个被很多页面的链接的页面将会有较高的权重值。

如下图所示,B 的 PR 值不仅依赖于 A 和 C,还有指向 C 的 3 个 D。

算法思路

PageRank 算法通过输出概率分布来体现用户随机点击某个链接的概率。算法初始化的时候,每个页面的值都是均分值,或者为 1,在多次迭代更新后,每个页面的 PR 值会趋于某个概率值,也就是我们所说的 PR 值啦。假如 PR=0.5,就说明有 50% 的概率用户会点击并访问这个网页。

PageRank 公式

我们先从一个例子入手吧,假设一个由 4 个网页组成的集合:A, B, C, D,且同一个页面中多个指向相同的链接视为同一个链接。算法初始化的时候每个网页的 PR 值都是一样的 0.25。在每次迭代中,给定页面的 PR 值将均分到该页面所链接的页面中。

如果所有页面都指向 A,那么 A 的 PR 值就是 B,C,D 的 PR 值的和。

现在我们搞复杂点,如果有如下关系:

  1. B 指向 A,C
  2. C 指向 A
  3. D 指向 A,B,C

根据上面的均分原则,B 给 A,C 每个页面半票,D 投出的票就只有 给到 A 的 PR 值上,所以公式改成如下形式:

也就是说,算法将根据每个页面链出的数量 平分该页面的 PR 值,将将其加到所指向的页面。

因为有可能某个 X 网页可能没有超链接,,所以传递出去的 PR 值会是 0,而这会递归地导致指向它的页面的 PR 值计算结果也是 0。所以要在这些 PR 上乘上一个修正系数,再给每个页面一个最小值 。

修正量

这里引入随机浏览者 (Random Surfer) 概念,即用户在浏览器中随机打开某些链接。上面我们知道要加一个修改量 d 来防止边界条件。这个 d 称为阻尼系数 (Damping Factor),如果 ,那么用户访问到某页面后继续访问下一个页面的概率就是 ,而停止点击的概率就是 。

现在给出完整的概率计算公式:

其中

这里的 是目标页面 , 是链入 页面的集合, 是页面 链出页面的数量,而 是集合中所有页面的数量。

缺陷

上面都是整个 PageRank 的计算过程,当然了肯定实现上不会那么简单,可能会加很多特征值去过滤掉非法引用。不过这依然有缺陷,如旧的页面的排名往往会比新页面高,因为即使是质量很高的新页面也往往不会有很多外链,除非它是某个已经存在站点的子站点。所以呢, PageRank 算法也是需要多项算法结合才能保证其结果的准确性。

你可能感兴趣的:(算法: 搜索引擎里的排名算法)