推荐系统笔记(十六):推荐系统图协同过滤的深入理解: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 FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

java streamfilter list 过滤的实现

《javastreamfilterlist过滤的实现》JavaStreamAPI中的filter方法是过滤List集合中元素的一个强大工具,可以轻松地根据自定义条件筛选出符合要求的元素,本文就来... 目录1. 创建一个示例List2. 使用Stream的filter方法进行过滤3. 自定义过滤条件1. 定

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例