1、PageRank算法
Google 著名的 PageRank 算法根据网页间的链接情况计算网页的重要程度。每个页面(Document)的 PageRank 值用向量 $\mathbf{p}$ 表示。页面间的链接关系用矩阵 $\mathbf{H}$ 表示,其中 $H_{ij}$ 表示页面 $i$ 跳转到 $j$ 的概率,满足
\begin{equation} H_{ij} = \left\{ \begin{array} {ll} 0 & \textrm{(if i have no link to j)} \\ \frac{1}{k_i} & (\textrm{if i have a link to j}) \end{array} \right. \end{equation}
其中 $k_i$ 为页面 $i$ 上所有的外链数(出度),即假设从一个页面跳转到其有链接的所有其他页面的概率是均等的。
对于上面没有任何外链的那些页面(出度为零),为防止其成为吸积 PageRank 值的“黑洞”,可假设其对所有页面都有外链(Google 未必是这样做的)。所以矩阵 $\mathbf{H}$ 始终满足下面的关系:
\begin{equation} \sum_{i} H_{ij} = 1 \end{equation}
PageRank 算法假设一个页面的 PageRank 值等于所有指向它的那些页面的 PageRank 值乘以跳转到其上的概率的和,即
\begin{equation} p_i := \sum_j H_{ji} p_j \end{equation}
用矩阵乘法表示就是
\begin{equation} \mathbf{p} := \mathbf{H}^{\mathrm{T}} \mathbf{p} \end{equation}
初始时,将向量 $\mathbf{p}$ 的每个分量设为相同值。将这个方程不断迭代,最终得到收敛的向量 $\mathbf{p}$ 就是页面的 PageRank 值。容易看出,收敛时的向量$\mathbf{p}$ 正是矩阵 $\mathbf{H}^{\mathrm{T}}$ 的特征向量。
2、HITS 算法
几乎就在 Google 提出 PageRank 算法的同时,IBM 的研究者们在一个会议上发表了他们的 HITS 算法。HITS 算法在应用上不及 PageRank 算法成功,但是其理论方法跟 PageRank 比较相似,而且看起来更有道理。
在 HITS 算法中,所有页面的属性有两个向量表示: $\mathbf{a}$ 表示页面的 authority, $\mathbf{h}$ 表示页面的 hubness。一个页面指向的高 authority 的页面越多,其 hubness 就越高;一个页面被越多的高 hubness 的页面指向,其 authority 就越高。
所有页面的链接关系用矩阵表示为:
\begin{equation} A_{ij} = \left\{ \begin{array} {ll} 0 & \textrm{(if i have no link to j)} \\ 1 & \textrm{(if i have a link to j)} \end{array} \right. \end{equation}
这样每个页面的两个属性向量的关系可以写成
\begin{equation} \left\{ \begin{array} {ll} \mathbf{a} := \alpha \mathbf{A}^{\! \mathrm{T}} \mathbf{h} \\ \mathbf{h} := \beta \mathbf{A} \mathbf{a} \end{array} \right. \label{eq:ample} \end{equation}
其中 $\alpha$, $\beta$ 为归一化系数。
两个向量 $\mathbf{a}$ 、 $\mathbf{h}$ 各分量初始化为 1 ,将方程 \eqref{eq:ample} 迭代计算直至收敛,就得到所有页面最终的 authoriy 和 hubness。
3、SPEAR 算法
SPEAR 算法形式上与 HITS 极为相似,但意义不同。在用户与物品有某种行为(如对电影打标签、购买商品等)的场景中,设用户和物品的数量分别是 $M$ 和 $N$,则可以用 $M$ 维向量 $\mathbf{e}$ 表每个示用户的“专家分数”,用 $N$ 维向量 $\mathbf{q}$ 表示物品的“质量分数”。算法假设用户对越多的高质量物品有行为、行为越早,则用户的专家分数就越高;物品被越多的专家用户实施行为,其质量分数就越高。用户-物品的行为由 $M \times N$ 维矩阵 $\mathbf{A}$ 描述,该矩阵满足:
\begin{array}{ll} && 1) \quad && A_{i\alpha} > A_{j\alpha} && \textrm{(如果用户 i 比 j 更早地对物品 $\alpha$ 有行为)} \\ && 2) \quad && A_{i\alpha} = 0 && \textrm{(如果用户 i 对物品 $\alpha$ 没有行为)} \end{array}
即假设专家倾向于更早的发现高质量物品。矩阵 $\mathbf{A}$ 的具体取值方法、平滑方式可自行决定,只要每一列满足上面的时间序列关系即可。
前面关于用户专家分数向量和物品质量向量的假设可以表示为
\begin{equation} \left\{ \begin{array} {ll} \mathbf{e} := \alpha \mathbf{A} \mathbf{q} \\ \mathbf{q} := \beta \mathbf{A}^{\! \mathrm{T}} \mathbf{e} \end{array} \right. \end{equation}
其中 $\alpha$、$\beta$ 仍是归一化系数。按此方程迭代计算直至收敛,即得到最终的用户向量和物品向量。
4、总结
可见,这三个算法虽然有不同的用途,但却有相似的假设,相似的计算方式。在其他场景下,也许会发展出类似的有意思的算法。