传知代码-让机器感受你的情绪!(论文复现)

news2024/9/20 14:51:45

代码以及视频讲解

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

让计算机理解你的情绪!

随着近年来社交媒体的快速增长,社交媒体上的用户生成内容(例如视频)的量大幅增加。不同模态的自动情感分析有利于人机交互,并吸引了大量的研究兴趣。多模态情感分析(MSA)旨在捕获和整合来自不同相关模态的情感信息,以预测说话者的情感状态或倾向。通常,我们可以从视频中获得三种形式:视觉,声学和文本。情感分析是一个重要的研究领域,旨在从人类话语中提取和融合情感信息。由于人类情感的多样性,多模态分析往往比单一模态分析更准确。为了补充相关模态之间的信息,一种有效的方法是执行跨模态交互。最近,基于transformer的框架已经显示出强大的捕获长范围依赖关系的能力,从而引入了几种基于transformer的多模态处理方法。
在这里插入图片描述

经过我对模型结构的修改和特征提取方法的改进,新模型的性能得到了很大的提升(3.22%)!证明了改进的有效性!

[注]:文中的使用的数据进行了重新提取,以适应当前复现和改进的模型,其中模型文件在附件中,数据、预训练模型在附件中的readme文件中都附上了下载链接,喜欢的朋友可以下载讨论!

一、概述

这篇文章我复现了一篇经典情感计算的论文 ‘TensorFormer: ATensor-Based Multimodal Transformer for Multimodal Sentiment Analysis and Depression Detection’,并加入其他模块进行了优化,以及不同的特征提取方法,获得了不错的效果;

二、主要贡献

  1. 提出TesnorFormer,一种新的基于张量的多模态Transformer,用于MSA任务。与以往的多模态工作相比,TensorFormer可以更有效地交换全局跨模态信息;
  2. 提出了一个注意力张量,基于张量的跨模态注意力机制。注意张量不仅考虑了不同模态的特点,而且同时与所有相关模态进行交互;
  3. 我个人采用了不同的特征提取方式 – SentiLARE;
  4. 加入了Multi-head CrossAttention模块和LSTM模块,增强了交互和模态时间信息的提取。
    在这里插入图片描述

三、模型结构和改进

1. 总体框架
下图为模型总体框架,主要包含特征提取,Global Cross-Modality Interaction(TensorFormer Block,Attention Tenson),Parallel Feed-Forward以及输出层:
在这里插入图片描述

2. Global Cross-Modality Interaction
为了执行全面的跨模态交互,设计了TensorFormer,其基本块结构如下图所示。出于通用性和可扩展性考虑,我们将输入模态特征表示为 X t X_t Xt (text)、 X a X_a Xa (acoustic)和 X v X_v Xv (visual),以说明TensorFormer的结构。在信息交换之前,采用线性变换将特征投影到相同的维度中。TensorFormer块中有两个主要模块,全局交叉注意模块和并行前馈模块。全局交叉注意模块旨在执行完整的模态交互。该模块的核心组件是注意力张量及其相应的查询,旨在全面,同时计算跨模态注意力分数。并行前馈模块由多个分支组成,用于处理相应模态的通道信息。

在这里插入图片描述

3. Attention Tensor
TensorFormer的全局交叉注意力机制的关键思想是注意力张量,一个包含重要信息以及所有模式的相关信息的张量。为了生成注意力张量,我们首先对输入特征执行平均池化,以获得预期特征,然后应用笛卡尔积来生成注意力张量;
在这里插入图片描述

4. Attention forGlobal Cross-Modality Interaction
注意力张量包含来自所有相关模态的综合信息。每个模态都可以从 A A A 查询注意力分数, A A A 包含所有其他模态的信息。在这里,我们首先提出了详细的说明,在传统的QKV方式,然后得出一个更简单的演示查询过程。
在这里插入图片描述

5. Parallel Feed-Forward
TensorFormer块的并行前馈结构由相应模态的三个并行分支组成。对于每个模态,前馈模块旨在按通道方式处理特征,并且由两个线性变换组成;
在这里插入图片描述

6. 主要改进
- SentiLARE: 我采用SentiLARE作为语言模型,其利用包括词性和单词情感极性在内的语言知识来学习情感感知的语言表示。下面是作者根据SentiLARE的设置进行的步骤:

给定一个单词序列,首先通过Stanford Log-Linear词性(POS)标记器学习其词性序列,并通过SentiwordNet学习单词级情感极性序列。然后,使用预训练语言模型的分词器获取词标索引序列。这个序列作为输入,产生一个初步的增强语言知识表示。更新后的文本表示将作为第(i+1)层的输入,并通过SentiLARE中的剩余层进行处理。每一层的输出将是具有视觉和听觉信息的文本主导的高级情感表示。最后,将这些文本表示输入到分类头中,以获取情感强度。

因此,新的模型通过将非语言增强嵌入集成到预训练语言模型中,有助于生成更富有情感感知的语言表示。这种方法能够在文本表示中有效地整合视觉和听觉信息,从而提升情感分析等任务的性能。

- 多头注意力交互: 我在构造 TensorFormer之前,先对uni-modal进行一次交互,对视频和声学特征加入以文本为主导的多头注意力,主要起到一下作用:

  1. 优化信息融合: 多头注意力机制可以帮助模型更有效地整合来自不同模态(如文本、图像、音频等)的信息,特别是在模态间的互动过程中,确保每种信息都得到适当的重视和融合。

  2. 提升文本相关性: 由于文本数据通常提供最直接和详细的情感表达,以文本为主导的多头注意力可以确保模型在情感分析中更准确地捕捉和理解文本内容的情感色彩和情绪。

  3. 增强模型鲁棒性: 通过以文本为中心的多头注意力交互,可以减少其他模态(如视觉或声音)可能受到的信息偏置,从而提高模型在不同数据场景下的鲁棒性和泛化能力。

  4. 解决信息遗漏问题: 有时其他模态的信息可能被文本模态所掩盖或忽视,以文本为主导的多头注意力可以帮助平衡各模态间的贡献,减少信息遗漏和偏置。

综上所述,引入以文本为主导的多头注意力交互有助于在多模态情感分析中充分利用文本信息的优势,并通过有效的信息整合提升模型的性能和鲁棒性。

visual_ = self.cross_ATT_visual(text_embedding, visual_, visual_)
        acoustic_ = self.cross_ATT_acoustic(text_embedding, acoustic_, acoustic_)

在这里插入图片描述

- LSTM: 在TensorFormer交互之后,我为最终的融合模态加入了LSTM,具有以下几个优点:

  1. 时序建模能力强: LSTM 是一种能够捕捉时间序列信息的循环神经网络(RNN)变种。在多模态情感计算中,不同模态的数据可能存在时间上的依赖关系,比如语音的情感表达可能会受到人脸表情变化的影响,而LSTM能够有效地处理这种时序信息,提高模型对情感变化的准确性。

  2. 处理序列数据: 多模态情感计算中的数据通常是序列数据,例如连续的语音信号或视频帧序列。LSTM能够逐步学习和记忆这些序列数据中的长期依赖关系,从而更好地理解和分析多模态数据的情感表达。

  3. 特征融合与表示学习: 在多模态情感计算中,不同模态的数据往往具有不同的特征表示形式,如文本的词向量、图像的卷积特征、语音的声学特征等。通过LSTM,可以将不同模态的特征有效地融合在一起,学习到更加综合和丰富的表示,有助于提高情感分类或回归任务的性能。

  4. 上下文理解能力: LSTM作为一种能够捕捉上下文信息的模型,可以更好地理解不同模态数据之间的上下文关系。在情感计算中,上下文信息(如对话的历史记录、视频中的动作顺序等)对于情感的理解至关重要,LSTM能够帮助模型更好地从上下文中推断和分析情感表达。

  5. 模型泛化能力: LSTM由于其能够处理变长序列并且有较强的泛化能力,因此在不同场景和数据条件下,都能够比较好地适应和推广。这使得基于LSTM的多模态情感计算模型在实际应用中更为稳健和可靠。

综上所述,将LSTM引入多模态情感计算中,能够充分利用其强大的时序建模能力和特征融合能力,从而提高情感计算任务的精确度和效果,特别是在处理多模态数据时能够更好地捕捉数据之间的复杂关系和动态变化。

四、数据集和预训练模型介绍

1. CMU-MOSI: CMU-MOSI数据集是MSA研究中流行的基准数据集。该数据集是YouTube独白的集合,演讲者在其中表达他们对电影等主题的看法。MOSI共有93个视频,跨越89个远距离扬声器,包含2198个主观话语视频片段。这些话语被手动注释为[-3,3]之间的连续意见评分,其中-3/+3表示强烈的消极/积极情绪;

2. CMU-MOSEI: CMU-MOSEI数据集是对MOSI的改进,具有更多的话语数量,样本,扬声器和主题的更大多样性。该数据集包含23453个带注释的视频片段(话语),来自5000个视频,1000个不同的扬声器和250个不同的主题。

五、性能展示

  1. 原文性能:
    在这里插入图片描述

  2. 在我们的改进后,我们的性能提高了3.22%,这个性能的提升是非常客观的!
    在这里插入图片描述

六、复现过程

1. 数据集准备
下载MOSI和MOSEI数据集已提取好的特征文件(.pkl)。把它放在"./dataset”目录。

2. 下载预训练语言模型
下载SentiLARE语言模型文件,然后将它们放入"/pretrained-model / sentilare_model”目录。

3. 下载需要的包

pip install -r requirements.txt

4. 训练+测试

python train.py

在这里插入图片描述

源码下载

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

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

相关文章

跟我一起学FPGA (二) 语法讲解

本章讲解 1 、Verilog 概述和基础知识; 2 、Verilog 程序框架和高级知识点; 3 、Verilog 编程规范。 1.Verilog 概述和基础知识 Verilog 是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电…

Vivado2018.3版本_将bit文件转化为bin文件

Vivado2018.3版本_将bit文件转化为bin文件 1、配置转换文件 2、下载到flash中

用 count(*)哪个存储引擎会更快?

InnoDB 引擎执行 count 函数的时候,需要通过遍历的方式来统计记录个数,而 MyISAM 引擎执行 count 函数只需要 0(1 )复杂度,这是因为每张 MyISAM 的数据表都有一个 meta 信息有存储了row_count值,由表级锁保证一致性,所…

[数据集][目标检测]鲜花检测数据集VOC+YOLO格式25215张106类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):25215 标注数量(xml文件个数):25215 标注数量(txt文件个数):25215 标…

给P人一点小小震撼!铁威马UI全新设计!更友好更美观~

开学了,小马居然发现有学校竟然玩起了新花样,通过MBTI来分宿舍,这脑洞大开的创意简直让人直呼内行! 你是P人还是J人? 在MBTI人格分类中,J人喜欢条理清晰的计划,而P人则倾向于随性所欲。 想象…

第十五届北京青年相声节宣传片发布

第十五届北京青年相声节宣传片,围绕相声演员的四个基本功:说、学、逗、唱,搭建四个生活场景,编创四个微短故事,演绎四组人物关系,向大众普及“相声就在我们身边”的深刻内涵。

如何轻松的步入编程的第一课?相信你就是那个伟大的天才!

第一次编程,会让初学者感到既兴奋又有些紧张。以下是一些建议 明确学习目标:首先,思考你为什么想学编程。是为了职业发展、兴趣爱好、还是仅仅想了解新技术?明确的目标能帮你保持学习的动力。选择合适的编程语言:对于…

【持续更新】Solid Explorer premium2.8.48.200291文件管理器最新免费高级解锁版

Solid Explorer文件管理器高级版解锁,拥有诸多增强功能和额外特性,使其区别于标准版。 ▨ 解锁版主要特点 • 解锁高级功能:无限制地访问所有高级功能 • 无广告体验:享受无任何烦人广告的流畅用户界面 • 增强安全性&#xff1a…

软件性能测试重要性简析,好用的性能测试工具有哪些?

软件性能测试是软件开发和维护过程中一个至关重要的环节。通过性能测试,企业能够评估软件在不同负载下的表现,预测其在真实环境中的表现,以确保用户能获得优秀的使用体验。 软件性能测试可以被定义为一种评估软件系统的快速性、响应性、稳定…

【ShuQiHere】重新定义Linux桌面生态:Gnome-Pie与Touché的双剑合璧

【ShuQiHere】 从期待到失望的初体验 当我第一次拿到Logitech Master 3S鼠标时,心中的兴奋感油然而生。它精致的做工、独特的造型,以及舒适的握感,让我感觉它不仅是一款鼠标,更是一件工艺品。再加上令人期待的自定义手势功能&am…

RR隔离级别下还有幻读吗

文章目录 1 背景2 验证2.1 验证准备2.1.1 环境信息2.1.2 数据准备 2.2 当前读场景验证2.2.1 前言2.2.2 场景验证2.2.3 小结 2.3.快照读场景验证2.3.1 前言2.3.2 场景验证2.3.3 小结 3 分析4 总结 1 背景 InnoDB默认的事务隔离级别是REPEATABLE-READ,它为了解决该隔离…

数学 小朋友按如图所示的规则练习数数,1大拇指,2食指,3中指,4无名指,5小指,6无名指,…,一直数到2024的时候,是哪一个手指?

1、先上一张图: 如图,一个小朋友按如图所示的规则练习数数,1大拇指,2食指,3中指,4无名指,5小指,6无名指,…,一直数到2024时,对应的指头是&#xf…

UE的Gameplay框架(三) —— Level和World

这篇文章关注于Level和World,对其在Gameplay框架中的作用及使用做简单讲解。 文章目录 Level和World的作用关卡流送关卡流送体积蓝图加载 参考资料 Level和World的作用 在UE里,Level 可以看作是 Actors 的容器,其有一个LevelScriptActor用于处…

【Netty】实战:基于WebSocket的聊天室

​ 本文将使用Netty快速实现一个聊天室应用,该应用基于WebSocket协议,用户可以在浏览器内聊天。 实现过程很简单,就几步。 一、处理Http请求 package cn.md.netty.websocket.groupchat;import io.netty.channel.*; import io.netty.handle…

yolov8目标检测pyside6可视化图形界面+检测源码ui文件——用于计数统计

项目结构 YOLOv8模型加载:加载预训练的YOLOv8模型。PySide6 GUI:设计图形用户界面,用于显示检测结果和控制选项。摄像头/视频输入:从摄像头或视频文件读取图像帧。目标检测:使用YOLOv8模型对输入图像进行实时目标检测…

Explorer++:轻量级高效文件管理器!!

项目简介 Explorer 是一款专为Windows操作系统设计的轻量级且高效的文件管理器。作为Windows资源管理器的强大替代方案,它提供了丰富的特性和优化的用户体验,使得文件管理和组织变得更加便捷高效。无论是专业用户还是普通用户,都能从中受益&a…

Leetcode面试经典150题-92.反转链表II

解法都在代码里,不懂就留言或者私信 比反转链表I略微难一点点 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, Li…

0903作业+思维导图

一、作业 1》多态的实现 1、代码 #include <iostream>using namespace std; //父类 class Person { public:string name;int age; public:Person(){}Person(string n,int a):name(n),age(a){}~Person(){}//纯虚函数virtual void show() 0; }; //子类1 class Stu:publ…

游戏开发者必看:Perforce龙智即将携手亮相2024 Unreal Fest上海站,打造游戏开发版本控制新生态

2024年9月5- 6日&#xff08;周四-周五&#xff09;&#xff0c;Unreal Fest Shanghai 2024将在上海宝华万豪酒店隆重举行&#xff01;作为游戏行业备受瞩目的盛会之一&#xff0c;Unreal Fest每年都会吸引来自世界各地的技术专家和行业领导者齐聚一堂&#xff0c;分享最新的技…

『功能项目』销毁怪物蛋的Shaders消融特效【17】

本章项目成果展示 我们打开上一篇16主角的信息显示的项目&#xff0c; 本章要做的事情是在怪物消亡时生成一个销毁特效 首先创建一个Unlit Shader 重命名为Dissolve 双击进入脚本后编写脚本&#xff1a; Shader "Unlit/Dissolve"{Properties{//物体基础材质纹理[Hea…