推荐系统新星:NCL - 基于邻域丰富对比学习的图协同过滤框架

推荐系统新星:NCL - 基于邻域丰富对比学习的图协同过滤框架

在这个大数据时代,推荐系统已成为个性化服务的核心技术之一。如今,我们很高兴向您介绍一个创新的开源项目——NCL(Neighborhood-enriched Contrastive Learning)。这个项目是针对图数据的协同过滤方法的一次重大突破,旨在通过增强节点之间的潜在相关性来提升推荐系统的性能。

1、项目介绍

NCL是一个基于PyTorch实现的开源框架,其核心思想是提出一种新的对比学习策略,即“邻域丰富对比学习”。这个策略旨在通过捕获图结构中的邻域信息,改善传统的图协同过滤算法,从而提供更准确和个性化的推荐。NCL不仅适用于标准的推荐任务,还能适应复杂的网络环境,如社交网络和电子商务平台。

2、项目技术分析

NCL的核心创新在于它利用了对比学习的方法来增强节点表示的学习过程。通过对邻居节点进行富集,NCL可以在保持原有模型效率的同时,显著提高预测精度。这主要体现在两个关键步骤:

  1. 邻域富集:在节点表示中引入其邻域的信息,增加了节点特征的多样性。
  2. 对比学习:通过构造正负样本对,使得模型能够区分相似与不相似的节点,进而学习到更有区分度的节点表示。

3、项目及技术应用场景

NCL特别适合那些具有复杂关系网络的数据集,例如电影评分数据(如ML-1M)、电商商品评价(如Amazon Books)以及地理位置分享数据(如Gowalla Merged)。此外,对于拥有大量用户和商品交互的大型电商平台(如Alibaba),NCL也能表现出色,帮助提供更精准的商品推荐。

4、项目特点

  • 高效:NCL基于强大的RecBole库构建,保证了计算效率和可扩展性。
  • 通用:可以轻松地在不同的数据集上运行,并兼容自定义数据集。
  • 直观:简单的命令行接口让实验设置变得简单易行。
  • 可复现:提供了详细的配置参数,方便研究者复现和验证实验结果。
  • 强大:已经在多个公开数据集上进行了广泛的实验,证明了其优越的性能。

要开始使用NCL,只需简单运行main.py脚本,即可在指定数据集上体验其强大功能。我们鼓励并欢迎社区成员参与贡献,共同推动推荐系统技术的进步!

python main.py --dataset <your_dataset>

别忘了引用NCL及其依赖的RecBole库,让我们一起探索图数据的无限可能吧!

@inproceedings{lin2022ncl,
    author={Zihan Lin and
            Changxin Tian and
            Yupeng Hou and
            Wayne Xin Zhao},
    title={Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning},
    booktitle={{WWW}},
    year={2022},
}

@inproceedings{zhao2021recbole,
  title={Recbole: Towards a unified, comprehensive and efficient framework for recommendation algorithms},
  author={Wayne Xin Zhao and Shanlei Mu and Yupeng Hou and Zihan Lin and Kaiyuan Li and Yushuo Chen and Yujie Lu and Hui Wang and Changxin Tian and Xingyu Pan and Yingqian Min and Zhichao Feng and Xinyan Fan and Xu Chen and Pengfei Wang and Wendi Ji and Yaliang Li and Xiaoling Wang and Ji-Rong Wen},
  booktitle={{CIKM}},
  year={2021}
}

立即加入NCL的旅程,让您的推荐系统智能升级,为用户提供更加贴心的服务!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
由于缺少数据文件,我无法直接为您提供完整的代码。但是,我可以给出一个实现的大体思路和一些相关的 NCL 函数,您可以根据自己的数据和需求进行修改和调整。 1. 绘制1980-2010年1月500 hPa 环流平均 可以使用 NCL 中的 climo 函数计算出时间序列的月平均数据,然后再使用平均数据绘制环流。具体步骤如下: ```ncl ; 读取数据 f = addfile("data.nc", "r") u = f->U(0,:,:,:) ; 第一个维度为时间,选择第一层和全球范围 ; 计算时间序列的月平均数据 u_climo = climo(u, "time", "jan") ; jan 表示计算一月份的平均值 ; 绘制环流 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" res = True res@cnFillOn = True res@cnFillMode = "RasterFill" res@cnLineLabelsOn = False res@cnRasterSmoothingOn = True res@cnInfoLabelOn = False res@cnLevelSelectionMode = "ManualLevels" res@cnMinLevelValF = -15 res@cnMaxLevelValF = 15 res@cnLevelSpacingF = 1 res@lbTitleString = "500 hPa 环流平均 (1980-2010年1月)" res@gsnDraw = False res@gsnFrame = False plot = gsn_csm_contour_map(wks, u_climo, res) ``` 2. 绘制1980年1月高度距平 可以使用 NCL 中的 climo 函数计算出时间序列的月平均数据和对应的月平均高度场数据,然后再计算出 1980 年 1 月的高度距平,并绘制高度距平。具体步骤如下: ```ncl ; 读取数据 f = addfile("data.nc", "r") u = f->U(0,:,:,:) ; 第一个维度为时间,选择第一层和全球范围 z = f->Z(0,:,:,:) ; 计算时间序列的月平均数据和月平均高度场数据 u_climo = climo(u, "time", "jan") z_climo = climo(z, "time", "jan") ; 计算1980年1月的高度距平 z_jan1980 = z_climo(1,:,:,:) z_jan1980_anom = z_jan1980 - z_climo(0,:,:,:) ; 绘制高度距平 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" res = True res@cnFillOn = True res@cnFillMode = "RasterFill" res@cnLineLabelsOn = False res@cnRasterSmoothingOn = True res@cnInfoLabelOn = False res@cnLevelSelectionMode = "ManualLevels" res@cnMinLevelValF = -100 res@cnMaxLevelValF = 100 res@cnLevelSpacingF = 10 res@lbTitleString = "1980年1月高度距平" res@gsnDraw = False res@gsnFrame = False plot = gsn_csm_contour_map(wks, z_jan1980_anom, res) ``` 3. 绘制1980年1月的环流纬偏 可以使用 NCL 中的 addfile 函数读取数据文件,然后选择经度为全球范围,纬度为 20-90 度之间的数据。接着,可以使用 NCL 中的 gsn_csm_contour_map 函数绘制环流纬偏。具体步骤如下: ```ncl ; 读取数据 f = addfile("data.nc", "r") v = f->V(0,:,:,20:88) ; 第一个维度为时间,选择第一层和纬度为 20-88 度之间的数据 ; 绘制环流纬偏 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" res = True res@cnFillOn = True res@cnFillMode = "RasterFill" res@cnLineLabelsOn = False res@cnRasterSmoothingOn = True res@cnInfoLabelOn = False res@cnLevelSelectionMode = "ManualLevels" res@cnMinLevelValF = -15 res@cnMaxLevelValF = 15 res@cnLevelSpacingF = 1 res@lbTitleString = "1980年1月的环流纬偏" res@gsnDraw = False res@gsnFrame = False plot = gsn_csm_contour_map(wks, v, res) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杭律沛Meris

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值