基于图的协同过滤算法原理与实现
字数 3106 2025-12-08 22:46:29

基于图的协同过滤算法原理与实现

题目描述

协同过滤是推荐系统中的经典方法,它利用用户的历史行为(如评分、点击)来预测其未来兴趣。基于图的协同过滤算法(如早期的ItemRank,以及现在常与图神经网络结合的方法)将用户和物品视为一个二分图的节点,将交互行为视为边,通过设计图上信息的传播与聚合方式,最终学习得到用户和物品的嵌入向量,用于计算匹配分数,完成推荐任务。本题将深入解析其核心原理、典型算法步骤和实现要点。

循序渐进讲解

第一步:构建用户-物品二分图

  • 问题形式化:假设我们有 \(M\) 个用户和 \(N\) 个物品,用户-物品的交互数据(如评分、购买)可以表示为一个稀疏矩阵 \(R \in \mathbb{R}^{M \times N}\),其中 \(R_{ui}\) 表示用户 \(u\) 对物品 \(i\) 的评分(或隐式反馈,如点击则为1,否则为0)。
  • 图结构构建:我们将此交互矩阵转化为一个无向二分图 \(G = (\mathcal{V}, \mathcal{E})\)
    • 节点集合 \(\mathcal{V} = \mathcal{U} \cup \mathcal{I}\),包含用户节点(\(\mathcal{U}\))和物品节点(\(\mathcal{I}\))。
    • 边集合 \(\mathcal{E}\):如果 \(R_{ui} \ne 0\),则在用户节点 \(u\) 和物品节点 \(i\) 之间建立一条边 \(e_{ui}\)。边的权重通常可以与 \(R_{ui}\) 的值相关(例如,显式评分或隐式反馈的置信度)。

第二步:定义图上信息传播(Message Passing)

这是算法的核心。其基本思想是:相似的用户会对同一物品有相似的喜好;用户喜欢与他已喜欢的物品相似的物品。这可以通过图上节点的“近邻”信息传播来建模。

  1. 初始化嵌入向量:为每个用户节点 \(u\) 和物品节点 \(i\) 随机初始化一个 \(d\) 维的嵌入向量 \(e_u^{(0)}\)\(e_i^{(0)}\)
  2. 邻域聚合
    • 在每一层(或每一次迭代)\(l\),每个节点会从其一阶邻居节点聚合信息,以更新自身的表示。
    • 以物品节点 \(i\) 的更新为例
      1. 收集邻居信息:物品 \(i\) 的所有邻居是与之有过交互的用户集合 \(\mathcal{N}(i) = \{u | R_{ui} \ne 0\}\)
      2. 聚合操作:对来自这些邻居用户的信息进行聚合。最简单的方式是平均池化

\[ m_i^{(l)} = \frac{1}{|\mathcal{N}(i)|} \sum_{u \in \mathcal{N}(i)} e_u^{(l-1)} \]

        这个聚合得到的 $m_i^{(l)}$ 可以被理解为“哪些用户喜欢我(物品i)”,它反映了物品i的受众特征。
    3.  **更新操作**:将聚合信息与节点自身上一层的表示结合,生成当前层的表示。一个简单的更新方式是直接替换或加权求和:

\[ e_i^{(l)} = \text{UPDATE}(e_i^{(l-1)}, m_i^{(l)}) = m_i^{(l)} \]

        更复杂的方式可以是:$e_i^{(l)} = \text{LeakyReLU}(W^{(l)} \cdot [e_i^{(l-1)} \| m_i^{(l)}])$,其中 $W^{(l)}$ 是可学习参数,$\|$ 表示拼接。
  1. 对称的用户节点更新
    • 同理,对于用户节点 \(u\),其邻居是与之交互过的物品集合 \(\mathcal{N}(u) = \{i | R_{ui} \ne 0\}\)
    • 聚合与更新过程对称:

\[ m_u^{(l)} = \frac{1}{|\mathcal{N}(u)|} \sum_{i \in \mathcal{N}(u)} e_i^{(l-1)} \]

\[ e_u^{(l)} = \text{UPDATE}(e_u^{(l-1)}, m_u^{(l)}) \]

*   $m_u^{(l)}$ 可以被理解为“用户u喜欢哪些物品”,它反映了用户的兴趣画像。
  1. 多层传播:重复上述“邻域聚合”与“节点更新”步骤 \(L\) 层。通过 \(L\) 层传播,每个节点的最终表示能够捕获其 \(L\) 跳(\(L\)-hop)邻域内的结构信息。例如,经过两层传播后,用户 \(u\) 的表示融合了他喜欢的物品(一跳邻居)以及喜欢这些物品的其他用户(二跳邻居)的信息,实现了“用户-物品-用户”的协同。

第三步:生成最终表示与模型预测

  • 最终节点嵌入:经过 \(L\) 层传播后,我们可以得到每个用户和物品的最终层嵌入 \(e_u^{(L)}\)\(e_i^{(L)}\)。实践中,有时会将所有层的嵌入拼接或平均,以保留不同阶的邻域信息。
  • 预测评分/偏好:要预测用户 \(u\) 对物品 \(i\) 的偏好得分 \(\hat{R}_{ui}\),最简单有效的方法是计算其最终嵌入向量的内积(或余弦相似度):

\[ \hat{R}_{ui} = {e_u^{(L)}}^T e_i^{(L)} \]

内积值越高,表示用户对该物品的偏好越强。

第四步:模型训练与损失函数

  • 训练目标:学习所有节点的嵌入向量 \(E = \{e_u, e_i\}\),使得预测的偏好分数 \(\hat{R}_{ui}\) 尽可能接近真实的观测值。
  • 损失函数
    • 显式反馈(如评分):常用均方误差(MSE) 作为损失函数:

\[ \mathcal{L} = \sum_{(u, i) \in \mathcal{D}} (R_{ui} - \hat{R}_{ui})^2 + \lambda \|E\|^2_2 \]

    其中 $\mathcal{D}$ 是训练集中的(用户,物品)交互对,$\lambda$ 是L2正则化系数,用于防止过拟合。
*   **隐式反馈(如点击)**:更常用**贝叶斯个性化排序(BPR)** 损失。它假设观察到的(正)交互物品的排名应高于未观察到的(负)物品。对于一个正样本 $(u, i)$ 和一个随机采样的负样本 $(u, j)$,其损失为:

\[ \mathcal{L}_{BPR} = -\sum_{(u,i,j) \in \mathcal{D}_{BPR}} \ln \sigma(\hat{R}_{ui} - \hat{R}_{uj}) + \lambda \|E\|^2_2 \]

    其中 $\sigma$ 是sigmoid函数,$\mathcal{D}_{BPR}$ 是由(用户,正物品,负物品)组成的三元组集合。
  • 优化:使用随机梯度下降(SGD)或其变体(如Adam)来最小化损失函数,优化更新所有节点的嵌入向量以及可能的聚合/更新函数中的参数。

核心思想总结

基于图的协同过滤本质上是在高阶连通性上定义平滑性约束。它通过用户-物品交互图上有限步的随机游走或信息传播,将“行为相似的用户对物品有相似喜好”(用户协同)和“用户喜欢与他历史喜好相似的物品”(物品协同)这两种思想统一到了一个基于图表示学习的框架中。最终,用户和物品被映射到同一向量空间,它们的邻近性直接对应于预测的偏好强度。这种方法为后续更复杂的图神经网络(如NGCF、LightGCN等)在推荐系统中的应用奠定了基础。

基于图的协同过滤算法原理与实现 题目描述 协同过滤是推荐系统中的经典方法,它利用用户的历史行为(如评分、点击)来预测其未来兴趣。基于图的协同过滤算法(如早期的ItemRank,以及现在常与图神经网络结合的方法)将用户和物品视为一个 二分图 的节点,将交互行为视为边,通过设计图上信息的传播与聚合方式,最终学习得到用户和物品的嵌入向量,用于计算匹配分数,完成推荐任务。本题将深入解析其核心原理、典型算法步骤和实现要点。 循序渐进讲解 第一步:构建用户-物品二分图 问题形式化 :假设我们有 \(M\) 个用户和 \(N\) 个物品,用户-物品的交互数据(如评分、购买)可以表示为一个 稀疏矩阵 \(R \in \mathbb{R}^{M \times N}\),其中 \(R_ {ui}\) 表示用户 \(u\) 对物品 \(i\) 的评分(或隐式反馈,如点击则为1,否则为0)。 图结构构建 :我们将此交互矩阵转化为一个 无向二分图 \(G = (\mathcal{V}, \mathcal{E})\)。 节点集合 \(\mathcal{V} = \mathcal{U} \cup \mathcal{I}\),包含用户节点(\(\mathcal{U}\))和物品节点(\(\mathcal{I}\))。 边集合 \(\mathcal{E}\):如果 \(R_ {ui} \ne 0\),则在用户节点 \(u\) 和物品节点 \(i\) 之间建立一条边 \(e_ {ui}\)。边的权重通常可以与 \(R_ {ui}\) 的值相关(例如,显式评分或隐式反馈的置信度)。 第二步:定义图上信息传播(Message Passing) 这是算法的核心。其基本思想是:相似的用户会对同一物品有相似的喜好;用户喜欢与他已喜欢的物品相似的物品。这可以通过图上节点的“近邻”信息传播来建模。 初始化嵌入向量 :为每个用户节点 \(u\) 和物品节点 \(i\) 随机初始化一个 \(d\) 维的嵌入向量 \(e_ u^{(0)}\) 和 \(e_ i^{(0)}\)。 邻域聚合 : 在每一层(或每一次迭代)\(l\),每个节点会从其 一阶邻居 节点聚合信息,以更新自身的表示。 以物品节点 \(i\) 的更新为例 : 收集邻居信息 :物品 \(i\) 的所有邻居是与之有过交互的用户集合 \(\mathcal{N}(i) = \{u | R_ {ui} \ne 0\}\)。 聚合操作 :对来自这些邻居用户的信息进行聚合。最简单的方式是 平均池化 : \[ m_ i^{(l)} = \frac{1}{|\mathcal{N}(i)|} \sum_ {u \in \mathcal{N}(i)} e_ u^{(l-1)} \] 这个聚合得到的 \(m_ i^{(l)}\) 可以被理解为“哪些用户喜欢我(物品i)”,它反映了物品i的受众特征。 更新操作 :将聚合信息与节点自身上一层的表示结合,生成当前层的表示。一个简单的更新方式是直接替换或加权求和: \[ e_ i^{(l)} = \text{UPDATE}(e_ i^{(l-1)}, m_ i^{(l)}) = m_ i^{(l)} \] 更复杂的方式可以是:\(e_ i^{(l)} = \text{LeakyReLU}(W^{(l)} \cdot [ e_ i^{(l-1)} \| m_ i^{(l)} ])\),其中 \(W^{(l)}\) 是可学习参数,\(\|\) 表示拼接。 对称的用户节点更新 : 同理,对于用户节点 \(u\),其邻居是与之交互过的物品集合 \(\mathcal{N}(u) = \{i | R_ {ui} \ne 0\}\)。 聚合与更新过程对称: \[ m_ u^{(l)} = \frac{1}{|\mathcal{N}(u)|} \sum_ {i \in \mathcal{N}(u)} e_ i^{(l-1)} \] \[ e_ u^{(l)} = \text{UPDATE}(e_ u^{(l-1)}, m_ u^{(l)}) \] \(m_ u^{(l)}\) 可以被理解为“用户u喜欢哪些物品”,它反映了用户的兴趣画像。 多层传播 :重复上述“邻域聚合”与“节点更新”步骤 \(L\) 层。通过 \(L\) 层传播,每个节点的最终表示能够捕获其 \(L\) 跳(\(L\)-hop)邻域内的结构信息。例如,经过两层传播后,用户 \(u\) 的表示融合了他喜欢的物品(一跳邻居)以及喜欢这些物品的其他用户(二跳邻居)的信息,实现了“用户-物品-用户”的协同。 第三步:生成最终表示与模型预测 最终节点嵌入 :经过 \(L\) 层传播后,我们可以得到每个用户和物品的最终层嵌入 \(e_ u^{(L)}\) 和 \(e_ i^{(L)}\)。实践中,有时会将所有层的嵌入拼接或平均,以保留不同阶的邻域信息。 预测评分/偏好 :要预测用户 \(u\) 对物品 \(i\) 的偏好得分 \(\hat{R} {ui}\),最简单有效的方法是计算其最终嵌入向量的 内积 (或余弦相似度): \[ \hat{R} {ui} = {e_ u^{(L)}}^T e_ i^{(L)} \] 内积值越高,表示用户对该物品的偏好越强。 第四步:模型训练与损失函数 训练目标 :学习所有节点的嵌入向量 \(E = \{e_ u, e_ i\}\),使得预测的偏好分数 \(\hat{R}_ {ui}\) 尽可能接近真实的观测值。 损失函数 : 显式反馈(如评分) :常用 均方误差(MSE) 作为损失函数: \[ \mathcal{L} = \sum_ {(u, i) \in \mathcal{D}} (R_ {ui} - \hat{R}_ {ui})^2 + \lambda \|E\|^2_ 2 \] 其中 \(\mathcal{D}\) 是训练集中的(用户,物品)交互对,\(\lambda\) 是L2正则化系数,用于防止过拟合。 隐式反馈(如点击) :更常用 贝叶斯个性化排序(BPR) 损失。它假设观察到的(正)交互物品的排名应高于未观察到的(负)物品。对于一个正样本 \((u, i)\) 和一个随机采样的负样本 \((u, j)\),其损失为: \[ \mathcal{L} {BPR} = -\sum {(u,i,j) \in \mathcal{D} {BPR}} \ln \sigma(\hat{R} {ui} - \hat{R} {uj}) + \lambda \|E\|^2_ 2 \] 其中 \(\sigma\) 是sigmoid函数,\(\mathcal{D} {BPR}\) 是由(用户,正物品,负物品)组成的三元组集合。 优化 :使用随机梯度下降(SGD)或其变体(如Adam)来最小化损失函数,优化更新所有节点的嵌入向量以及可能的聚合/更新函数中的参数。 核心思想总结 基于图的协同过滤本质上是 在高阶连通性上定义平滑性约束 。它通过用户-物品交互图上有限步的随机游走或信息传播,将“行为相似的用户对物品有相似喜好”(用户协同)和“用户喜欢与他历史喜好相似的物品”(物品协同)这两种思想统一到了一个基于图表示学习的框架中。最终,用户和物品被映射到同一向量空间,它们的邻近性直接对应于预测的偏好强度。这种方法为后续更复杂的图神经网络(如NGCF、LightGCN等)在推荐系统中的应用奠定了基础。