本文主要是介绍传知代码-让机器感受你的情绪!(论文复现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
代码以及视频讲解
本文所涉及所有资源均在传知代码平台可获取
让计算机理解你的情绪!
随着近年来社交媒体的快速增长,社交媒体上的用户生成内容(例如视频)的量大幅增加。不同模态的自动情感分析有利于人机交互,并吸引了大量的研究兴趣。多模态情感分析(MSA)旨在捕获和整合来自不同相关模态的情感信息,以预测说话者的情感状态或倾向。通常,我们可以从视频中获得三种形式:视觉,声学和文本。情感分析是一个重要的研究领域,旨在从人类话语中提取和融合情感信息。由于人类情感的多样性,多模态分析往往比单一模态分析更准确。为了补充相关模态之间的信息,一种有效的方法是执行跨模态交互。最近,基于transformer的框架已经显示出强大的捕获长范围依赖关系的能力,从而引入了几种基于transformer的多模态处理方法。
经过我对模型结构的修改和特征提取方法的改进,新模型的性能得到了很大的提升(3.22%)!证明了改进的有效性!
[注]:文中的使用的数据进行了重新提取,以适应当前复现和改进的模型,其中模型文件在附件中,数据、预训练模型在附件中的readme文件中都附上了下载链接,喜欢的朋友可以下载讨论!
一、概述
这篇文章我复现了一篇经典情感计算的论文 ‘TensorFormer: ATensor-Based Multimodal Transformer for Multimodal Sentiment Analysis and Depression Detection’,并加入其他模块进行了优化,以及不同的特征提取方法,获得了不错的效果;
二、主要贡献
- 提出TesnorFormer,一种新的基于张量的多模态Transformer,用于MSA任务。与以往的多模态工作相比,TensorFormer可以更有效地交换全局跨模态信息;
- 提出了一个注意力张量,基于张量的跨模态注意力机制。注意张量不仅考虑了不同模态的特点,而且同时与所有相关模态进行交互;
- 我个人采用了不同的特征提取方式 – SentiLARE;
- 加入了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进行一次交互,对视频和声学特征加入以文本为主导的多头注意力,主要起到一下作用:
-
优化信息融合: 多头注意力机制可以帮助模型更有效地整合来自不同模态(如文本、图像、音频等)的信息,特别是在模态间的互动过程中,确保每种信息都得到适当的重视和融合。
-
提升文本相关性: 由于文本数据通常提供最直接和详细的情感表达,以文本为主导的多头注意力可以确保模型在情感分析中更准确地捕捉和理解文本内容的情感色彩和情绪。
-
增强模型鲁棒性: 通过以文本为中心的多头注意力交互,可以减少其他模态(如视觉或声音)可能受到的信息偏置,从而提高模型在不同数据场景下的鲁棒性和泛化能力。
-
解决信息遗漏问题: 有时其他模态的信息可能被文本模态所掩盖或忽视,以文本为主导的多头注意力可以帮助平衡各模态间的贡献,减少信息遗漏和偏置。
综上所述,引入以文本为主导的多头注意力交互有助于在多模态情感分析中充分利用文本信息的优势,并通过有效的信息整合提升模型的性能和鲁棒性。
visual_ = self.cross_ATT_visual(text_embedding, visual_, visual_)acoustic_ = self.cross_ATT_acoustic(text_embedding, acoustic_, acoustic_)
- LSTM: 在TensorFormer交互之后,我为最终的融合模态加入了LSTM,具有以下几个优点:
-
时序建模能力强: LSTM 是一种能够捕捉时间序列信息的循环神经网络(RNN)变种。在多模态情感计算中,不同模态的数据可能存在时间上的依赖关系,比如语音的情感表达可能会受到人脸表情变化的影响,而LSTM能够有效地处理这种时序信息,提高模型对情感变化的准确性。
-
处理序列数据: 多模态情感计算中的数据通常是序列数据,例如连续的语音信号或视频帧序列。LSTM能够逐步学习和记忆这些序列数据中的长期依赖关系,从而更好地理解和分析多模态数据的情感表达。
-
特征融合与表示学习: 在多模态情感计算中,不同模态的数据往往具有不同的特征表示形式,如文本的词向量、图像的卷积特征、语音的声学特征等。通过LSTM,可以将不同模态的特征有效地融合在一起,学习到更加综合和丰富的表示,有助于提高情感分类或回归任务的性能。
-
上下文理解能力: LSTM作为一种能够捕捉上下文信息的模型,可以更好地理解不同模态数据之间的上下文关系。在情感计算中,上下文信息(如对话的历史记录、视频中的动作顺序等)对于情感的理解至关重要,LSTM能够帮助模型更好地从上下文中推断和分析情感表达。
-
模型泛化能力: 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个不同的主题。
五、性能展示
-
原文性能:
-
在我们的改进后,我们的性能提高了3.22%,这个性能的提升是非常客观的!
六、复现过程
1. 数据集准备
下载MOSI和MOSEI数据集已提取好的特征文件(.pkl)。把它放在"./dataset”目录。
2. 下载预训练语言模型
下载SentiLARE语言模型文件,然后将它们放入"/pretrained-model / sentilare_model”目录。
3. 下载需要的包
pip install -r requirements.txt
4. 训练+测试
python train.py
源码下载
这篇关于传知代码-让机器感受你的情绪!(论文复现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!