Multi-modal Graph Contrastive Learning for Micro-video Recommendation

news2024/12/29 11:12:26

模型总览如下:

解决问题:同种重要性对待每种模态,可能使得得到的特征表示次优,例如过度强调学习到的表示中的特定模态。以MMGCN为例,下图为MMGCN模型总览。

 如上图所示MMGCN在每种模态上构建用户-物品二部图,然后在每一个模态二分图上进行GCN,将结果与其他两个特征(id,原始特征)进行combination,得到该模态的representation(因为各模态所处语意空间不同,其实这一步做的是collaboration fusion,限制是不变量为id),论文中将各模态的represention做了sum得到最终的用户/物品特征表示。这就可能存在一个问题,当训练集中的数据因过少等原因,无法表现出用户真实的兴趣,某一模态占有较高的地位时,用这些数据训练模型,模型可能就会“偷懒”,给这个模态较大的权重就可以得到很好的结果。那该怎么办的?根据多模态一致性准则(多模态数据共享某些一致的语义信息),去除某一个模态应不影响用户主要意图,用剩下的模态去训练久好了,那该怎么实现呢?? 这就是这篇论文的主要贡献,请继续阅读。

本文贡献:

一、本文采用了一个多任务训练策略,将最优化评分任务目标和对比学习目标相结合。损失函数如下,共由两部分组成:预测评分和实际评分之间的差距以及对比学习损失(对于每一个用户-物品对,又分别将用户/物品做为锚,所以存在两个对比学习损失):

 二、本文提出两种正样本数据增强(对某一模态Masking,边随机变丢弃)以及一种负样本生成方式(挑战负样本)。

Modality Masking:

 其中p为掩盖每种模态的概率和为1,这种方法可确保各模态的有效贡献(我们通过在输入层用随机初始化的嵌入替换用户/项目特征的特定模态来实现这种掩蔽操作。)

Modality Edge Dropout:

边丢弃生成的子图仍然可以保留用户的主要意图,在这种增强数据上进行对比学习可以捕捉每种模态图中每个节点的有效模式,再通过concat赋予representation。

Challenging Negative Samples

对hard negative samples进行特征挖掘,对特征融合时某一模态特征可能主导represention的情况很有用。它将物品某一模态的特征换成了其他物品的,迫编码器在仅有一个模态不同的情况下区分正负样本。如下图所示,d(j)为随机下标

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云原生】Gateway网关选型

网关一般分为流量网关和业务网关,流量网关负责接入所有的流量,并分发给不同的子系统,那在具体的业务接入之前,还有一层业务网关。流量网关提供全局性的、与后端业务应用无关的策略,例如 HTTPS证书卸载、Web防火墙、全局…

[vue]vue3.x 组合式API不同写法

[vue]vue3.x 组合式API不同写法改进后组合API实际实际使用中的疑问组件名称问题两种写法的优缺点对比优点缺点组合式API,采用了更加灵活的方式,官网推荐的语法糖,但仅限于比较简单的单文件,作为尝试 改进后组合API实际实际使用中的疑问 改进…

4-2 Linux进程和内存概念

文章目录前言进程状态进程优先级内存模型进程内存关系前言 进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。一般来说,Linux系统会在进程之间共享程序代码和系统函数库,所以在任何时刻内存中都只有代码的一份拷贝。 进程状态…

36_2 On Chip Bus —— AXI总线介绍

目录 1.AXI总线介绍(读2写3) 1.1流量控制 1.2 AXI signals 信号线 1.3重点信号线的介绍 1.4原子操作——让读改写一套操作 永远是一个master对一个slave 1.5AXI BURST Boundary——一个burst不能跨4k boundary,master要保证 1.6读/写通…

k8s中的PV和PVS

前言:容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)…

Python 算法交易实验51 Step2 Signals 信号生成

说明 不可不读书 先从经典的一些超简单信号开始 使用移动平均指标SMA(算术) 给出了信号的产生方法,还有一些测算结果,反正看起来都是盈利的 首先使用离线方法实验一组结果,然后就使用ADBS来进行类似的处理。 内容 1 原理分析…

【python中的列表和元组】

文章目录前言一、列表及其使用1.列表的特点2. 列表的使用方法二、元组及其特点1.元组的类型是tuple1.元组的查找操作2. 计算元组某个元素出现的次数3.统计元组内元素的个数总结前言 本文着重介绍python中的列表和元组以及列表和元组之间的区别 一、列表及其使用 1.列表的特点…

JavaSE学习进阶day2_02 抽象类和接口

第四章 抽象类 4.1 概述 4.1.1 抽象类引入 先看一张图: 这张图时之前学习继承时用的,但是现在有一个疑问,吃饭这个行为猫和狗都有,但是它们吃的东西却又不同,这个时候我们不能确定父类吃饭这个方法到底该写什么&…

数据库分库分表策略

一、MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。 关于数据库的扩展主要包括:业务拆分、主从复制,数据库分库与分表。这篇文章主要讲述数据库分库…

03-SQLPlus的常用命令和使用

本章内容讲解SQLPlus的常用命令使用方法,参数的设置,帮助的使用,详细讲解如下: 登录SQL*Plus DOS方式登录SQL*Plus C:\>sqlplus 提示输入用户名、密码 C:\>sqlplus scott/tiger 连到默认数据库,注册表或环境变量中设 …

Blender——植物生长动画制作

效果图前言参考链接:https://www.bilibili.com/video/BV1aY411G7bk/?spm_id_from333.788.recommend_more_video.10&vd_source5212838c127b01db69dcc8b2d27ca517建议Blender的版本在3.0.0或以上。制作完成的植物生长动画blender文件下载:https://dow…

SpringCloud之ElasticSearch笔记

ElasticSearch 初识ElasticSearch ElasticSearch是什么 ElasticSearch一个基于Lucene的底层的开源的分布式搜索引擎,可用来实现搜索,日志统计,分析,系统监控 正向索引和倒排索引 正向索引:逐条扫描(my…

Databend v1.0 Release 正式发布

尊敬的 Databenders,在 Databend Labs 成立两周年之际,我们非常高兴地宣布 Databend v1.0 正式发布。 Databend 社区一直在致力于解决大数据分析的成本和复杂度问题,并正在被顶级场景和顶级需求所推动。 根据可统计信息,每天约 7…

2023年“中银杯”安徽省职业院校技能大赛网络安全A模块全过程解析

A模块基础设施设置/安全加固(200分) 一、项目和任务描述: 假定你是某企业的网络安全工程师,对于企业的服务器系统,根据任务要求确保各服务正常运行,并通过综合运用登录和密码策略、流量完整性保护策略、事件监控策略、防火墙策略等多种安全策略来提升服务器系统的网络安全…

K8S 实用工具之三 - 图形化 UI Lens

开篇 📜 引言: 磨刀不误砍柴工工欲善其事必先利其器 第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?》第二篇:《K8S 实用工具之二 - 终端 UI K9S》 像我这种,kubectl 用的不是非常溜,经…

指针面试笔试题练习

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍c语言中有关指针更深层的知识. 金句分享: ✨星光…

webGL编程指南实战教程

学习路线: 如果你是在校大学生,有足够的时间去学习:前端>数学(几何线性代数)>图形学>webgl>shader >threejs>three.js源码如果你是工作中使用,需要快速出产成品:前端>thr…

【博学谷学习记录】超强总结,用心分享 | 架构师 JDK源码学习总结

文章目录HashMap类1.定义2.哈希表3.JDK1.8前HashMap的数据结构4.JDK1.8后HashMap的数据结构5.类构造器6.字段属性①Node<K,V>[] table②size③loadFactor④threshold7.构造函数①默认无参构造函数②指定初始容量的构造函数8.确定哈希桶数组索引位置9.添加元素10.扩容机制…

操作系统重难点笔记

1.信号量机制&#xff0c;读者/写者问题 读者/写者问题分为两种情况&#xff1a; 1.读者和写者互斥&#xff0c;并且不同的读者和写者之间都互斥,一共三个互斥 下面给出伪代码 int m1; int mr1; int mw1; int count0; writer() {while(1){P(mw);........V(mw);} } reader() {…

防止暴力破解ssh的四种方法

一. 方法介绍 防止暴力破解的四种方法&#xff1a; 1 密码要写的足够的复杂&#xff0c;通常建议将密码写16位&#xff0c;并且无连贯的数字或者字母&#xff1b;当然也可以固定一个时间修改一次密码&#xff0c;推荐是一个月修改一次会稳妥一些2 修改ssh的端口号&#xff0c;…