#论文题目:Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning(推荐系统:基于邻域关系的对比学习改进图协同过滤)
#论文地址:https://arxiv.53yu.com/pdf/2202.06200.pdf
#论文源码开源地址:https://github.com/RUCAIBox/NCL
#论文所属会议:WWW 2022
本文是在基于GNN的方法中提出的一种新的对比学习推荐模型。主要考虑了GNN的推荐模型中两种类型的自监督信息,structure-contrastive(结构对比)和prototype-contrastive(语义对比),两个对比学习信息,使得相似的用户和物品的向量空间更为相似,以捕捉用户和物品的潜在邻里关系,提高了推荐的精度。
通俗点讲:
本文的模型框架是在LightGCN的基础上展开,主损失函数为LightGCN中的BPR_Loss,两部分对比学习损失作为副损失,最后加上GNN中的 θ \theta θ二阶正则化共同来优化模型。模型图如下:
下面将详细的说明每一部分。
算法的主体还是采用和LightGCN相同的结构,在传播中丢弃了非线性激活和特征变换:
在传播了L层之后,我们将每层的节点向量进行累加得到最终的向量表示:
之后我们采用内积的方式将zu(最终user的表示向量)和zi(最终item的表示向量)进行相乘,去预测u和i互动的可能性:
最后采用BPR损失函数(用于推荐的排名目标函数)来进行优化:
Ru,i=1,Ru,j=0
对比学习的目标是使得较为相似的节点编码表示近似,使不相似的节点的编码尽量不相似。此处考虑用户和用户之间的相似性,物品和物品之间的相似性。一个常识是,用户更可能交互和自己较为相似的其他用户所交互过的物品。在GNN中,由于交互图是二部图,因此,拿用户为例,当layer为偶数的时候,学习到的邻居节点也是用户节点,这些节点可以说明用户之间的相似性,因此,将偶数层所交互过的节点作为当前用户的正样本,其他用户节点作为负样本构建如下的对比损失函数。基于InfoNCE方法,我们提出如下的user结构对比学习目标来最小化两者之间的距离:
zu(k)为GNN第k层的归一化输出,k为偶数。 τ \tau τ是softmax中的环境温度超参数。同理,item结构对比学习损失函数为:
完整的结构对比目标函数为上述两种损失函数的加权和( α \alpha α是平衡两者的超参数):
意义:以上的对比学习,只考虑了有连接的邻居节点,同时平等的对待所有的邻居节点,也可能引入噪音,对于一些没有连接关系,但是本身语义相似的节点,没有充分挖掘。因此,这一部分提出了第二个对比学习,语义邻居对比学习。(通俗的说:语义邻居是指图上无法到达但具有相似特征(商品节点)或偏好(用户节点)的节点)
首先需要对所有的用户和物品进行聚类操作,此处采用k-means聚类方法,将用户节点和物品节点或分为几个类别。对比学习的思路就显而易见了,k-means方法中,每个类别,都有一个聚类中心,此处成为prototype,在一个类别内部,聚类中心是这个类别中节点的正样本,而其他的聚类中心是该类别节点的负样本,聚类中GNN模型的目标是最大化下式(用户相关),简单理解就是让用户embedding划分到某个簇,其中θ为可学习参数,R为交互矩阵,c是用户u的潜在原型。同理也可以得到商品相关的目标式。最大化下述似然函数:
和上面的结构邻居类似,可以构建语义邻域的对比损失,公式如下,其中i是用户的prototype,它是通过使用-means算法对所有用户embedding进行聚类得到的,并且所有用户都有个簇。如此构建如下的最小化对比学习损失函数:
ci是用户u的原型,它是用k-means算法对所有用户嵌入进行聚类得到的,所有用户共有k个聚类。同理可以得到item的对比学习损失函数:
最终损失函数为:
将BPR损失作为主体,提出的两种对比学习损失作为补充,并利用多任务学习策略联合训练传统的排名损失和提出的对比学习损失。 θ \theta θ为GNN模型参数集合。
(9)式进行优化比较困难,通过 Jensen 不等式可以得到上面聚类目标函数的下界,如下所示,其中Q(ci|eu)表示在eu条件下潜在变量ci的分布。
根据EM算法:
RecBole 是基于 Python 和 PyTorch 开发的,用于在统一、全面和高效的研究框架中复制和开发推荐算法。
网址:https://github.com/RUCAIBox/RecBole
跳转链接: