当前位置: 首页 > news >正文

TETFN情感计算的实践复现(论文复现)

TETFN情感计算的实践复现(论文复现)

本文所涉及所有资源均在传知代码平台可获取

文章目录

    • TETFN情感计算的实践复现(论文复现)
      • 概述
      • 研究背景
      • 主要贡献
      • 模型框架
      • 数据介绍及下载
      • 复现过程(重要)
      • 运行过程及结果

概述

本文讲解并复现了2024年一篇多模态情感计算的文章 “TETFN: A text enhanced transformer fusion network for multimodal sentiment analysis”,这篇论文利用三种模态之间进行交互,并对文本模态进行增强,以更准确的提取非文本模态的情感信息。

研究背景

随着社交媒体和短视频行业的快速发展,来自文本、视频和音频的多模态数据呈现爆炸式增长。与此同时,捕获设备的广泛使用,加上其易用性、移动性和低成本,使得从不同用户捕获情感线索变得容易,这与人类语言交流相同。这三种情态在表达过程中既有语义上的联系又有互补性。因此,在多模态情感分析中的一个关键问题是如何设计一种多模态融合方案来有效地集成异构数据,以便学习包含更多情感相关信息的多模态表示,同时保持每个模态的一致性和差异性信息。

主要贡献

  • 本文提出了一种文本增强型Transformer融合网络,该网络通过面向文本的多头注意机制和文本引导的跨模态映射来获得模态间的一致性,并通过单峰预测来保持差异化信息;
  • 利用视觉预训练模型ViT对原始视频进行预处理和特征提取,以获得具有全局和局部信息的视觉特征;
  • 在增强文本模态表示的同时,利用文本模态信息充分提取非文本模态特征,并充分融合模态间表示,提高情感预测的准确性;

模型框架

下图是整体的TETFN模型框架:

在这里插入图片描述

1.特征提取:

  • 文本特征:使用预先训练好的语言模型Bert作为文本编码器,它可以为文本模态提供丰富的语义信息。给定原始句子S=w1,w2,…,wnS=w1,w2,…,w**n,在将SS与两个特殊令牌[CLS][CLS]和[SEP][SEP]连接之后,将该序列输入到编码器中;然后,具有上下文信息的序列表示作为文本模态的输入;
  • 视觉特征:至于视觉模态,使用预先训练的视觉模型Vision-Transformer(ViT)作为视觉编码器。视觉形态的情感主要通过面部表情来体现。同时,鉴于眼睛、嘴巴等特定器官更能反映人的情绪,因此本文采用ViT来获取人脸的全局和局部信息;
  • 声学特征:对于音频模态,利用由COVERAP声学分析框架提取的音频手工特征。特征包括12个梅尔频率倒谱系数、音高、音量、声门源参数以及与语音的情绪和音调相关的其他特征。CMU-MultimodalSDK可以获得每个多模态示例的COVERAP特征序列;
  • 上下文编码:鉴于说话人在视频中的情感表达是一个连续的过程,每种模态的输入序列都具有时间性。因此,为了通过将时间长期依赖注入特征序列来模拟情感的变化过程,对视觉和声学使用单层长短期记忆网络(LSTM),然后对所有模态使用时间卷积网络来捕获每个时间步的信息的时间依赖性,并投射所有隐藏状态以获得后续过程的统一维度;

在这里插入图片描述

2.文本增强型Transformer模块

Text enhanced Transformer主要包含3个模块:Positional embedding、Text Enhanced Transformer、Unimodal Label Generation Module;我们分别对他们进行介绍和讲解:

  • Positional embedding

    为了让模型捕获输入的顺序信息,根据Transformer的结构,作者在每个模态的低层表示中添加了位置嵌入

在这里插入图片描述

  • Text Enhanced Transformer
    设计了一个文本增强的Transformer(TET)模块,以更好地编码三个信息源。TET通过计算两种模态之间的注意力权重来促进一种模态从另一种模态接收信息,从而促进不同模态的情感相关信息的交互。众所周知,文本是反映说话人情感的最基本、最直观的形式,比视频和音频包含更多的情感相关信息。因此,当视觉模态v和音频模态a被映射和转换到彼此时,融合特征缺乏情感相关的信息和语义。针对这种情况,除了标准的多头注意力编码功能,从其他形式的组合,作者利用面向文本的多头注意力机制,它利用文本来催化音频和视觉形式之间的交互;下图是该模块的运作图:

在这里插入图片描述

h_l_with_as = self.trans_l_with_a(proj_x_l, proj_x_a, proj_x_a)    # Dimension (L, N, d_l)
h_l_with_vs = self.trans_l_with_v(proj_x_l, proj_x_v, proj_x_v)    # Dimension (L, N, d_l)
h_ls = torch.cat([h_l_with_as, h_l_with_vs], dim=2)
h_ls = self.trans_l_mem(h_ls)
if type(h_ls) == tuple:h_ls = h_ls[0]
last_h_l = h_ls[-1]   # Take the last output for prediction# (L,V) --> A
h_a_with_ls = self.trans_a_with_l(proj_x_a, proj_x_l, proj_x_l)
h_a_with_vs = self.trans_a_with_v(proj_x_v, proj_x_a, proj_x_l)
h_as = torch.cat([h_a_with_ls, h_a_with_vs], dim=2)
h_as = self.trans_a_mem(h_as)
if type(h_as) == tuple:h_as = h_as[0]
last_h_a = h_as[-1]# (L,A) --> V
h_v_with_ls = self.trans_v_with_l(proj_x_v, proj_x_l, proj_x_l)
h_v_with_as = self.trans_v_with_a(proj_x_a, proj_x_v, proj_x_l)
h_vs = torch.cat([h_v_with_ls, h_v_with_as], dim=2)
h_vs = self.trans_v_mem(h_vs)
if type(h_vs) == tuple:h_vs = h_vs[0]
last_h_v = h_vs[-1]# fusion
fusion_h = torch.cat([last_h_l, last_h_a, last_h_v], dim=-1)
fusion_h = self.post_fusion_dropout(fusion_h)
fusion_h = F.relu(self.post_fusion_layer_1(fusion_h), inplace=False)
# # text
text_h = self.post_text_dropout(text_h)
text_h = F.relu(self.post_text_layer_1(text_h), inplace=False)
# audio
audio_h = self.post_audio_dropout(audio_h)
audio_h = F.relu(self.post_audio_layer_1(audio_h), inplace=False)
# vision
video_h = self.post_video_dropout(video_h)
video_h = F.relu(self.post_video_layer_1(video_h), inplace=False)
  • Unimodal Label Generation Module

    作者将单峰标签生成模块(ULGM)集成以捕获特定于模态的信息。在前向传播过程中,通过LSTM的音频和视觉模态的最后隐藏状态被用作初始表示。同时,在Bert的最后一层中的第一个词向量被选为文本表示。然后,通过全连接层获得单峰预测。在训练阶段,首先用预测的单峰标签和多峰融合表示来定义正中心和负中心。然后,计算从每个模态的表示到正中心和负中心的相对距离,并获得从单峰标签到多模态标签的偏移值,以生成第i个epoch的单峰标签。这样,更有利于情感分析获得不同模态的差异化信息,同时保持每个模态的一致性;

    在这里插入图片描述

数据介绍及下载

1. CMU-MOSI: 它是一个多模态数据集,包括文本、视觉和声学模态。它来自Youtube上的93个电影评论视频。这些视频被剪辑成2199个片段。每个片段都标注了[-3,3]范围内的情感强度。该数据集分为三个部分,训练集(1,284段)、验证集(229段)和测试集(686段)。
2. CMU-MOSEI: 它类似于CMU-MOSI,但规模更大。它包含了来自在线视频网站的23,453个注释视频片段,涵盖了250个不同的主题和1000个不同的演讲者。CMU-MOSEI中的样本被标记为[-3,3]范围内的情感强度和6种基本情绪。因此,CMU-MOSEI可用于情感分析和情感识别任务

复现过程(重要)

在准备好数据集并调试代码后,进行下面的步骤,附件已经调通并修改,可直接正常运行;
1. 下载多模态情感分析集成包

pip install MMSA

2. 进行训练

# show usage
$ python -m MMSA -h# train & test LMF on MOSI with default parameters
$ python -m MMSA -d mosi -m lmf -s 1111 -s 1112# tune 50 times of TFN on MOSEI with custom config file & custom save dir
$ python -m MMSA -d mosei -m tfn -t -tt 30 --model-save-dir ./models --res-save-dir ./results# train & test self_mm on SIMS with custom audio features & use gpu2
$ python -m MMSA -d sims -m self_mm -Fa ./Features/Feature-A.pkl --gpu-ids 2

运行过程及结果

值得注意的是,我没有设置固定的epoch轮数,利用每轮训练结果与best performance比较,知道结果达到最好,则自动停止训练;

  1. 训练过程

在这里插入图片描述

  1. 每轮的单模态预测结果

在这里插入图片描述

  1. 最终模型结果输出

在这里插入图片描述

文章代码资源点击附件获取

相关文章:

TETFN情感计算的实践复现(论文复现)

TETFN情感计算的实践复现(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 TETFN情感计算的实践复现(论文复现)概述研究背景主要贡献模型框架数据介绍及下载复现过程(重要)运行过程及结果 概…...

游戏各个知识小点汇总

抗锯齿原理记录 SSAA:把成像的图片放大N倍,然后每N个点进行平均值计算。一般N为2的倍数。比如原始尺寸是1000x1000,长宽各放大2倍变成2000x2000。 举例: 原始尺寸: 放大2倍后 最后平均值计算成像: MSAA&…...

Python设计模式实战:开启软件设计的精进之旅

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...

用RNN(循环神经网络)预测股票价格

RNN(循环神经网络)是一种特殊类型的神经网络,它能够处理序列数据,并且具有记忆先前信息的能力。这种网络结构特别适合于处理时间序列数据、文本、语音等具有时间依赖性的问题。RNN的核心特点是它可以捕捉时间序列中的长期依赖关系…...

08-图7 公路村村通(C)

很明显聪明的同学已经发现,这是一个稠密图,所以用邻接矩阵。可以很好的表达,比邻接表有优势,所以,采用邻接矩阵破题, 当然也可以用邻接表,仔细观察我的AC,会发现其实都一样,只是存储…...

Java-sleep()、wait()、join()、yield()的区别

关于线程,作为八股文面试中必问点,我们需要充分了解sleep()、wait()、join()以及yield()的区别。在正式开始之前先让我们了解两个概念:锁池和等待池 1.锁池 所有需要竞争同步锁的线程都会放在锁池当中,比如当前对象的锁已经被其中…...

Linux命令的补全和自动完成完全开启

前言 在安装好RockyLinux8.8后,输入dn后,按下“TAB”能自动提示,但在输入dnf make后,按下“TAB”不能实现自动补全,如果要使Linux的Bash支持完整的自动提示和补全功能,还需要执行一些其它操作。 内容 1、…...

Deep Active Contours for Real-time 6-DoF Object Tracking

这篇论文解决了从RGB视频进行实时6自由度(6-DoF)物体跟踪的问题。此前的基于优化的方法通过对齐投影模型与图像来优化物体姿态,这种方法依赖于手工设计的特征,因此容易陷入次优解。最近的基于学习的方法使用神经网络来预测姿态&am…...

IDEA安装教程配置java环境(超详细)

引言 IntelliJ IDEA 是一款功能强大的集成开发环境(IDE),广泛用于 Java 开发,但也支持多种编程语言,如 Kotlin、Groovy 和 Scala。本文将为你提供一步一步的指南,帮助你在 Windows 系统上顺利安装 Intelli…...

Excel文档的读取(1)

熟悉使用Excel的同学应该都知道,在单个Excel表格里想要分商品计算总销售额,使用数据透视表也可以非常快速方便的获得结果。但当有非常大量的Excel文件需要处理时,每一个Excel文件单独去做数据透视也会消耗大量的时间。就算使用Power Query这样…...

Linux:体系结构和操作系统管理

目录 一、冯诺依曼体系结构 1.问题1 2.问题2 二、操作系统管理 一、冯诺依曼体系结构 本章将会谈论一下对冯诺依曼计算机体系结构的理解。 在2024年,几乎所有的计算机,都遵守冯诺依曼体系结构。 冯诺依曼体系结构是应用在硬件层面的,而硬…...

c++ install boost lib

同步系统上的软件包列表 sudo apt-update 整个库安装: sudo apt-get install libboost-all-dev 安装部分库: sudo apt-get install libboost-thread-dev sudo apt-get install libboost-filesystem-dev 链接时加上: -lboost_filesystem -lboost_system 例如: g -Wall -o bo…...

文件加密最简单的方法有哪些?十个电脑文件加密方法【超详细】

在当今数字化和信息化的时代,数据已成为企业最重要的资产之一。内部数据外泄不仅可能导致商业秘密的丧失,还可能对企业的声誉和财务健康造成严重影响。为了有效防止内部数据外泄,企业需要实施综合的防泄密解决方案。以下是十大最佳防泄密解决…...

IPv6地址的表示方法

IPv6地址总长度为128比特,通常分为8组,每组为4个十六进制数的形式,每组十六进制数间用冒号分隔。 例如:2409:8745:039a:c700:0000:0000:0162,这是IPv6地址的首选格式。 为了书写方便,IPv6还提供了压缩格式…...

Kubernetes 之 kubelet 与 CRI、CNI 的交互过程

序言 当一个新的 Pod 被提交创建之后,Kubelet、CRI、CNI 这三个组件之间进行了哪些交互? Kubelet -> CRI -> CNI 如上图所示: Kubelet 从 kube-api-server 处监听到有新的 pod 被调度到了自己的节点且需要创建。Kubelet 创建 sandbo…...

【python】OpenCV—Age and Gender Classification

文章目录 1、任务描述2、网络结构2.1 人脸检测2.2 性别分类2.3 年龄分类 3、代码实现4、结果展示5、参考 1、任务描述 性别分类和年龄分类预测 2、网络结构 2.1 人脸检测 输出最高的 200 个 RoI,每个 RoI 7 个值,(xx,xx&#x…...

python安装换源

安装 python 使用演示的是python 3.8.5 安装完成后,如下操作打开命令行:同时按 “WindowsR” > 输入 “cmd” -> 点击确定 python换源 临时换源: #清华源 pip install markdown -i https://pypi.tuna.tsinghua.edu.cn/simple # 阿里…...

JavaScript练手小技巧:利用鼠标滚轮控制图片轮播

近日,在浏览网站的时候,发现了一个有意思的效果:一个图片轮播,通过上下滚动鼠标滚轮控制图片的上下切换。 于是就有了自己做一个的想法,顺带复习下鼠标滚轮事件。 鼠标滚轮事件,参考这篇文章:…...

搭建Eureka高可用集群 - day03

全部代码发出来了 搭建服务提供者 步骤: 1.创建项目,引入依赖 2.添加Eureka相关配置 3.添加EnableEurekaClient注解 4.测试运行 步骤1:创建项目,引入依赖 使用Spring Initializr方式创建一个名称为eureka-provider的Sprin…...

并行程序设计基础——并行I/O(2)

目录 一、显式偏移的并行文件读写 1、阻塞方式 1.1 MPI_FILE_READ_AT 1.2 MPI_FILE_WRITE_AT 1.3 MPI_FILE_READ_AT_ALL 1.4 MPI_FILE_WRITE_AT_ALL 2、非阻塞方式 2.1 MPI_FILE_IREAD_AT 2.2 MPI_FILE_IWRITE_AT 3、两步非阻塞组调用 3.1 MPI_FILE_READ_AT_ALL_BEG…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

React Native 导航系统实战(React Navigation)

导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...