ItemRank: A Random-Walk Based Scoring Algorithm for Recommender Engines
概
采用类似 PageRank 的方式进行推荐排序.
符号说明
- \(\mathcal{U}\), users;
- \(\mathcal{P}\), products;
- \(r_{ij} \in R^{|\mathcal{U}| \times |\mathcal{P}|}\), score;
本文方法
-
定义 products 之间的邻接矩阵 \(\tilde{C}\) 为:
\[\tilde{C}_{ij}= \left \{ \begin{array}{ll} [R^TR]_{ij} & i \not = j, \\ 0 & i = j, \end{array} \right . \]直观上, \(\tilde{C}_{ij}\) 统计了同时交互 \(p_i, p_j\) 的用户的数量;
-
进行列归一化之后得到概率矩阵:
\[C_{ij} = \frac{\tilde{C}_{ij}}{w_j}, \: w_j = \sum_i C_{ij}. \]此时有
\[\sum_i C_{ij} = 1 \]成立;
-
PageRank 采用迭代的方式更新每个每个结点的重要性 \(\mathbf{PR} \in \mathbb{R}^N\) (假设共有 \(N\) 个结点):
\[\mathbf{PR} \leftarrow \alpha \cdot M^T \mathbf{PR} + (1 - \alpha) \bm{d}, \]其中 \(M\) 是概率矩阵 (列和为 1, 非负), 同时 \(\bm{d}\) 用于添加 bias, 满足 \(\sum_i d_i = 1, d_i > 0\);
-
作者希望为每个用户 \(u\) 建立一个 \(\mathbf{IR}_u \in \mathbb{R}^{|\mathcal{P}|}\), 其中每一个元素 \(p\) 代表了用户 \(u\) 对于 \(p\) 的一个 preference. 更新策略如下:
\[\mathbf{IR}_u \leftarrow \alpha \cdot C^T \mathbf{IR}_u + (1 - \alpha) \bm{d}_u, \]其中
\[[\tilde{\bm{d}}_u]_p = r_{up}, \\ \bm{d}_u = \tilde{\bm{d}}_u / |\tilde{\bm{d}}_u| \\ \]故对于用户 \(u\) 而言, 每次迭代都是从已有的观测结果中将信息传播出去. 最后根据 \(\mathbf{IR}_u\) 即可进行排序;
-
当然缺点也是明显, 必须为每个用户 \(u\) 都设定这么一个 \(\mathbf{IR}_u\), 不过作者说迭代 20 次就收敛了, 所以计算消耗尚能接受.
注: 所有的 \(\mathbf{IR}_u\) 初始为
$$
\frac{1}{|\mathcal{P}|} \bm{1}_{|\mathcal{P}|}.
$$