多视图多行为对比学习推荐系统

article/2025/3/10 15:14:50

嘿,记得给“机器学习与推荐算法”添加星标


作者:吴贻清 

单位:中科院计算所 

研究方向:多行为推荐

多行为推荐(MBR)旨在联合考虑多种行为以提高目标行为的推荐效果。我们认为 MBR 模型应该:(1)对用户不同行为之间的粗粒度共性进行建模,(2)在多行为建模中同时考虑局部的序列视图和全局图视图,以及(3)捕获细粒度的用户的多种行为之间的差异。在这项工作中,我们提出了一种新的多行为多视图对比学习推荐(MMCLR)框架,包括三个新的对比学习任务,分别用于解决上述挑战。

多行为对比学习旨在使同一用户在每个视图中的不同用户单行为表示相似。多视图对比学习试图对其用户的序列视图和图形视图表示。行为区分对比学习侧重于对不同行为的细粒度差异进行建模。在实验中,我们进行了广泛的实验和消融测试,验证了 MMCLR 和设计的各种对比学习任务在两个真实世界数据集上的有效性,相比于现有的基线实现了SOTA性能。

本文基于DASFAA 2022论文《Multi-view Multi-behavior Contrastive Learning in Recommendation》,论文作者来自中科院计算所,微信,北航。

d7cd2c413dcd66d57a3a7160389baf0f.png

代码:https://github.com/wyqing20/MMCLR
论文:https://arxiv.org/pdf/2203.10576


背景介绍

个性化推荐旨在根据用户的喜好为用户提供合适的物品。个性化推荐的核心问题是如何从用户行为中准确捕捉用户偏好。在现实世界的场景中,用户通常有不同类型的行为来与推荐系统进行交互。例如,用户可以对电子商务系统(例如,亚马逊、淘宝)中的物品进行点击、加购物车、购买等行为,在社交推荐系统中(例如 推特,微博)可以进行点赞,分享,评论等行为。一些传统的推荐模型经常依赖单一的行为进行推荐。但是在实际系统中这样可能存在严重的数据稀疏性和冷启动问题,尤其当目标行为是高成本低频的行为。在这种情况下,其他行为(例如,点击,加购物车)可以为理解用户偏好提供额外的信息,从不同方面反映用户多样化和多粒度的偏好。

多行为推荐(MBR)综合考虑了不同类型的行为,因而能更好的学习到用户的偏好。多行为推荐在其它工作中得到了广泛的探索和验证。但是MBR仍然存在三个挑战:

  • 如何对用户行为之间的粗粒度共性进行建模?用户的所有类型的行为都从某些方面反映了该用户的偏好,因此这些行为天然具有一些共性。考虑不同行为之间的共性可以帮助学习更好的用户表示来对抗数据稀疏问题。这一点在现有的 MBR 模型中经常被忽略。然而,如何通过用户不同类型的行为提取其中的共性信息是一个有挑战性的工作。

  • 如何联合考虑用户个体和全局的视图?传统的 MBR 模型通常只采用一种视图(图视图或序列视图)。序列视图往往更关注于用户个体层面的兴趣演化。相比之下,图视图通常专注于从整个系统中的协同信息来探索用户的兴趣。从不同层次考虑用户兴趣并应用相应的建模方法(基于序列和基于图),能够从不同的方面捕获用户的兴趣。他们相互补充,有助于提升MBR的推荐效果。

  • 如何学习用户多行为之间的细粒度差距?一个用户不同类型的行为之间除了粗粒度的共性之外,还存在细粒度的差异。在目标行为和其它行为之间通常存在着优先级(例如购买的优先级通常高于点击)。在现实世界的电子商务数据集中,用户的平均点击数通常是平均购买次数的 7 倍以上,因而存在大量点击但未购买的商品。将点击未购买的物品视为更加难的负样本,可以让模型学习到阻止用户购买的原因。现有的作品很少考虑多种行为之间的差异,我们想要将这种差异编码到用户的多行为表示中。

近几年,对比学习(CL)在推荐系统中展现了它的力量,它极大地缓解了数据稀疏和流行度偏差问题。我们发现对比学习天然适用于对多行为和多视图用户表示之间的粗粒度共性和细粒度差异进行建模。为了解决上述挑战,我们提出了一种新颖的多行为多视图对比学习推荐(MMCLR)框架。具体来说,MMCLR 包含一个序列编码模块和一个图编码模块,分别用于学习用户多行为下的用户表示。我们针对现有挑战设计了三个对比学习任务,包括多行为对比学习、多视图对比学习和行为区别对比学习。他们建模了用户多行为和多视图之间的复杂关系,从而能够学习到更好的用户表示。

  • 多行为对比学习:我们在每一个视图下的不同行为之间设置对比学习任务。它假设从同一用户的不同行为中学习到的用户表示与其他用户的表示相比应该更接近,其目的是提取不同类型行为之间的共性。

  • 多视图对比学习:我们在两个视图中的用户表示之间进一步的设置对比学习任务。它帮助建模了基于序列的用户的局部信息,和基于图的用户的全局信息之间的共性信息,并对其他们的表示。从而可以提升图编码器和序列编码器的效果。

  • 多行为区分对比学习:与多行为对比学习不同,多行为区分对比学习致力于建模不同行为之间的细粒度的差异,而不是粗粒度的共性。它专门用于捕获用户针对于目标行为的细粒度偏好。

通过这三种对比学习任务,MBR可以更好的理解用户不同行为之间的共性和差异,此外可以更好的建模不同视图之间的关系,从而提高对目标行为的推荐效果。


方法

如下图所示,我们的模型包含三大块,多视图编码器,多行为融合器,和多视图融合器三部分组成。此外在每一部分中我们分别在内部设置了多行为对比学习,多视图对比学习,行为区分对比学习三个任务,以帮助模型学习到更好的表示。具体的方法如下:

325cd79d345939240f102f954d6fab1c.png

(1)首先,我们将用户的行为历史,构造成不同的视图,这里是图视图和序列视图。在序列视图中我们将不同的行为分别编码成序列。在图视图中我们构建U-I图,为不同的行为构建不同类型的边。

(2)多视图编码器:在构造好不同的视图后,他们分别被送入序列编码器和图编码器。这里图编码器和序列编码器可以灵活选择,在本文中我们采用经典的Bert4Rec和LightGCN分别作为序列编码器和图编码器。通过编码器我们可以得到在每个视图下每个行为的表示:

b0db970b84350c938d13808f95372a76.png

这里 u^{s,b} ,u^{g,b} 分别为用户在序列和图视图下关于行为b的编码表示。

我们针对不同的用户行为应用多行为对比学习,其核心是一个用户的不同行为之间的表示应当要比另一个用户更加接近,因为用户的不同行为均在某种程度上表示了用户的兴趣片偏好。这样我们得到辅助loss:L_{seqcl} 和L_{graphcl} :

e99087a95f7b0e23169435c47aa30453.png

(3)多行为融合器:在每个视图下,我们对每种行为进行编码后,将其送入多行为融合器,从而得到用户在每个视图下的综合表示。这里多行为融合器我们采用简单的2层MLP:

ea3161fb1185e3ec9c0b27087b7c211c.png

在得到不同视图的表示后,我们用图视图和序列视图的表示做对比学习任务,其核心是同一个用户不同视图下的表示应当比另一个用户更为接近,这样我们得到辅助loss: L_{viewcl}

8246eff08b3de554f59ee65ae1b393f2.png

(4)多视图融合器: 在融合多行为后我们得到了用户在每个视图下的表示,我们进一步的将不同视图的表示进行融合,同样这里采用2层MLP进行融合。这样我们就得到了用户的最终表示:

8aa9ab1290545b5d5579155db3cc1f02.png

在得到用户的最终表示后。我们利用对比学习建模不同行为之间的细粒度差异。具体的按照不同行为的优先级,对于产生了高优先级行为的物品其打分要比低优先级要高。这里我们认为目标行为的优先级要高于辅助行为,辅助行为的优先级要高于随机采用的物品。通过多行为差异的对比学习模块我们得到了辅助loss  L_{discl} :

6c8ae0f253a36bd35f5ad4f5f2c9c112.png

(5)最后三种对比学习任务所得到的loss和推荐loss L_0一起加权求和,并进行联合训练。

2b26df8b35eb2132cf0bb0e6f9038e5f.png

这里我们采用pair-wise排序loss作为推荐损失函数:

bb01384d804cd2931aca56e3e7e4021e.png


实验

我们在两个公开电商数据集数据集上做了实验,其中每个数据集都包括了点击,加购物车,收藏,购买四种行为。我们将购买行为作为目标行为。实验结果如下:

1d610a21c73e68f3763d10ee753d8e4a.png

可以看到相对其它方法,我们的方法得到了显著的提升。MMR是我们去除对比学习的版本,我们可以看到如果去除对比学习任务,我们的方法会大幅下降。由此可以看到我们设计的对比学习方法能够显著的帮助模型建模用户多行为下的兴趣。

此外,我们还测试了冷启动条件下(用户目标行为小于3)的我们模型的推荐效果。其中BCL代表多行为对比学习,DCL代表多行为区别对比学习。首先从图(a)可以发现在冷启动条件下,推荐效果明显下降。其次从图(c)我们可以发现随着我们对比学习任务的增加,我们的模型相对于基线在冷启动上的相对提升要远大于整体。这可以说明我们的模型在数据越稀疏的条件下相对表现得越好。

ab8857e50e6b607f207c716fc5357851.png

总结

在这篇文章中,为了缓解用户高价值的目标行为稀疏的问题,我们利用用户的多行为信息来更好的建模用户偏好。具体的我们提出了一种多行为多视图的对比学习框架,他能够帮助模型更好的建模用户不同行为类型和不同视图的复杂关系。实验证明我们的模型能够显著的提升在目标行为上的推荐效果。

欢迎干货投稿 \ 论文宣传 \ 合作交流

推荐阅读

DSSM双塔模型及其Pytorch实现

RecSys Challenge 2022推荐赛题

PyTorch官方发布推荐系统仓库: TorchRec

WWW22 | 序列推荐: 纯MLP模型弯道超车CNN与Transformer

由于公众号试行乱序推送,您可能不再准时收到机器学习与推荐算法的推送。为了第一时间收到本号的干货内容, 请将本号设为星标,以及常点文末右下角的“在看”。

喜欢的话点个在看吧👇


http://chatgpt.dhexx.cn/article/ea115nV2.shtml

相关文章

深度 | 蚂蚁金服DASFAA论文带你深入了解GBDT模型

小蚂蚁说: 2018年5月21日,国际顶级数据库会议DASFAA 2018(International Conference on Database Systems for Advanced Applications)在澳大利亚黄金海岸举办。 本文是蚂蚁金服录用于DASFAA的论文Unpack Local Model Interpretat…

DASFAA 2023|创邻周研博士分享前沿图数据库观点

4月17-20日,2023年第28届高级应用数据库系统国际会议(DASFAA2023)在天津成功举行。创邻科技CTO周研博士受邀参会,围绕Galaxybase国产高性能图数据库进行精彩分享。 DASFAA 2023由DASFAA指导委员会(DASFAA Steering Co…

MATLAB卸载时卡住无响应解决办法——已解决

先把安装MATLAB的文件夹内容全部删除 再winR, 输入regedit,CtrlF, 搜索mathworks全部删掉

window10下matlab7.0怎么卸载

解决在Windows10环境下想要卸载matlab7时,如果直接点击uninstall文件夹中的uninstall.exe文件,会弹出exception calling main问题,这时修改一下兼容性即可正常卸载,步骤如下: 一、找到matlab7安装目录下的uninstall文件夹&#x…

解决win10电脑无法卸载matlab7.1的问题

解决在Windows10环境下想要卸载matlab7.1时,如果直接点击安装目录下,例如:C:\Program Files (x86)\MATLAB71\uninstall文件夹中的uninstall.exe文件,会弹出exception calling main问题。 解决方法: 找到matlab7.1安装…

MATLAB卸载程序闪退而没有任何有关卸载过程的信息

想安装MATLAB更高的版本,搜了一下发现官网所说的“升级”并不能让我把R2017a升级到R2018b,如果要使用新的大版本还是要下载安装的,原来的版本虽然可以不删除但是我留着占地方啊!唉想加内存条,想加固态,想换…

Matlab R2019b 完美卸载,解决卡住问题(终于卸掉了)

一个很坑的软件卸载经历 最近在在卸载2019b时死活卸不掉,动不动就内存占用飙升到100,使用Uninstall Tool的强制删除还因为太大还卡住了。 一个破软件卸了一下午,直接删除文件又怕有注册表残留,找了很久卸载工具,最后…

matlab重装失败,MATLAB安装失败后卸载,无法再重新安装

装matlab因为U盘闪退安装失败,卸载后再重新装装不上去了,安装报错。把安装文件夹删了,用cclearer清理注册表后还是装不上去。 QQ图片20200209130717.jpg (295.79 KB, 下载次数: 3) 2020-2-9 13:17 上传 二月 08, 2020 21:20:33) ##########################################…

Matlab2019b卸载不了

一直以来以为geek是一个什么都能卸载的软件,没想到遇到MATALB2019b就不行了。一直就卡在点卸载两个字的按钮页面上,而且内存突然间爆红。我还一直以为是自己电脑的问题,折腾了好久。后来终于在知乎上看到同样的问题,按照别人的回复…

【解决matlab2019b 卸载时总是卡顿,无法卸载的问题】

【官方方法】卸载Matlab2019b 解决uninstall.exe卡顿问题 前言 matlab2019b 卸载时总是卡顿,无法卸载 一、官方卸载matlab 网址 https://ww2.mathworks.cn/help/install/ug/uninstall-mathworks-products.html#mw_379349cd-eab4-4850-a288-45ab6ec0e1f0 二、卸…

卸载matlab卡住——解决办法

根据官方提供的方法:卸载 MathWorks 产品- MATLAB & Simulink- MathWorks 中国 1、首先找到matlab安装路径,以下用matlabroot指安装路径。 2、打开文件夹:matlabroot\uninstall 3、打开uninstaller_input.txt。 4、文中描述如下&…

matlab2019b卸载(记一次很难受的软件卸载经历)

记载一个十分难受的软件卸载过程 最近新装了matlab2019b,在使用过程中发现simulink的模块库不满足我的要求,2020b可以更快的更方便,并且支持的库更多,所以想卸载2019b来装2020b,然而,翻车了! …

【实用工具】磁盘清理,软件卸载,matlab卸载

【实用工具】磁盘清理,软件卸载,matlab卸载YUKI 问题描述 matlab2019b无法卸载,最后出现程序运行错误等异常 解决方案 下载 Smarty Uninstaller 相关链接 https://blog.csdn.net/weixin_43369115/article/details/115064199

MATLAB安装、使用及卸载

MATLAB 入门 前言一、MATLAB安装二、MATLAB使用1.MATLAB窗口2.开发模式a.命令行开发模式b. .m文件开发模式 3.MATLAB内置输出函数disp(X) 三、Matlab 卸载1、软件卸载 总结 前言 MATLAB既是一款软件又是一种编程语言。它是一款强大的数学工具,可以用于数值计算、数据…

matlab卸载(流氓卸载机制)--推荐卸载软件,实测好用

记载一个十分难受的软件卸载过程 打开2019b的卸载程序,发现一直卡在卸载开始的界面,奈何苦苦等待良久,发现一直没有动静。 打开任务管理器,发现cpu占用拉满,100%,电脑很卡,问一波度娘&#x…

卸载MATLAB

到控制面板处进行卸载即可之后不用多长时间就可以卸载了不过,他的确是无法把所有的文件都卸载完,有些文件还是需要手动删除的

C语言strtod函数DEMO

参考文献 #include<stdlib.h> #include<stdio.h> void main() {char *endptr;char* ptr;char a[] "a12345.6789";char b[] "1234.567qwer";char c[] "-232.23e4";printf( "a%lf\n", strtod(a, &ptr) );if (aptr){…

strtod字符串转换函数应用实例

原型&#xff1a;double strtod(const char *nptr,char **endptr); 相关函数 atoi&#xff0c;atol&#xff0c;strtod&#xff0c;strtol&#xff0c;strtoul 头文件&#xff1a;stdlib.h 功能&#xff1a;将字符串转换成浮点数 说明&#xff1a;strtod()会扫描参数nptr字符串…

strtod() 函数的使用

C语言中将字符串转化为浮点数 strtod() 函数的声明 double strtod(const char *str, char **endptr) 参数 str – 要转换为双精度浮点数的字符串。 endptr – 对类型为 char* 的对象的引用&#xff0c;其值由函数设置为 str 中数值后的下一个字符。 包含的头文件 #includ…

字符串转数字函数 atol、atoll和strtol、strtoll、strtoul、strtoull 分析

前言 在C/C编程中&#xff0c;经常会遇到将字符串转换成数值的场景需求&#xff0c;其实在C标准库中已经给我们提供了很多功能函数。 常用字符串转数值函数列表 头文件 #include <stdlib.h>ato-x函数 名称含义相似功能函数double atof(const char *nptr)将字符串转换…