Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning(个人笔记)

论文:利用邻域丰富的对比学习改进图协同过滤 (NCL) WWW22

文章链接:https://arxiv.org/abs/2202.06200v1https://arxiv.org/abs/2202.06200v1[0]

代码链接:GitHub – RUCAIBox/NCL: [WWW22] Official PyTorch implementation for “Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning”.[WWW22] Official PyTorch implementation for “Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning”. – GitHub – RUCAIBox/NCL: [WWW22] Official PyTorch implementation for “Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning”.https://github.com/RUCAIBox/NCL[0]

1. 前言

1.1 提出的问题 (图神经协同过滤)

a. 用户-项交互数据通常是稀疏的或有噪声的,它可能无法学习可靠的表示,因为基于图的方法可能更容易受到数据稀疏性的影响。

b. 现有的基于GNN的CF方法依赖于显式的交互连接来学习节点表示,而高阶关系或约束(例如,用户或项目相似性)就不能显式的用于丰富图信息,然而这些(高阶信息或约束)在推荐任务中已经被证明是非常有用的。尽管最近的几项研究利用对比学习来缓解交互数据的稀疏性,但它们通过随机抽样节点或损坏子图来构建对比对,缺乏构建针对推荐任务更有意义的对比学习任务的思考。

1.2 做出的贡献

a. 我们提出了一个与模型无关的对比学习框架–NCL,它结合了结构邻居和语义邻居来改进图神经协同过滤。 

b. 我们提出学习这两种邻居的代表性嵌入,这样就能在一个节点和相应的代表性嵌入之间进行对比学习,这在很大程度上提高了算法的效率。

c. 在五个公共数据集上进行了广泛的实验,证明我们的方法始终优于许多基线,包括GNN和基于对比学习的推荐方法。

1.3 结构邻居和语义邻居

除了直接的用户-项目交互之外,还有多种潜在的关系(例如,用户相似性)对推荐任务很有用。我们将这些附加关系描述为增强的节点邻居,可以通过两种方式定义:
a. 结构邻居 : 通过高阶路径在结构上连接的节点。

b. 语义邻居 : 语义上相似的邻居,在图上可能不直接相邻。

上图对NCL和现有的对比学习方法进行了比较。然而,节点级的对比目标通常需要对每个节点对进行两两学习,这对于大量的邻居来说是很耗时的。考虑到效率问题,我们学习了每种邻居的单一代表性嵌入,这样一个节点的对比学习就可以通过两个代表性嵌入(结构或语义)来完成。

 2. 准备工作

协同过滤(CF)作为基本的推荐系统,旨在根据观察到的隐式反馈(如表达、点击和交易)推荐用户可能感兴趣的相关项目。具体来说,给定用户集  U = \left \{ u \right \} 和项目集 I = \left \{ i \right \},观察到的隐式反馈矩阵表示为 R\epsilon \left ( 0,1 \right )^{\left | U \right |\times \left | I \right |}

 一般来说,基于GNN的协同过滤方法采用聚合方案为用户和项目生成信息表示,分为两个阶段:

 这里只是换了一下公式的表达形式(参照LCN的聚合公式),换汤不换药,具体参数不在一一解释。

3. 模型介绍

3.1 结构邻居的对比学习

现有的图协同过滤模型主要是通过观察到的交互作用(例如,用户-项目对)进行训练,而用户或项目之间的潜在关系不能通过从观察到的数据中学习来明显的捕获。为了充分利用对比学习的优势,我们提出将每个用户(或项目)与它的结构邻居进行对比,这些邻居的表示通过GNN的层传播进行聚合。形式上,用户/项目的初始特征或可学习的嵌入在图协同过滤模型中由 z^{(0)} 表示。 最后的输出可以被看作是一个子图的嵌入组合,该子图包含不同跳的多个邻居。具体来说,基于GNN 模型的第 𝑙 层的输出 z^{(l)} 是每个节点的𝑙跳结构邻居的加权和。
由于交互图 G 是一个二部图,基于 GNN 模型的信息在图上的偶数次传播自然的聚集了同类结构邻居信息,便于提取用户或项目内部的潜在邻居。这样,我们就可以从 GNN 模型的偶数层(如2,4,6)输出中得到同类邻居的表示。有了这些表示,我们可以有效地建模用户/项目和他们的同质结构邻居之间的关系。具体来说,我们将用户自身的嵌入和偶数层 GNN 的相应输出的嵌入视为正对。我们提出了结构对比学习目标来最小化它们之间的距离:

其中 z_u^{\left ( k \right )} 为 GNN 中 𝑘 层的归一化输出,𝑘 为偶数,𝜏 是 softmax 的温度超参数。对于分母里的 z_v^{\left ( k \right )} ,我理解为区分于 u 的 节点。同样,项目L^{item}_{struc} 的结构对比损失可以得到:

完整的结构对比目标函数是上述两种损失的加权和:

 3.2 语义邻居的对比学习

结构对比损失显式地挖掘了由交互图定义的邻居。然而,结构-对比损失对用户/物品的同质邻居一视同仁,这不可避免地给对比对引入了噪声。为了减少结构邻居噪声的影响,我们考虑通过结合语义邻居来扩展对比对,它指的是图上不可到达的节点,但具有相似的特征(项目节点)偏好(用户节点)。

受之前工作的启发,我们可以通过学习每个用户和项目的潜在原型来识别语义邻居。基于这个想法,我们进一步提出了原型-对比目标来探索潜在的语义邻居,并将其纳入对比学习,以更好地在协同过滤中捕获用户和项目的语义特征。特别是,相似的用户/项目倾向于落在邻近的嵌入空间中,而原型是代表一组语义邻居的集群的中心。因此,我们对用户和项目的嵌入应用聚类算法来获得用户或项目的原型。由于这个过程不能端到端优化,我们用EM算法学习提出的原型对比目标。形式上,GNN 模型的目标是最大化对数似然函数:

其中,Θ 是一组模型参数,R 是交互矩阵。而 c_i  是用户𝑢的潜在原型。类似地,我们也可以定义项目的优化目标。

然后,提出的原型对比学习目标基于InfoNCE来最小化以下函数:

 其中是 c_{i} 用户 u 的原型,它是通过使用 K-means 算法对所有用户嵌入进行聚类得到的,k 簇覆盖所有用户。项目方面的目标是完全一样的:

 其中,c_j 是项目 i 的原型。最终的原型对比目标是用户目标和项目目标的加权和:

 3.3 优化

由于协同过滤器的主要目标是对用户和项目之间的交互进行建模,我们补充了提出的两个对比学习损失,并使用多任务学习策略联合训练传统的排名损失和提出的对比损失。

其中,𝜆1、𝜆2和𝜆3分别是控制上述两个所提出的对比目标的权值和正则化项的超参数,Θ为GNN模型参数集。 

4. 实验

4.1 实验设置

a. 数据集:

 对于Yelp和Amazon Books数据集,我们会过滤掉交互作用少于15次的用户和项目,以确保数据质量。对于每个数据集,我们随机选择80%的交互作为训练数据,10%的交互作用作为验证数据。其余10%的交互作用用于性能比较。我们为每个正样本均匀地抽取一个负样本来形成训练集。

b. 性能指标: Recall 和 NDCG

c. 对比模型:

BPRMF:通过矩阵分解(MF)框架优化BPR损失,以学习用户和项目的潜在表示。
NeuMF:用多层感知机代替MF模型中的点积,以学习用户和项目的匹配函数。-
FISM:是一个基于项目的CF模型,它将历史交互的表示聚合为用户的兴趣。
NGCF:采用用户-项目二部图来合并高阶关系,并利用GNN来增强CF方法。
Multi-GCCF:除了在用户-项目二部图外,还在高阶相关用户(和项目)之间传播信息。
DGCF:为用户和项目生成解纠缠表示,以提高推荐的性能。
LightGCN:简化了GCN的设计,使其更加简洁和适合推荐。
SGL:引入了自监督学习来增强推荐。我们采用SGL-ED作为SGL的实例化。

4.2 实验结果

我们使用RecBole实现了所提出的模型和所有的基线,这是一个统一的开源框架来开发和重现推荐算法。为了确保一个公平的比较,我们在所有的方法上使用Adam优化器优化,并仔细搜索了所有基线的超参数。批处理大小设置为4,096,所有参数都由默认的Xavier分布初始化。嵌入大小设置为64。我们采用10轮的早期停止策略,以防止过拟合,以NDCG@10为指标。我们调整了[1e-10,1e-6]中的超参数𝜆1和𝜆2,[0.01,1]中的𝜏和[5,10000]中的𝑘。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年4月27日
下一篇 2022年4月27日

相关推荐