推荐系统笔记(十六):推荐系统图协同过滤的深入理解:GDE

2023-11-02 20:10

本文主要是介绍推荐系统笔记(十六):推荐系统图协同过滤的深入理解:GDE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

        在学习过SimGCL算法过后,我们发现过多的图增强操作反而不会有太大的提升,这就产生一个疑问,图卷积究竟为什么在推荐系统模型中有效?图卷积的特征嵌入往往有很多的特征,是否是各个特征都是有效影响模型结果的?

        带着这些问题查阅了相关文献,就这个算法在今年的SIGIR中的一篇论文给出了答案,即:Less is More: Reweighting Important Spectral Graph Features for Recommendation。

        论文链接:https://arxiv.org/pdf/2204.11346.pdf

        论文认为:

  1. 前人的工作中,对图卷积中的领域聚合研究的不够透彻,所以作者在频域下对图卷积进行分析。

  2. 分析得到两个结论:a.只有少部分的邻居的平滑或者差异信息对推荐有促进,大部分的图信息都可以看作噪声;b.反复的图卷积操作只能促进邻居平滑,不能有效过滤噪声,并且低效。并且基于此进一步提出了一个高效的GCN(超图卷积),作为带通滤波器,此外动态调整negative sample的梯度加快收敛。

思想

        基于图的协同过滤中,只有以下部分的特征起到作用,其他的特征可以被看作是噪声。作者将噪声由平滑到粗糙进行了规定。规定如下:对邻接矩阵求取特征值和特征向量,对于每个特征向量当中的方差var越大就越粗糙,反之则越平滑。

        GDE算法(作者提出的算法)认为只有特别smooth和特别rough的特征才对最终的模型效果起作用,作者基于此进行了试验并证明这一点,并且实现了高通和低通滤波器进行有效特征提取。

原理

        作者首先进行了一个实验,是在基于GCN和LightGCN推荐算法之上的,求解零阶矩阵的特征值和特征向量,计算每个特征向量的方差。防擦好越小表示每个节点和邻居节点的差别越小;反之节点之间的差别则越大。

        在下图中我们可以发现NDCG的值在rough或者smooth处更高,包括准确度也是在smooth处就已经达到饱和,说明的确是这两部分的嵌入特征对模型的预测起到了主要作用。

        其中红色虚线是随机初始化邻接矩阵的推荐结果的精度,倘如去掉中间的特征反而会提高模型的表现,能拥有更加高效的结果。而在LightGCN模型的论文中推导可以发现,随着层数layer增加,smooth会逐渐拥有越来越平滑的特征,即整个模型总是在趋向于平滑化的,甚至压制住了rough特征向量的作用。

        基于此作者实现了GCD来进行特征提取,提取rough和smooth的特征,过滤掉可以被视为noise的部分特征,进而提升协同过滤的效果。

        那么具体是如何实现的呢?核心上来讲是特征提取,因此作者利用超图卷积,获取更强更有信息的嵌入,超图卷积的大致形式如下:

        本文所说的超图卷积实际上就是先将超图转化为带权简单图后,再对简单图做GCN。如图为HyperGCN在某一个节点vv上的单次更新操作。

        在本文中分别把item和user当超边,可以得到user和item的邻接矩阵。直观上来讲就是先聚合user或者item,得到超边的表示,再从超边聚合到user或者item,得到user或item的表征。

        为了实现特征有效提取,作者设计将图G划分为三个子图Gs,Gr,Gn,分别代表的是平滑子图、粗糙子图、噪声子图,并设计了滤波函数对不同的子图有不同的卷积效果以达到特征提取的目的:

         其中γ(u/i,λt)可以理解为频率响应函数,也可以理解为滤波器,也可以理解为第t个node feature重要性评估函数。

        在提取了需要的特征过后就需要将特征进行聚合,作者使用的是pooling的方式对进行超图卷积过后的特征进行聚合:

        user和item的超图表示经过GDE特征提取过后将smmoth和rough的特征分别进行聚合,最终将user和item的数据特征进行聚合得到最终的特征表示:

         其中P(r)和π(r)分别是AU的特征向量和特征值的的最小(那就是最粗糙的)前m2个。Q(r)和σ(r)分别是AI的特征向量和特征值的的最小(那就是最粗糙的)前n2个。EU是user的embedding,EI是item的embedding。

        重要性的评估将会关系到模型最终的特征提取效果,作者提出了两种特征重要性计算的方式。分别是动态特征学习,即注意力机制:

        

        还有一种是设计一个静态的函数,有关于特征值的函数:

 

        这是作者根据函数的泰勒展开重写图卷积的公式,详细推导请参考论文。

        在作者提出了模型的特征提取和新的超图卷积计算方法过后,还对损失函数BPR Loss进行了优化,之前的损失函数是对付样本没有进行加权的,即服药本的权重都是一样的,这会导致收敛速度稍慢、收敛效果差,于是作者提出使用负样本动态加权方法:

       其中 参数ξ=0.99,实验结果也表明,这种负样本带权的Loss可以加快收敛,其中的λ控制了正则化程度。如图:

         可见:(a) 在LightGCN上,负样本上的梯度比MF上消失得更快。(b) 通过自适应调整负样本上的梯度,可以缓解此问题。

总结

(1)作者研究了GCN的特征表示的主贡献部分是rough和smooth部分的特征,因此用超图分别卷积user和item,进行特征提取。(卷积又分为只用特征值最大的和特征值最小的一部分(看作两个卷积核),卷积核的参数可以动态学习也可以用函数映射特征值)。

(2)作者在本文的出发点是GCN本身,通过频域分析,证实了GCN其实是针对局部进行卷积,设计了多层的频率响应,而本文则只使用一层进行卷积,反而达到卷积到更远的视野的目的。

(3)关于为什么var高和低的特征能起到关键作用,其中的原理作者并未给出解释,只能从结果中得出结论:模型的精度是一小部分的高度平滑或者差异(粗糙)的特征决定,而且平滑的信号的作用比粗糙的信号更有作用,还需要进一步深思。

参考链接:

协同过滤和基于内容推荐有什么区别? - 知乎

超图卷积网络(HyperGCN: A New Method of Training Graph Convolutional Networks on Hypergraphs) - popozyl - 博客园

这篇关于推荐系统笔记(十六):推荐系统图协同过滤的深入理解:GDE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/333006

相关文章

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

Java SWT库详解与安装指南(最新推荐)

《JavaSWT库详解与安装指南(最新推荐)》:本文主要介绍JavaSWT库详解与安装指南,在本章中,我们介绍了如何下载、安装SWTJAR包,并详述了在Eclipse以及命令行环境中配置Java... 目录1. Java SWT类库概述2. SWT与AWT和Swing的区别2.1 历史背景与设计理念2.1.

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Java日期类详解(最新推荐)

《Java日期类详解(最新推荐)》早期版本主要使用java.util.Date、java.util.Calendar等类,Java8及以后引入了新的日期和时间API(JSR310),包含在ja... 目录旧的日期时间API新的日期时间 API(Java 8+)获取时间戳时间计算与其他日期时间类型的转换Dur

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.