本文讲解并复现了2024年一篇多模态情感计算的文章 “TETFN: A text enhanced transformer fusion network for multimodal sentiment analysis”,这篇论文利用三种模态之间进行交互,并对文本模态进行增强,以更准确的提取非文本模态的情感信息。
随着社交媒体和短视频行业的快速发展,来自文本、视频和音频的多模态数据呈现爆炸式增长。与此同时,捕获设备的广泛使用,加上其易用性、移动性和低成本,使得从不同用户捕获情感线索变得容易,这与人类语言交流相同。这三种情态在表达过程中既有语义上的联系又有互补性。因此,在多模态情感分析中的一个关键问题是如何设计一种多模态融合方案来有效地集成异构数据,以便学习包含更多情感相关信息的多模态表示,同时保持每个模态的一致性和差异性信息。
下图是整体的TETFN模型框架:

接下来,我们对其中重要模块逐一进行讲解; 1. 特征提取

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


部分交互代码如下:
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)
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可用于情感分析和情感识别任务。
在此附上下载链接:CMU-MOSI、CMU-MOSEI
在准备好数据集并调试代码后,进行下面的步骤,附件已经调通并修改,可直接正常运行; 1. 下载多模态情感分析集成包
pip install MMSA2. 进行训练
# 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. 训练过程

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

3. 最终模型结果输出


希望对你有帮助!加油!
若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!