Self-supervised Graph Learning for Recommendation 详解

目录

摘要

引言

预备知识

方法

        3.1 图结构数据增强

        3.2 对比学习

        3.3 多任务学习

        3.4 理论分析


摘要

        基于用户-物品图的推荐表示学习已经从使用单一 ID 或交互历史发展到利用高阶邻居。这导致了图卷积网络(GCNs)在推荐方面的成功,如 PinSage 和 LightGCN。尽管具有有效性,但我们认为它们存在两个局限性:(1)高阶节点对表示学习的影响更大,使低阶(长尾)项目的推荐恶化;(2)由于邻域聚集方案进一步扩大了观测边缘的影响,表征容易受到噪声相互作用的影响。

        在这项工作中,我们探索了用户项图的自监督学习,以提高GCNs推荐的准确性和鲁棒性。其思想是用一个辅助的自监督任务来补充经典的推荐监督任务,通过自我区分来加强节点表示学习。具体来说,我们生成一个节点的多个视图,最大限度地提高同一节点的不同视图与其他节点的一致性。我们设计了三个操作符来生成视图——节点丢弃、边丢弃和随机游走——它们以不同的方式改变图的结构。我们将这种新的学习范式称为自监督图学习(SGL),并在最先进的LightGCN模型上实现它。通过理论分析,我们发现SGL具有自动挖掘难负样本的能力。在三个基准数据集上的实证研究证明了SGL的有效性,它提高了推荐的准确性,特别是在长尾项目上,以及对交互噪声的鲁棒性。我们的实现可以在https://github.com/wujcan/SGL上获得。

        总结:使用节点丢弃、边丢弃和随机游走三种策略改变图结构,使用辅助的自监督任务训练以增强节点表示,进而增强推荐效果。最终表明,该方法在长尾项目上,以及应对交互噪声上,有良好的表现。

引言

        基于用户-物品二部图推荐的表征表示学习已经从使用单一ID或交互历史演变到利用高阶邻居学习。基于这个思想,图卷积网络(graph convolution networks,GCNs)在推荐系统中取得了巨大成功。例如PinSage,LightGCN。尽管基于GCN的方法取到了不错的效果,但我们认为这些方法仍然受到了一些限制:

  • 监督信号稀疏(数据稀疏):目前大多数推荐学习任务都是基于监督学习的范式,其中监督信号一般指用户和物品的交互数据。然而这些交互数据通常来说是异常稀疏的,不足以学习高质量的表征。
  • 倾斜的数据分布(幂律分布):推荐系统的交互数据通常呈现幂律分布,其中长尾部分low-degree的物品节点缺乏监督信号。然而,high-degree的物品节点在邻居聚合和监督学习损失中占据了主导地位,对表征学习影响更大。因此,基于GCNs的方法倾斜于high-degree物品节点,牺牲了low-degree物品推荐的性能。
  • 交互噪音:用户提供的交互大多数是隐式的(clicks,views),而不是显式的(ratings,likes,dislikes)。因此,收集到的交互通常包含噪声,如用户误点击了一个物品。而GCNs中的邻居聚合操作则会加大这些交互噪音的影响,使得模型训练更容易受到交互噪音的影响。

        本文意在探索自监督学习(Self-supervised Learning, SSL)在用户-物品二部图上的应用,辅助推荐模型训练学习,应用self-discrimination来学习更加鲁棒的节点表征。具体来说,通过基于图结构的数据增强来生成一个节点的多个视图,最大化同一节点不同视图间(正样本对)的一致性(agreement)以及最小化不同节点视图间(负样本对)的一致性。本文设计了三张数据增强操作 —— node dropout, edge dropout, and random walk,并将这种新的学习范式称为Self-supervised Graph Learning(SGL)自监督图学习。下面章节将会具体介绍SGL。

        总结:在该段提出了使用GCN来做推荐的三个问题,分别是数据稀疏问题、长尾问题、交互噪音影响节点表示问题,并提出了解决策略。

预备知识

总结:该部分讲了 GCN 如何用在推荐上,如何学习节点的表示。以及讲解了监督学习的 loss 使用的是 BPR loss。

方法

        本节将定义自监督图学习(Self-supervise Graph Learning, SGL)范式,作为监督学习任务的补充,实验证明非常有效。图1展示了SGL的流程,简单来说,自监督学习任务从输入数据之间的关联构建监督信号。

        下面,我将介绍如何对图结构进行数据增强生成多个视图,然后基于生成的表征进行对比学习来建立自监督学习(Self-supervised Learning, SSL)任务,之后SSL与基于GCN的方法结合进行多任务学习,随后,我将从梯度的角度对SSL进行理论分析,解析SSL与难负样本挖掘的关联,最后我将简单分析一下模型时间复杂度。

        3.1 图结构数据增强

        使用节点丢失(对节点有概率的丢失)、边丢失(对边有概率的丢失)和随机游走

        3.2 对比学习

    

        总结:对比学习的学习目标是将同一节点不同视图学习一致性,不同节点不同视图强化差异性。

        3.3 多任务学习

        

        3.4 理论分析

        为什么 SGL 的效果好?

        因为 SGL 具有挖掘难负样本的能力,难负样本对梯度下降进行了有效的指导。

        

        实验(待补充)

        结论(待补充)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/224684.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Firefly-Linux] RK3568 pca9555芯片驱动详解

文章目录 一、PAC9555 介绍二、ITX-3568JQ PAC9555 使用2.1 原理图2.2 设备树三、RK3568 I2C 介绍四、PAC9555 驱动4.1 介绍4.2 数据结构4.3 驱动分析一、PAC9555 介绍 PAC9555 是一种高性能、低功耗 I/O 扩展芯片,能够提供 16 个 GPIO 通道,每个通道可以单独配置为输入或输…

C语言再学习 -- 单精度(float)和双精度(double)浮点数 与 十六进制(HEX) 之间转换(转载))

之前讲过浮点数部分,参看:C语言再学习 – 浮点数 现在程序中要将浮点数,通过TCP发送。那得先将其转换为十六进制才行呀。 那么问题就来了。 参看:C语言:单精度(float)和双精度(double)浮点数 与 十六进制(HEX) 之间…

完数的C语言实现xdoj30

时间限制: 2 S 内存限制: 10000 Kb 问题描述: 请写一个程序&#xff0c;给出指定整数范围[a&#xff0c;b]内的所有完数&#xff0c;0 < a < b < 10000。 一个数如果恰好等于除它本身外的所有因子之和&#xff0c;这个数就称为"完数"。 例如6是…

git 关于分支、merge、commit提交

最近开始用git终端提交代码&#xff0c;梳理了一些知识点 一 关于分支 关于分支&#xff0c;git的分支分为本地分支远程分支两种分支&#xff0c;在上传代码时&#xff0c;我们要确保当前本地分支连接了一个远程分支。 我们可以通过下面代码查看当前的本地分支&#xff1a; g…

mybatis的分页插件

在mybatis核心配置文件中&#xff1a; 这时已经用了SSM整合&#xff0c;好多像是mapper或者数据源等都移出去了 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""…

nodejs微信小程序+python+PHP新闻发布系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

这些Java并发容器,你都了解吗?

文章目录 前言并发容器1.ConcurrentHashMap 并发版 HashMap示例 2.CopyOnWriteArrayList 并发版 ArrayList示例 3.CopyOnWriteArraySet 并发 Set示例 4.ConcurrentLinkedQueue 并发队列 (基于链表)示例 5.ConcurrentLinkedDeque 并发队列 (基于双向链表)示例 6.ConcurrentSkipL…

【LLM_05】使用fastgpt搭建本地离线大语言模型(Chatglm3)问答+知识库平台

1、FastGPT 的知识库逻辑1.1 基础概念1.2 FastGPT知识库的导入1.3 FastGPT新建应用&#xff08;1&#xff09;创建一个知识库助手&#xff08;2&#xff09;创建一个python开发小助手 2、词向量比较测试2.1 开启词向量模型2.2 词向量模型性能比较 3、配置好之后的运行3.1 运行大…

Redis ziplist源码解析

area |<---- ziplist header ---->|<----------- entries ------------->|<-end->|size 4 bytes 4 bytes 2 bytes ? ? ? ? 1 byte--------------------------------------------------------------- comp…

多人聊天UDP

服务端 package 多人聊天;import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList;…

第十六届山东省职业院校技能大赛中职组网络安全赛项竞赛正式试题

第十六届山东省职业院校技能大赛中职组网络安全"赛项竞赛试题 一、竞赛时间 总计&#xff1a;360分钟 二、竞赛阶段 竞赛阶段任务阶段竞赛任务竞赛时间分值A、B模块A-1登录安全加固180分钟200分A-2本地安全策略设置A-3流量完整性保护A-4事件监控A-5服务加固A-6防火墙策…

Error: Could not create the Java Virtual Machine(Linux启动tomcat成功后找不到进程8080端口)

文章目录 问题解决问题过程Tomcat版本要求 问题解决 版本冲突&#xff0c;我的jdk是1.8.x&#xff0c; tomcat 是 10.1.x的&#xff0c;要求jdk是11。 问题过程 运行 ./startup.sh 显示如下&#xff1a; 还以为运行成功呢&#xff0c; 使用命令一查&#xff0c;根本查不到进…

C语言进阶之路之内存镜像与字符操作函数篇

目录 一、学习目标&#xff1a; 二、内存镜像 什么是进程 C进程内存布局 栈内存 静态数据 数据段&#xff08;存储静态数据&#xff09;与代码段 堆内存 三、字符操作函数 函数strstr 函数strlen strlen与sizeof的区别 函数strtok 函数strcat与strncat 函数strc…

记录 | python向上取整和向下取整

python 向上取整和向下取整 向上取整 使用 ceil()&#xff1a; import mathx 0.55 x0 math.ceil(x)向下取整 使用 floor()&#xff1a; import mathx 0.55 x1 math.floor(x)如下&#xff1a;

群聊Java

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

VR远程带看,助力线下门店线上化转型“自救”

VR远程带看&#xff0c;因自身高效的沉浸式在线沟通功能&#xff0c;逐渐走进了大众的视野。身临其境的线上漫游体验以及实时同屏互联的新型交互模式&#xff0c;提升了商家同用户之间的沟通效率&#xff0c;进一步实现了远程线上一对一、一对多的同屏带看&#xff0c;用户足不…

封装校验-----Vue3+ts项目

登录校验页面 <script setup lang"ts"> import { ref } from vue import { mobileRules, passwordRules } from /utils/rules const mobile ref() const password ref() </script><!-- 表单 --><van-form autocomplete"off">&l…

使用Draw.io制作泳道图

使用Draw.io制作泳道图 一、横向泳道图1. 有标题泳道图2. 无标题泳道图3. 横纵向扩展泳道 二、纵向泳道图三、横纵交错地泳道图想做这样的图具体步骤1. 拖拽一个带标题的横向泳道图2. 拖拽一个带标题的单一图&#xff0c;并且把它放进Lane1中3. 其他注意 四、下载文件说明 一、…

CSS的逻辑组合伪类

CSS 的逻辑组合伪类有 4 种&#xff0c;分别是&#xff1a;:not()、:is()、:where()和&#xff1a;has()。 否定伪类:not() :not 伪类选择器用来匹配不符合一组选择器的元素。由于它的作用是防止特定的元素被选中&#xff0c;它也被称为反选伪类&#xff08;negation pseudo-…

走迷宫(详细分析)

目录 一、课题描述 输入样例&#xff1a; 输出样例&#xff1a; 二、需求分析 输入的形式和输入值的范围&#xff1a; 输出的形式&#xff1a; 程序所能达到的功能&#xff1a; 三、概要设计 四、流程图 五 、代码详细注释 六、测试数据和结果 一、课题描述 以一个…