Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning
1. 摘要
最近,图协同过滤方法被提出作为一种有效的推荐方法,它可以通过建模用户-项目交互图来捕获用户对项目的偏好。尽管有效,但这些方法在实际场景中存在数据稀疏问题。为了减少数据稀疏性的影响,在图形协同过滤中采用对比学习来提高性能。然而,这些方法通常是通过随机抽样来构建对比对的,忽视了用户(或项目)之间的相邻关系,未能充分挖掘对比学习的潜力来进行推荐。
为了解决上述问题,我们提出了一种新的对比学习方法,称为邻域丰富的对比学习,称为NCL,它明确地将潜在的邻域合并为对比对。具体来说,我们分别从图结构和语义空间引入用户(或项目)的邻居。对于交互图上的结构邻居,我们开发了一个新的结构对比目标,将用户(或项目)及其结构邻居视为正对比对。在实现中,用户(或项目)和邻居的表示对应于不同GNN层的输出。此外,为了挖掘语义空间中潜在的邻域关系,我们假设具有相似表示的用户位于语义邻域内,并将这些语义邻域合并到原型对比目标中。提出的NCL可以用EM算法进行优化,并推广应用于图形协同过滤方法。在五个公共数据集上进行的大量实验证明了所提出的NCL的有效性,特别是相对于Yelp和Amazon图书数据集上的竞争图形协作过滤基础模型,性能分别提高了26%和17%。
代码:https://github.com/RUCAIBox/NCL
2. 存在的问题以及贡献
存在的问题
- 用户商品交互图存在数据稀疏性和噪声影响,可能无法学习可靠表示;
- 现有的基于GNN的CF方法依赖于明确的交互链接来学习节点表示,而高阶关系或约束(例如,用户或商品相似性)不能明确地用于丰富图形信息。
邻域定义
- 结构邻居: 指通过高阶路径在结构上连接的节点;
- 语义邻居: 指语义相似的邻居,在图上可能无法直接到达。
贡献
- 提出了一个名为NCL的模型无关的对比学习框架,该框架结合了结构和语义上的邻居,以改善神经图协作过滤;
- 为这两种邻居学习有代表性的嵌入,这样就可以只在一个节点和相应的有代表性的嵌入之间进行约束性学习,这在很大程度上提高了算法效率;
- 在五个公共数据集上进行了广泛的实验,证明我们的方法始终优于一些有竞争力的基线,包括GNN和基于对比学习的推荐方法。
3.方法
3.1 协同过滤骨干
特征传播函数
最终表示
- 这里的kkk应该是lll
采用内积预测得分
采用BPR损失
- σ\sigmaσ代表sigmoid函数
3.2 结构邻居的对比学习
由于商品用户交互图是一个二分图,所以将用户自己的嵌入和偶数层的嵌入视为正对,采用对比损失InfoNCE最小化他们之间的距离:
- kkk为偶数
商品的结构对比损失同理:
总损失:
3.3 语义邻居的对比学习
结构对比损失平等地对待用户/商品的同质邻居,会将噪声引入对比对,通过合并语义邻居扩展对比对可以减少影响。
主要思路是通过原型对比目标来探索潜在的语义邻居并将它们纳入对比学习。由于相似的用户/商品倾向于落在相邻的嵌入空间中,并且原型是代表一组语义邻居的集群的中心。因此,将聚类算法应用于用户和商品的嵌入,以获得用户或商品的原型。由于该过程无法进行端到端优化,使用 EM 算法学习提出的原型对比目标。
形式上,GNN 模型的目标是最大化以下对数似然函数:
- ΘΘΘ是模型参数,RRR是交互矩阵,eue_ueu是用户的embedding,cic_ici是用户的潜在原型,通过K-means聚类得到
原型对比学习目标是基于 InfoNCE 最小化以下函数:
商品原型对比同理:
最终的原型对比目标:
3.4 优化
总体训练目标
EM算法优化LPL_PLP
首先通过Jensen不等式获得其下界(LB):
Q(ci∣eu)Q(c_i|e_u)Q(ci∣eu)表示当观察到eue_ueu时潜在变量cic_ici的分布。当估算Q(ci∣eu)Q(c_i|e_u)Q(ci∣eu)时,可以重定向目标以最大化eue_ueu函数。采用EM算法优化。
在E步中,eue_ueu是固定的,Q(ci∣eu)Q(c_i|e_u)Q(ci∣eu)通过K-means算法对所有用户E的嵌入进行估计。如果用户uuu属于聚类iii,则聚类中心cic_ici是用户原型。分布由硬指标Q^(ci∣eu)=1\hat{Q}(c_i|e_u)=1Q^(ci∣eu)=1和Q^(cj∣eu)=0\hat{Q}(c_j|e_u)=0Q^(cj∣eu)=0构成。
在M步中,目标函数可以用Q^(ci∣eu)\hat{Q}(c_i|e_u)Q^(ci∣eu)改写:
假设用户的分布在所有集群上都是各向同性的高斯分布。所以函数可以写成:
- 由于xux_uxu和cic_ici是预先标准化的,(eu−ci)2=2−2eu⋅ci(e_u-c_i)^2=2-2e_u·c_i(eu−ci)2=2−2eu⋅ci,假设每个高斯分布都有相同的导数,写入温度超参数τ\tauτ,函数可以简化为式(10)。
4. 实验结果
消融实验
- w/o s-n代表删除结构邻居,w/o p-n代表删除语义邻居
Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning相关推荐
- #Reading Paper#Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learni
#论文题目:Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning(推荐系统:基 ...
- Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning(个人笔记)
论文:利用邻域丰富的对比学习改进图协同过滤 (NCL) WWW22 文章链接:https://arxiv.org/abs/2202.06200v1https://arxiv.org/abs/2202. ...
- 论文笔记:Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning
1 简介 论文:Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning 发表:2 ...
- NCL:Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning,代码解读
一.前言 1.背景 (1)用户-项目交互数据通常是稀疏或嘈杂的,并且它可能无法学习可靠的表示,因为基于图的方法可能更容易受到数据稀疏性的影响 (2)现有的基于 GNN 的 CF 方法依赖于显式交互链接 ...
- 2022_WWW_Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning
[论文阅读笔记]2022_WWW_Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Lear ...
- 2019_SIGIR_Neural Graph Collaborative Filtering
[论文阅读笔记]2019_SIGIR_Neural Graph Collaborative Filtering 论文下载地址: https://doi.org/10.1145/3331184.3331 ...
- 知识图谱论文阅读(二十一)【SIGIR2019】NGCF: Neural Graph Collaborative Filtering
题目:Neural Graph Collaborative Filtering 代码: https://github.com/xiangwang1223/neural_graph_collaborat ...
- 论文笔记(Neural Graph Collaborative Filtering)
神经图协同过滤 论文链接:Neural Graph Collaborative Filtering, SIGIR'19 原理:在 user-item interaction graph 上使用 GNN ...
- 矩池云上复现论文 Neural Graph Collaborative Filtering 环境复现
矩池云上复现论文 Neural Graph Collaborative Filtering 环境复现 Neural Graph Collaborative Filtering (NGCF) is a ...
最新文章
- 强化学习(一)---绪论
- Eclipse安装插件时报No repository found containing...解决办法
- 【转】文件读写NDK(或Linux)
- TI Davinci DM6446开发攻略——开发环境搭建
- macOS Big Sur 配置 jdk
- 如何在Java项目中查找未使用/无效的代码
- Nmap 可能引起cisco路由器Crash
- HCIE Security 防火墙虚拟系统 备考笔记(幕布)
- Java基础编程题50道题
- Python 爬虫 书籍爬取实例
- 蓝桥杯 2012 决赛 拼音字母
- 12306抢票软件的一些学习
- 服务器容灾性能,容灾和性能
- 爬取链家所有房源信息(在售、成交、租房)
- 安卓应用加固壳判断java厂商_Android APK加固(加壳)工具
- QT关于iCCP警告去除
- 国内外Unity视频学习网站大全
- 神经网络与深度学习 作业3:分别使用numpy和pytorch实现FNN例题
- 2020年百度之星·程序设计大赛-初赛一
- SAP批次双单位CWM的系统实现
热门文章
- Python覆盖率框架Coverage初探
- uploadify的简单使用
- 02中国华南华东华北华中华西等位置画出来
- 你值得拥有!-阿里P8架构师荣耀典藏:Java多线程与Socket实战微服务框架笔记
- 在公交车上想出的一个java算法
- 购物小票的巧妙新设计
- 如何重置Mac的蓝牙模块以解决连接问题
- python add picture显示过大_利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例...
- (C++学习笔记四)封装的使用
- <<算法很美>>——(七)——DFS典题(一):水洼数目