本文所涉及所有资源均在传知代码平台可获取。
洞察你的内心:你真的这么认为吗?
一、研究背景
二、模型结构和代码
D. 不一致性学习网络
E. 多模态讽刺分类
三、数据集介绍
四、性能展示
五、实现过程
1. 下载预训练的 GloVe 词向量(Common Crawl, 300d, 840B tokens):
2. 下载预提取的视觉特征并放置到 data/ 文件夹下:
3. 下载预提取的 BERT 特征并放置到 data/ 文件夹下:
5. 运行
六、运行过程
洞察你的内心:你真的这么认为吗?
- 随着用户生成的在线视频的指数级增长,多模态讽刺检测最近引起了广泛的关注。讽刺通常通过多种言语和非言语暗示来表达,例如语气变化、单词过分强调、音节拖长或表情严肃。 最近讽刺检测方面的大部分工作都是在文本数据上进行的。尽管取得了重大进展,但仍然存在两个主要挑战:以前的工作主要依赖于词级特征交互来建立模态间和模态内之间的关系,这可能会导致基本情感信息的丢失;
- 他们仅获得与文本模态交互的不一致信息,这可能导致对不一致的忽略。
为了解决这些难点,我提出了一种用于多模态讽刺检测的新型话语级不一致学习网络,其中多模态话语级注意力和不一致学习网络是两个核心模块。首先,M-ULA 与话语级多模态信息交互,补充单词级特征。 此外,ILN 自动选择主要模态和辅助模态,并利用交叉注意力和自注意力来学习不一致的表示。同时,我在流行的多模态任务–多模态讽刺的数据集–MUStARD 上对模型进行了测试,得到了不错的效果,证明了该模型的可靠性。
【注】 文章中所用到的数据集,都经过重新特征提取形成新的数据集特征文件(.pkl),当然我也提供了原视频数据以便大家自己提取特征,下载链接都放在了附件中的 readme文件中,感兴趣的小伙伴可以进行下载,谢谢支持!
一、研究背景
讽刺是一种复杂的语言表达形式,其预期含义常常与字面解释形成对比。 这种隐含的情感表达给情感分析和意见挖掘等自然语言处理任务带来了重大挑战。 以前的讽刺检测方法主要关注分类任务的文本模态。 然而,用户生成的在线视频的激增为多模式讽刺检测带来了机遇和挑战。 另外,多模态情感特征提取仍然是一个具有挑战性的问题。 首先,仅仅依靠词级特征不足以捕捉模态之间复杂的相互作用。 其次,在任意的跨模态和模内模态上可能会出现不一致的信息。 因此,仅用其他方式从文本中探索不一致信息可能会导致全面不一致信息的丢失。
二、模型结构和代码
多模态讽刺检测利用来自不同模态的有效信息来判断潜在的不一致性。在本研究中,文本(It∈RLtIt ∈RLt )、声学(Ia∈RLaIa ∈RLa )和视觉(Iv∈RLvIv ∈RLv )这三种模态序列被用作源数据。此外,将多模态讽刺检测视为一个二分类任务,其中三种序列作为输入,讽刺性是最终的预测结果。
如上图所示,提出的用于多模态讽刺检测方法的话语级不一致学习网络由三层组成。 对于话语级特征提取层,为了从模态内和模间间捕获更丰富的有效信息,首先使用单模态编码器和话语级注意力分别获取文本、音频和视觉特征。 然后,利用多模态话语级注意力(M-ULA)来获取交互的融合特征。 对于不一致学习网络层,首先需要确定主要模态,然后采用交叉注意机制来捕获不一致信息,最后采用自注意机制来获取增强的不一致信息。 对于预测层,通过 softmax 分类器预测多模态讽刺标签。
1. 话语级特征提取
a) 单模态特征提取:该模块包括三个主要功能:词元级单模态特征提取、对齐以及话语级特征表示。对于文本模态,采用预训练的BERT-base模型将输入的文本词元编码为词嵌入。对于音频和视觉模态,参考之前的工作,利用长短期记忆网络(LSTM)提取初始特征,其表示为:It′=BERT(It)It′ =BERT(It )
其中,If′∈RLf×dfIf′ ∈RLf ×df ,f∈{t,a,v}f∈{t,a,v},LfLf 是特征长度,dfdf 代表特征维度。
此外,部署了一维卷积层和尺度层来对齐特征向量空间的维度,表示为:
其中,Scale(θ)=θ∥θ∥2Scale(θ)=∥θ∥2 θ ,Xf∈RLf×dfXf ∈RLf ×df 。值得注意的是,通过卷积层和尺度操作标准化了不同模态的特征空间维度,即 dt=da=dvdt =da =dv 。
2. 模态重建模块
提出了一个模态重建(MR)模块,基于这样一个关键观点:从提取的模态序列中重建完整的模态序列,可以引导提取模块学习缺失部分的语义。对于每种模态,首先在特征维度上执行自注意力机制,以捕获提取特征之间的交互。
其中 m∈{t,a,v}m∈{t,a,v},Hm∗Hm∗ 被视为转换后的序列特征。然后,进行线性变换,将提取的特征映射到输入空间。
其中 m∈{t,a,v}m∈{t,a,v},WmWm 和 bmbm 是线性层的参数。
在监督方面,利用原始和生成器在缺失元素上的 SmoothL1Loss(·) 作为生成损失 LmgLmg ,以提升缺失重建的效果。
Lmg=SmoothL1Loss(U^m∗M′,Um∗M′),Lmg =SmoothL1Loss(U^m ∗M′,Um ∗M′),
其中 m∈{t,a,v}m∈{t,a,v},M′M′ 是缺失掩码,用于标识输入模态序列中的缺失位置。
3. 融合模块
在重建损失的指导下,通过补充模态信息增强不完整的模态序列后,将它们融合为一个联合向量用于情感预测。提出了一个CNN门控编码器,用于分别编码增强的模态序列HmHm 。
CNN Gate Encoder:首先,提取的模态序列HmHm 通过一个双向GRU层处理,并通过tanhtanh激活函数获得更新的表示Hm′′Hm′′ :
然后,设计了一个卷积门组件进一步编码HmHm 。具体来说,一个一维卷积网络(CNN)使用窗口大小为kk的卷积核在输入Hm′′Hm′′ 上滑动,对序列中的每个元素得到一个标量值gigi 。使用填充策略确保Hm′′Hm′′ 和gg具有相同的序列长度:
其中,m∈{t,a,v}m∈{t,a,v},Conv1d(⋅)Conv1d(⋅)是一个一维卷积操作。gg被视为一个门,用于缩放表示HmHm ,过滤掉话语中不相关的上下文信息:
其中,⊗⊗表示逐元素相乘。此外,将表示Hm′Hm′ 和初始提取的序列Hm′′Hm′′ 进行连接。然后,使用一个全连接层来控制最终词级表示Hm∗Hm∗ 的维度:
最后,利用最大池化操作来关注话语中具有更大影响的特征,定义最终的模态表示Um∗Um∗ 为:
其中,hmhm 表示模态mm的隐藏维度。
三个模态表示的连接被视为融合结果,并输入到一个简单的分类器中,以进行情感强度的最终预测:
其中,BN表示批量归一化操作,LeakyReLU作为激活函数使用。Token级别的特征交互可能会导致遗漏关键信息。因此,使用话语级注意力(ULA)来学习单模态的独特特性。然而,单模态的ULA模块只能探索单个模态内部的关系。将单模态特征作为输入,得到的话语级特征表示为:
其中,Hf∈RdHf ∈Rd。单模态ULA是M-ULA的简化版本,详细信息请参见下一部分。因此,首先通过Token级特征XfXf 获取话语级特征UfUf ,随后可以通过每个单模态的ULA获得更新后的特征HfHf :
b) 多模态特征提取:该模块的主要任务是学习模态间的复杂关系,交互多模态信息,并通过多模态ULA获得融合的特征表示。将XtXt ,XaXa 和XvXv 输入到M-ULA中,学习融合后的多模态特征表示:
M-ULA的结构如图1右侧所示。设计了多模态话语级注意力(M-ULA)以探索复杂的模态内和模态间的交互。的目标是通过丰富的情感信息学习更加全面的多模态融合特征表示。将三个Token级别的单模态特征(XtXt ,XaXa ,XvXv )作为输入,并获得它们的话语级特征表示(UtUt ,UaUa ,UvUv )。通过注意力计算建立这六个情感特征之间的全连接关系,并最终通过融合得到更新后的特征。对于文本模态,利用XtXt 的第一个向量作为UtUt ,对应于BERT中的[CLS] token。对于音频和视觉模态,通过应用平均函数来得到它们的初始话语级特征。接下来,将这六个特征连接起来以获得融合特征:
其中,Xm∈R(3+Lt+La+Lv)×dXm ∈R(3+Lt +La +Lv )×d,∣⋅∣∣⋅∣表示连接操作。
在训练过程中,这三个模态的话语级特征根据注意力分数(atti,jatti,j )与不同的特征信息进行交互,从而动态更新。首先学习查询(Q)= WqXmWq Xm ,键(K)= WkXmWk Xm 和值(V)= WvXmWv Xm ,其中Q/K/V∈R(3+Lt+La+Lv)×dQ/K/V∈R(3+Lt +La +Lv )×d,WfWf 为权重矩阵 f ∈ {t, a, v}。因此,多模态特征的注意力矩阵公式为:
其中,attentioni,j∈Rattentioni,j ∈R,i,j∈[1,3+Lt+La+Lv]i,j∈[1,3+Lt +La +Lv ]。考虑到填充数据对特征表示的影响,设计了一个掩码矩阵MM,将实际单词和话语的位置设为零,而填充数据的位置设为−∞−∞。最终的注意力得分矩阵如下所示:
更新后的多模态特征表示Xm′∈R(3+Lt+La+Lv)×dXm′ ∈R(3+Lt +La +Lv )×d通过残差函数获得:
然后,将交互后的特征分为两组:话语级特征(Ut′,Ua′,Uv′Ut′ ,Ua′ ,Uv′ )和Token级特征(Xt′,Xa′,Xv′Xt′ ,Xa′ ,Xv′ )。独立地对三个可学习的Token级特征进行加权和求和,得到融合的Token级特征值FtokenFtoken 。接着,通过取平均值,获得全局Token特征DtokenDtoken ,并将其与话语级特征融合生成融合特征DmDm 。最终,经过几个线性层后,得到多模态特征表示HmHm :
D. 不一致性学习网络
a) 主要模态选择:为了评估模态不一致性,首先需要确定主要模态。参考文献[17],根据每种模态对讽刺检测的贡献自动分配权重值,贡献越高,权重值越高。在每个训练批次中更新权重值,同时保持所有可训练权重值的总和为1。获得主要模态PP以及辅助模态A1,A2,A3A1 ,A2 ,A3 。
b) 通过交叉注意力进行不一致性学习:为了从主要模态和辅助模态中获取不一致性信息,利用交叉注意力(CMA)机制获取交互后的辅助模态:
c) 通过自注意力进行不一致性学习:将交互后的主要模态$ \tilde{P}_{\tilde{A}1}, \tilde{P}{\tilde{A}2} 和和 \tilde{P}{\tilde{A}_3} $进行拼接,然后利用自注意力(SA)机制识别其显著成分,作为最终的主要模态表示:
其中,W1,W2W1 ,W2 和W3W3 是可训练的权重参数,模态本身通过这些权重参数来调整提取的辅助信息量。
E. 多模态讽刺分类
多模态讽刺检测任务旨在预测标签y∈{讽刺,非讽刺}y∈{讽刺,非讽刺}。因此,最终的句子级不一致性表示通过一个带有Softmax激活函数的全连接层来生成在多模态讽刺决策空间中的概率分布yy:
其中,WoWo 和bobo 是可训练的参数。
三、数据集介绍
1. 多模态讽刺数据集:
- MUStARD: 该数据集包含 690 个话语(345 个讽刺示例和 345 个非讽刺示例),这些话语源自著名电视节目,例如《老友记》、《生活大爆炸》、《黄金女郎》和《讽刺狂》。 实验数据集的详细统计数据如表一所示。
四、性能展示
五、实现过程
在下载附件并准备好数据集并调试代码后,进行下面的步骤,附件已经调通并修改,可直接正常运行;
1. 数据集准备
附件中 data/sarcasm_data.json是已经标记好的讽刺标签
以下是执行上述任务的详细步骤:
1. 下载预训练的 GloVe 词向量(Common Crawl, 300d, 840B tokens):
下载链接在附件中readme.md;
2. 下载预提取的视觉特征并放置到 data/ 文件夹下:
你需要确保将视觉特征下载并解压到 data/features/ 文件夹中,使其包含 context_final/ 和 utterances_final/ 这两个子文件夹;
3. 下载预提取的 BERT 特征并放置到 data/ 文件夹下:
你需要确保下载到的文件包括以下两个文件:
- data/bert-output.jsonl
- data/bert-output-context.jsonl
你可以将这两个文件直接放在 data/ 文件夹下
5. 运行
在命令行中运行 python train_svm.py -h 查看可选项,以选择运行配置(或者可以修改 config.py),然后运行该脚本:
python train_svm.py -h
根据查看到的选项,你可以选择适合的运行配置并执行。
完成上述步骤后,你的环境应该已经正确配置,可以继续运行模型或进行其他实验了。
六、运行过程
感觉不错,点击我,立即使用