【论文阅读】Contrastive Clustering Learning for Multi-Behavior Recommendation

论文地址:Contrastive Clustering Learning for Multi-Behavior Recommendation | ACM Transactions on Information Systems


摘要

近年来,多行为推荐模型取得了显著成功。然而,许多模型未充分考虑不同行为之间的共性与差异性,以及目标行为的数据稀疏性问题。本文提出了一种基于对比聚类学习的全新多行为推荐模型(MBRCC)。

具体而言,采用图卷积网络(GCN)分别获取用户和物品的嵌入表示。随后,设计了三种优化用户和物品嵌入的任务,包括行为级嵌入、实例级嵌入和聚类级嵌入。

在行为级嵌入中,设计了一种自适应参数学习策略,以分析辅助行为对目标行为的影响,并通过对用户在各行为上的嵌入进行加权,获得最终的用户嵌入表示。

在实例级嵌入中,利用对比学习对用户和物品实例进行分析,以缓解数据稀疏性问题。

在聚类级嵌入中,设计了一种新的聚类对比学习方法,以捕捉用户和物品群体之间的相似性。

最终,结合这三种任务,以提升用户和物品嵌入的质量。在三个真实世界数据集上的广泛实验表明,MBRCC 显著优于现有的多种推荐模型。

引言

推荐系统在在线广告、社交媒体和电子商务等多个领域发挥着至关重要的作用。它通过智能信息过滤和个性化推荐,帮助用户快速找到符合其兴趣和需求的内容。个性化推荐不仅提升了用户体验,还促进了商业交易的成功。

目前,大多数推荐模型主要关注用户与物品之间的单一行为关系。例如,Zheng 等人[57]提出了一种基于单一行为数据挖掘物品属性信息的推荐方法;Wang 等人[36]在单一行为数据上研究了用户-物品的高阶信息;Li 等人[24]利用元学习方法提升用户和物品的表示效果;Lan 等人[21]基于历史交互数据构建了用户和物品的双分支图来捕获信息。然而,在实际应用中,用户和物品的交互通常涉及多种行为类型。例如,如图 1 所示,在电子商务平台上,用户的行为通常包括浏览、点击和购买等。此外,与用户交互的物品数量不断增长,仅依赖单一行为难以准确推测用户的偏好,因此需要借助辅助行为进行推荐。

为了充分利用辅助行为信息,近年来涌现出越来越多的多行为推荐模型。例如,Gao 等人[9]提出了一种基于神经网络的多任务推荐框架,以级联方式关联各类行为,利用用户在购买前通常浏览相关感兴趣物品的现象来整合不同行为信息;Jin 等人[17]提出了一种多行为推荐模型,通过用户-物品交互的传播层捕捉行为强度,并通过物品-物品交互的传播层捕捉行为语义;Chen 等人[7]提出了一种基于多行为的推荐模型,在可控时间复杂度下高效捕捉不同行为信息,该模型采用基于用户、基于物品和交替优化的三种方法来挖掘不同行为间的复杂关系。此外,Chen 等人[5]考虑到用户和物品交互中的高阶协同信息,提出了一种基于协同过滤的异构图推荐模型,该模型采用关系感知传播层显式获取高阶信号;Wei 等人[39]提出了一种基于多种行为类型图的注意力多行为推荐模型,以捕捉用户-物品交互网络中的隐藏关系,该模型同时考虑了节点级特定行为的重要性和行为级不同行为的语义强度。此外,一些研究还结合了对比学习与多行为推荐。例如,Gu 等人[11]提出了一种基于自监督图卷积网络(GCN)的多行为推荐模型,以缓解监督信号稀疏问题,该模型采用星型对比学习策略来学习不同行为之间的共性;Wu 等人[42]提出了一种基于多视图的多行为对比学习推荐模型,以有效缓解冷启动问题,该模型整合了多行为、多视图和行为区分的对比学习。

尽管上述研究在提升推荐性能方面取得了显著进展,但仍然存在以下局限性:
(1) 一些多行为推荐的对比学习方法主要基于个体行为,缺乏从群体角度综合考虑不同行为,这通常导致用户和物品的嵌入表示无法全面覆盖行为信息;
(2) 由于相似用户的行为通常具有共性,而不同用户的行为往往存在差异,因此用户和物品的共性与差异可提供更丰富的语义信息。然而,部分模型未充分考虑用户或物品之间的共性与差异,可能导致群体偏差或信息过滤不足;
(3) 部分方法忽视了目标行为的数据稀疏性问题。例如,相较于点击、浏览和加入购物车等行为,购买行为的数据较为稀疏,这可能导致推荐偏差或冷启动问题,因为对比学习中难以构造足够数量和多样性的正负样本对。

针对现有多行为推荐模型的这些局限性,本文提出了一种基于对比聚类学习的全新多行为推荐模型(MBRCC)。具体而言,采用 GCN 获取用户和物品在不同行为上的嵌入表示,并围绕这些嵌入设计三类任务,以提升嵌入质量:
(a) 行为级嵌入:采用自适应参数学习策略计算用户在不同行为上的嵌入权重,并通过加权方法融合所有行为的用户嵌入;
(b) 实例级嵌入:基于用户和物品不同行为间的共性,采用对比学习优化用户和物品的嵌入表示,使正样本对之间的共性最大化,负样本对之间的共性最小化;
(c) 聚类级嵌入:多行为数据通常展现出类似的群体模式,因此采用对比聚类学习方法挖掘用户和物品嵌入的潜在信息,以促进实例级用户和物品之间的共性。

在三个真实世界数据集上对 MBRCC 进行了实验评估,结果表明,相较于其他基线模型,本文的方法在所有数据集上至少提升了 7% 的推荐性能。本文的主要贡献如下:

  • 提出了一种新型多行为推荐模型(MBRCC),包括行为级嵌入、实例级嵌入和聚类级嵌入,并首次在多行为推荐任务中应用对比聚类学习,以捕捉用户和物品的嵌入信息;
  • 在实例级嵌入中考虑了用户和物品之间的共性与差异,同时引入群体聚类级嵌入,最大化用户和物品之间的关联信息利用率,从而有效缓解数据稀疏性问题;
  • 在三个真实数据集上验证了 MBRCC 模型的有效性,实验结果表明,MBRCC 在推荐性能上显著优于现有模型。

模型

所提出的模型 (MBRCC) 如图 2 所示,主要包含四个部分。

嵌入表示部分,异构图 G 根据行为类别划分为 K 个子图。此外,为了获取完整的嵌入信息,设计了三种任务。在行为级别嵌入中,方法侧重于获取用户在每个子图上的嵌入权重。这些权重与相应子图的嵌入进行聚合,以更好地捕获用户行为在不同子图中的重要性。对于物品嵌入,采用简单的拼接操作,因为它们具有静态属性。在实例级别嵌入中,采用对比学习方法,将目标行为(即购买行为)的用户和物品嵌入与其他辅助行为进行比较,利用对比学习策略提取用户和物品之间的实例级共性信息,作为局部特征。在聚类级别嵌入中,针对每种辅助行为获取特征组,并将目标行为加入这些特征组中。然后,使用 softmax 方法在每个特征组中获取不同的特征簇,并在各特征簇之间进行对比学习。最终,这三种任务相结合,以优化用户和物品的嵌入。

4.1 嵌入表示

基于子图 Gk,采用 GCN 获取用户和物品的表示。零层的嵌入表示是矩阵 E(0)中行向量的随机初始化。在模型中,采用多层消息传播,通过收集连接邻居的信息来获取完整的节点信息。为了适应推荐任务,去除了通用 GCN 嵌入聚合中的特征变换矩阵和非线性激活函数,类似于 LightGCN。公式如下:

其中,Nu 和 Ni 分别表示用户 u和物品 i 的邻居数量,l表示当前图卷积层数,(e^k_u)^{(l+1)} 代表 k 类行为的第 l+1 层用户嵌入。在获取每层的嵌入信息后,需要聚合所有层的信息,以确保更好的节点嵌入表示:

其中,αl 代表第 l 层嵌入的权重,与 LightGCN 一致,其中 L为 GCN 的层数。物品嵌入的学习过程与用户嵌入类似。

4.2 行为级别嵌入

多行为数据可以提供更详细的信息,使用户和物品的嵌入表示更加完整。在行为级别嵌入中,设计了一种自适应参数学习方法,根据不同行为数据的分布,捕获每种行为的权重:

其中,αuk代表用户 u 在 k 类行为上的权重,wk 表示 kk 类行为的重要性。为了简化模型,假设 wk 对所有用户均具有相同影响。xuk 代表用户 u 在 k 类行为下的交互物品数量。最终的用户嵌入通过所有行为的加权求和得到:

其中,W 和 b 分别为权重和偏差,σ 代表非线性激活函数。最终的物品嵌入通过拼接所有行为的嵌入获得:

其中,Cat表示拼接操作,MLP 代表多层感知机(Multi-Layer Perceptron)。通过融合操作,得到最终的用户嵌入 eu 和物品嵌入 ei。为了确保相似节点具有更高的相似度,采用 BPR 损失进行优化:

其中,D 为训练数据集,(u,i+)和 (u,i−) 分别代表已观测的交互和未知交互。

4.3 实例级别嵌入

在实例级别嵌入中,采用对比学习方法来优化用户和物品的嵌入,目标是最大化正样本(用户或物品的同一行为嵌入)之间的相似性,同时最小化负样本(不同用户或物品的嵌入)之间的相似性。
对于第 k类辅助行为,计算其嵌入与目标行为嵌入之间的余弦相似度:

具体来说,将同一用户在不同行为上的嵌入视为正样本对,而来自不同用户的嵌入视为负样本对。假设有 N 个用户和 M 个物品,对于用户 u,其目标行为嵌入为 e^p_u,辅助行为嵌入为 e^k_u,则:

  • (e^p_u, e^k_u) 设为正样本对
  • 其余2N - 2 对设为负样本对

对于物品 i,目标行为嵌入为e^p_i,辅助行为嵌入为e^k_i,则:

  • (e^p_i, e^k_i) 设为正样本对
  • 其余2M - 2 对设为负样本对

为了优化对比学习中的样本相似度,目标行为 p 和辅助行为 k 需考虑用户损失:

其中,τ是温度参数。

与 Lpu和 Lpi 类似,用户和物品在第 k 个辅助行为下的损失函数定义如下:

目标是识别数据集中所有的正样本对。对于每个用户和物品,计算实例级损失,定义如下:

对于物品嵌入的实例级损失,采用与用户嵌入类似的方法。最终,通过汇总所有用户和物品的对比损失,得到实例级嵌入损失:

4.4 聚类级嵌入

聚类级嵌入遵循“物以类聚”的概念。用户嵌入和物品嵌入被映射到一个维度等于聚类数的空间,使用户和物品嵌入可以被解释为属于特定聚类的概率。然后,采用对比聚类学习方法来捕捉聚类特征。

对于目标行为及每个辅助行为,分别划分为 C 个聚类。其中,e^p_c 表示目标行为的第 c 个聚类,而 e^k_c 表示第 k 个辅助行为的第 c 个聚类。对于用户 u,使用 softmax 方法计算其在目标行为下被分配到第 c 个聚类的概率Y^p_{u,c}。

与实例级嵌入类似,通过选择目标行为和第 k 个辅助行为中相似的聚类得到正样本对 (e^p_c, e^k_c),而其余的 2C-2 个对则被视为负样本对。然后,采用余弦相似度计算这些聚类之间的相似性,定义如下:

其中 c,c′∈{1,2,...,C},k1,k2∈{p,k}。目标行为的损失函数 Lcp用于区分目标行为下的e^p_c 和所有不属于 e^k_c 的聚类,定义如下:

其中 τ0 是聚类级温度系数,控制损失的平滑度。同样,对于第 k 个辅助行为,聚类损失定义如下:

用户嵌入的聚类级损失通过遍历所有聚类得到,定义如下:

熵项 H(Y) 用于防止大多数样本被划分到同一聚类中。

对于物品嵌入的聚类级损失 ,采用与用户嵌入类似的方法。最终,将每组用户嵌入和物品嵌入的损失合并,得到聚类级嵌入损失:

4.5 联合优化

联合优化用于结合三种任务,定义如下:

其中,λ 控制实例级嵌入的权重,μ控制聚类级嵌入的权重,Θ 表示所有可训练参数,γ为正则化超参数。

4.6 算法描述

模型描述在算法 1 中。给定异构图 G、子图 Gk、聚类数 C、温度系数 τ 和 τ0,MBRCC 的目标是为每个用户生成一个 Top-N 推荐列表。算法 1 描述了 MBRCC 的训练过程,主要分为三个任务,每个任务分别包含一个损失函数。

实验


想看一下对比聚类怎么用到推荐算法中。。。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++蓝桥杯算法真题打卡(Day6)

一、P8615 [蓝桥杯 2014 国 C] 拼接平方数 - 洛谷 方法一&#xff1a;算法代码&#xff08;字符串分割法&#xff09; #include<bits/stdc.h> // 包含标准库中的所有头文件&#xff0c;方便编程 using namespace std; // 使用标准命名空间&#xff0c;避免每次调用…

纯vue手写流程组件

前言 网上有很多的vue的流程组件&#xff0c;但是本人不喜欢很多冗余的代码&#xff0c;喜欢动手敲代码&#xff1b;刚开始写的时候&#xff0c;确实没法下笔&#xff0c;最后一层一层剥离&#xff0c;总算实现了&#xff1b;大家可以参考我写的代码&#xff0c;可以拿过去定制…

[特殊字符][特殊字符][特殊字符][特殊字符][特殊字符][特殊字符]壁紙 流光染墨,碎影入梦

#Cosplay #&#x1f9da;‍♀️Bangni邦尼&#x1f430;. #&#x1f4f7; 穹妹 Set.01 #后期圈小程序 琼枝低垂&#xff0c;霜花浸透夜色&#xff0c;风起时&#xff0c;微光轻拂檐角&#xff0c;洒落一地星辉。远山隐于烟岚&#xff0c;唯余一抹青黛&#xff0c;勾勒出天光水…

kafka压缩

最近有幸公司参与kafka消息压缩&#xff0c;背景是日志消息量比较大。kafka版本2.4.1 一、确认压缩算法 根据场景不同选择不同。如果是带宽敏感患者推荐高压缩比的zstd&#xff0c;如果是cpu敏感患者推荐lz4 lz4和zstd底层都使用的是lz77算法&#xff0c;具体实现逻辑不同&am…

Java EE(14)——网络原理——UDPTCP数据报的结构

前言 本文主要介绍传输层的两个知名协议——UDP&TCP&#xff08;想了解其他层协议请移步Java EE(12)——初始网络&#xff09; 一.传输层的作用 传输层主要实现端对端的数据传输&#xff0c;在传输层的数据报中会包含源端口/目的端口的信息。端口的作用就是标识主机中的…

ccfcsp2701如此编码

//如此编码 #include<iostream> using namespace std; int main(){int n,m;cin>>n>>m;int a[21],b[21],c[21];for(int i1;i<n;i){cin>>a[i];}c[0]1;for(int i1;i<n;i){c[i]c[i-1]*a[i];}b[1](m%c[1])/c[0];int s1,s20;for(int i2;i<n;i){s2s2…

麒麟操作系统安装人大金仓数据库

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 在当前数字化转型和信息安全备受重视的背景下&#xff0c;众多公司积极推进国产化改造进程。在操作系统领域&#xff0c;统信、open 欧拉、中标麒麟、银河麒麟等国产操作系统崭露头角&#xff0c;逐…

【工具变量】全国地级市地方ZF债务数据集(2014-2023年)

地方ZF债务是地方财政运作的重要组成部分&#xff0c;主要用于基础设施建设、公共服务及经济发展&#xff0c;是衡量地方财政健康状况的重要指标。近年来&#xff0c;我国地级市的地方ZF债务规模不断变化&#xff0c;涉及一般债务和专项债务等多个方面&#xff0c;对金融市场、…

vlan实验

一、实验拓扑及要求&#xff1a; 二、实验步骤-思路&#xff1a; 实验需求解读&#xff1a; 首先PC1和PC3所在接口为access接口&#xff0c;属于VLAN 2&#xff0c;那么首先需求在SW1和SW2创建VLAN2&#xff0c;并且配置对应连接PC的接口链路类型为Access并放通VLAN 2PC2/4/5…

[samba配置]宿主机访问虚拟机目录

[samba配置]宿主机访问虚拟机目录 1、安装和启动Samba服务 sudo apt update sudo apt install samba2、查看samba服务是否正在运行 sudo systemctl status smbd sudo systemctl status nmbd3、配置samba服务设置为开机启动。 sudo systemctl enable smbd nmbd4、创建一个共…

PDF文件转Markdown,基于开源项目marker

​ 首先我们来问下deepseek 为啥要选marker呢 基于深度学习&#xff0c;一看就逼格拉满。搞科研必备&#xff0c;效果应该不会太差。跟其他的阿猫阿狗工具没法比。 看下官网 https://github.com/VikParuchuri/marker ​ 一看头像是个印度佬&#xff0c;自吹——又快又好。…

【深度学习与大模型基础】第6章-对角矩阵,对称矩阵,正交矩阵

一、对角矩阵 对角矩阵&#xff08;Diagonal Matrix&#xff09;是一种特殊的方阵&#xff0c;其非对角线上的元素均为零&#xff0c;只有对角线上的元素可能非零。具体来说&#xff0c;对于一个 nn的矩阵 A[]&#xff0c;如果满足 则 AA 称为对角矩阵。对角矩阵通常表示为&am…

C语言 数据结构【动态顺序表】详解

引言 详细介绍了顺序表中各个接口的实现&#xff0c;一定要亲自动手敲一遍&#xff0c;要能想象出具体的图像 第一次敲可能不能完全靠自己敲出来&#xff08;很正常&#xff09;&#xff0c;过一段时间可以根据顺序表的原理敲第二遍 孰能生巧 一、线性表 在介绍顺序表之前先…

人脸表情识别系统分享(基于深度学习+OpenCV+PyQt5)

最近终于把毕业大论文忙完了&#xff0c;众所周知硕士大论文需要有三个工作点&#xff0c;表情识别领域的第三个工作点一般是做一个表情识别系统出来&#xff0c;如下图所示。 这里分享一下这个表情识别系统&#xff1a; 采用 深度学习OpenCVPyQt5 构建&#xff0c;主要功能包…

集成学习(下):Stacking集成方法

一、Stacking的元学习革命 1.1 概念 Stacking&#xff08;堆叠法&#xff09; 是一种集成学习技术&#xff0c;通过组合多个基学习器&#xff08;base learner&#xff09;的预测结果&#xff0c;并利用一个元模型&#xff08;meta-model&#xff09;进行二次训练&#xff0c…

tcping 命令的使用,ping IP 和端口

1. ‌Windows系统安装‌ ‌下载tcping工具‌&#xff1a;根据系统位数&#xff08;32位或64位&#xff09;下载对应的tcping.exe文件。‌安装步骤‌&#xff1a; 将下载的tcping.exe文件复制到C:\Windows\System32目录下。如果下载的是64位版本&#xff0c;需将文件名改为tcpi…

浅谈跨平台框架的演变(H5混合开发->RN->Flutter)

引言 这里分为四个阶段&#xff1a; 第一阶段 &#xff1a; 原生开发 第二阶段 &#xff1a; H5混合开发 第三阶段&#xff1a; 跨平台RN 第四阶段&#xff1a; 跨平台Flutter 正文 第一阶段&#xff1a; 原生开发 开发成本比较大 &#xff1a; 需要Android 和ios 开发两…

《TCP/IP网络编程》学习笔记 | Chapter 20:Windows 中的线程同步

《TCP/IP网络编程》学习笔记 | Chapter 20&#xff1a;Windows 中的线程同步 《TCP/IP网络编程》学习笔记 | Chapter 20&#xff1a;Windows 中的线程同步用户模式和内核模式用户模式同步内核模式同步 基于 CRITICAL_SECTION 的同步内核模式的同步方法基于互斥量对象的同步基于…

力扣45.跳跃游戏

45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; #include<vector> class Solution {public:int jump(vector<int>& nums) {int ans[10005] ;memset(ans,1e4,sizeof(ans));ans[0]0;for(int i0;i<nums.size();i){for(int j1;j…

深入理解 Collections.emptyList():优雅处理空列表的利器!!!

&#x1f680; 深入理解 Collections.emptyList()&#xff1a;优雅处理空列表的利器&#xff01;&#x1f527; 大家好&#xff01;&#x1f44b; 今天我们来聊聊 Java 中一个非常实用但容易被忽视的小工具——Collections.emptyList()。&#x1f389; 如果你经常需要返回一个…