代码以及视频讲解
本文所涉及所有资源均在传知代码平台可获取
你的博文透露了你内心的秘密
随着社交媒体和短视频行业的快速发展,来自文本、视频和音频的多模态数据爆发式增长。 同时,捕捉设备的广泛使用,加上其使用的简便性、移动能力和低成本,使得捕捉不同用户的情绪线索变得容易,这与人类语言交流相同。 这三种情态在表达过程中语义上相互关联、相辅相成。方面级多模态情感分析旨在从多模态数据中识别目标方面的情感,最近在多媒体和自然语言处理领域引起了广泛的关注。 尽管最近基于文本方面的情感分析取得了成功,但现有模型主要集中于利用图像中的对象级语义信息,而忽略了明确使用视觉情感线索,尤其是面部情感。如何提炼视觉情感线索并将其与文本内容保持一致仍然是解决该问题的关键挑战。
作为多模态情感分析的一项重要任务,多模态基于方面的情感分析(MABSA)旨在将句子-图像对中表达的情感极性分类为特定方面。 与文本方面层面的情感分析相比,挖掘和利用视觉内容中方面的情感线索是核心问题同时,我在多种流行的多模态任务–多模态讽刺的数据集–MUStARD 、推特数据集-Twitter-2015 和 Twitter-2017 以及抑郁症数据集AVEC 2019 上,都得到了不错的效果,证明了该模型的可靠性。
【注】 文章中所用到的数据集,都经过重新特征提取形成新的数据集特征文件(.pkl),当然我也提供了原视频数据以便大家自己提取特征,下载链接都放在了附件中的 readme文件中,感兴趣的小伙伴可以进行下载,谢谢支持!
一、研究背景
作为多模态情感分析的一项重要任务,多模态基于方面的情感分析(MABSA)旨在将句子-图像对中表达的情感极性分类为特定方面。 与文本方面层面的情感分析相比,挖掘和利用视觉内容中方面的情感线索是核心问题。但由于数据集的限制以及 MABSA 任务中跨模态对齐的监督较弱,隐式捕获图像中的情感信息的方法更有可能学习到非情感线索偏差。我提出了一种简单但有效的面部敏感图像到情感文本跨模态翻译方法,该方法通过生成的面部表情描述将图像中包含的情感文本化。该方法不需要对情感图像标题生成模型进行额外的训练。 此外,在方面敏感的对齐和修改阶段,在考虑场景信息和面部表情之间的关系的同时,我采用一种预训练的视觉语言模型 CLIP 来选择性地检索图像中的面部情感线索 与目标方面最相关的。 有效解决了多人脸场景下目标方位与图像表情描述的匹配问题。 在最后阶段,应用门机制对多模态特征进行融合和去噪。
二、模型结构和代码
3.1 任务定义
MABSA 任务可以表述如下:给定一组多模态样本
S
=
{
X
1
,
X
2
,
.
.
.
,
X
∣
S
∣
}
S = \{X_1, X_2, ..., X_{|S|}\}
S={X1,X2,...,X∣S∣},其中
∣
S
∣
|S|
∣S∣ 表示样本的数量。对于每个样本,给定一个图像
V
∈
R
3
×
H
×
W
V \in \mathbb{R}^{3 \times H \times W}
V∈R3×H×W,其中 3、H 和 W 分别表示图像的通道数、高度和宽度,以及一个包含
N
N
N 个词的文本内容
T
=
(
w
1
,
w
2
,
.
.
.
,
w
N
)
T = (w_1, w_2, ..., w_N)
T=(w1,w2,...,wN),其中包含一个长度为
M
M
M 的目标方面子序列
A
=
(
w
1
,
w
2
,
.
.
.
,
w
M
)
A = (w_1, w_2, ..., w_M)
A=(w1,w2,...,wM)。我的目标是学习一个情感分类器,为每个样本
X
=
(
V
,
T
,
A
)
X = (V, T, A)
X=(V,T,A) 预测一个情感标签
y
∈
{
Positive(积极)
,
Negative(消极)
,
Neutral(中立)
}
y \in \{\text{Positive(积极)}, \text{Negative(消极)}, \text{Neutral(中立)}\}
y∈{Positive(积极),Negative(消极),Neutral(中立)}。
3.2 整体结构
如下图所示,所提出的模型包括三个模块:面部敏感的图像到情感文本翻译模块、目标方面敏感的对齐与修改模块和基于门控的多模态融合模块。对于给定的多模态推文
X
=
(
V
,
T
,
A
)
X = (V, T, A)
X=(V,T,A),将视觉输入
V
V
V 输入到面部敏感的图像到情感文本翻译模块中,以生成面部描述
D
=
{
D
1
,
D
2
,
.
.
.
,
D
I
}
D = \{D_1, D_2, ..., D_I\}
D={D1,D2,...,DI},其中
I
I
I 是视觉输入
V
V
V 中包含的面部数量,
D
i
=
(
w
1
,
w
2
,
.
.
.
,
w
K
)
D_i = (w_1, w_2, ..., w_K)
Di=(w1,w2,...,wK) 表示一个包含
K
K
K 个词的句子。此模块侧重于提取并将图像中包含丰富情感线索的面部表情进行文本化。随后,由于视觉输入
V
V
V 可能包含多个面部表情,有必要将目标方面
A
A
A 与相关的面部描述
D
A
D_A
DA 进行匹配。
在目标方面敏感的对齐与修改模块中,计算每个面部描述与目标方面 A A A 拼接后的文本与图像输入 V V V 之间的余弦相似度。然后,根据这些相似度分数选择并重写面部描述 D A D_A DA。此外,考虑到图像场景可以补充额外的语义信息,采用 CapBERT 中使用的标题转换器生成图像场景描述 C = ( w 1 , w 2 , . . . , w J ) C = (w_1, w_2, ..., w_J) C=(w1,w2,...,wJ),其中 J J J 表示图像标题的长度。
最后,在基于门控的多模态融合模块中,利用两个预训练的语言模型对面部描述和场景图像标题进行建模,然后采用门控机制进行特征融合和降噪。门控单元的输出通过线性层进行目标方面情感预测。在接下来的子部分中,我将详细介绍每个模块。
3.3 面部敏感的图像到情感文本翻译
该模块旨在解决 MABSA 中的两个固有挑战。第一个挑战是,由于多模态推文中的图像没有类别限制,在复杂图像中提取对象级情感线索非常困难。第二个挑战是,即使从图像中提取到情感线索,如何在低资源环境下将情感图像内容转化为文本模态也是一个难题。
为解决第一个挑战,如上所述,利用图像中的丰富面部表情是一种直接且有效的提取视觉情感线索的方法。首先应用面部识别工具识别所有面部 F = { F 1 , F 2 , . . . , F I } F = \{F_1, F_2, ..., F_I\} F={F1,F2,...,FI},其中 I I I 表示面部数量, F i ∈ R 3 × H F × W F F_i \in \mathbb{R}^{3 \times H_F \times W_F} Fi∈R3×HF×WF 表示具有 3 个通道、高度为 H F H_F HF 和宽度为 W F W_F WF 的面部区域。接着,将这些面部作为输入,使用四个预训练的基于面部的分类器(Serengil 和 Ozpinar, 2021)进行面部属性分析,包括年龄、性别、面部表情(包括愤怒、恐惧、中性、悲伤、厌恶、快乐和惊讶)和种族(包括亚洲人、黑人、白人、中东人、印度人和拉丁裔)的预测。
对于第二个挑战,我希望在不额外训练新的情感图像描述模型的情况下,将图像中的面部表情转化为文本内容。因此,在面部属性分析后,根据预测置信度过滤获得的面部属性,过滤掉置信度低于阈值 θ = 0.4 \theta = 0.4 θ=0.4 的面部属性。为了生成流畅的自然语言情感面部描述,手动设计了一个基于面部属性的面部描述生成模式。
3.4 目标方面敏感的对齐与修改
考虑到多面部示例,图像中的面部表情各不相同,而儿童的愤怒表情对于预测“凯特·米德尔顿”这个方面的情感极性没有帮助。然而,相关性较弱的面部表情会引入噪声,降低模型的性能。因此,准确对齐图像中的面部表情和目标方面是必要的。该模块主要关注面部表情与目标方面的细粒度对齐与对应面部描述的重写。
鉴于 MABSA 任务不包含直接的图像-文本对齐监督,并且 MABSA 任务的数据集规模限制了模型通过对比学习进行细粒度对齐的能力,因此引入外部图像-文本对齐知识是必要的。为此,应用 CLIP 模型进行这种细粒度对齐。使用 CLIP 模型的文本编码器和图像编码器,这些编码器在大规模图像-文本配对数据集上进行了预训练,分别对连接了目标方面 A A A 的面部描述 D D D 和图像 V V V 进行编码。面部描述和图像的特征嵌入表示为:
H D & A = Text_Encoder ( concat ( D , A ) ) H_{D\&A} = \text{Text\_Encoder}(\text{concat}(D, A)) HD&A=Text_Encoder(concat(D,A))
H V = Image_Encoder ( V ) H_V = \text{Image\_Encoder}(V) HV=Image_Encoder(V)
之后,将输出的特征嵌入投影到同一特征空间中,并通过 L2 正则化计算这些特征嵌入的余弦相似度 L L L。然后,选择与当前图像相似度最高的面部描述,作为当前方面的文本化视觉情感线索。重写后的面部描述仅保留目标方面和预测面部属性中的表情。
H D & A ′ = L2_Normalize ( H D & A ⋅ W D & A ) H'_{D\&A} = \text{L2\_Normalize}(H_{D\&A} \cdot W_{D\&A}) HD&A′=L2_Normalize(HD&A⋅WD&A)
H V ′ = L2_Normalize ( H V ⋅ W V ) H'_V = \text{L2\_Normalize}(H_V \cdot W_V) HV′=L2_Normalize(HV⋅WV)
L = ( H V ′ ⋅ ( H D & A ′ ) T ) ∗ e t L = (H'_V \cdot (H'_{D\&A})^T) \ast e^t L=(HV′⋅(HD&A′)T)∗et
其中, W D & A W_{D\&A} WD&A 和 W V W_V WV 是可学习权重, t t t 是 CLIP 模型中的温度缩放。更多细节请参见附录。
此外,考虑到视觉场景信息对多模态语义的影响,采用 CapBERT 的基于 Transformer 的图像标题生成模型来生成图像的中性整体描述:
C = Caption_Transformer ( V ) C = \text{Caption\_Transformer}(V) C=Caption_Transformer(V)
最终,获得了对齐后的面部描述和场景图像标题,并将它们作为输入传递给下一个模块。
3.5 基于门控的多模态融合模块
在此模块中,旨在将文本输入及目标方面与生成的面部描述 D a l l D_{all} Dall 和场景图像的标题 C C C 融合到文本模态特征空间中。为了利用预训练语言模型强大的文本上下文建模能力,将面部描述和场景图像标题分别与文本 T T T 和目标方面 A A A 连接,形成两个新的句子:
[ C L S ] w 1 T , . . . , w N T [ S E P ] w 1 A , . . . , w M A [ S E P ] w 1 D a l l , . . . , w K D a l l [ S E P ] [CLS]w_1^T, ..., w_N^T[SEP]w_1^A, ..., w_M^A[SEP]w_1^{D_{all}}, ..., w_K^{D_{all}}[SEP] [CLS]w1T,...,wNT[SEP]w1A,...,wMA[SEP]w1Dall,...,wKDall[SEP]
[ C L S ] w 1 T , . . . , w N T [ S E P ] w 1 A , . . . , w M A [ S E P ] w 1 C , . . . , w J C [ S E P ] [CLS]w_1^T, ..., w_N^T[SEP]w_1^A, ..., w_M^A[SEP]w_1^C, ..., w_J^C[SEP] [CLS]w1T,...,wNT[SEP]w1A,...,wMA[SEP]w1C,...,wJC[SEP]
然后,将这些新句子输入两个预训练的语言模型中,并微调语言模型以获得 [CLS] 标记的池化输出 H [ C L S ] D ∈ R 768 H_{[CLS]}^D \in \mathbb{R}^{768} H[CLS]D∈R768 和 H [ C L S ] C ∈ R 768 H_{[CLS]}^C \in \mathbb{R}^{768} H[CLS]C∈R768。由于生成方法的表现,生成的面部描述和场景图像标题包含不可忽视的噪声。为减轻噪声的影响,采用门控机制对特征表示 H [ C L S ] D H_{[CLS]}^D H[CLS]D 和 H [ C L S ] C H_{[CLS]}^C H[CLS]C 进行去噪。融合后的特征表示经过线性分类层以获得情感预测结果:
g t = σ ( W D H [ C L S ] D + W C H [ C L S ] C + b g ) g_t = \sigma(W_D H_{[CLS]}^D + W_C H_{[CLS]}^C + b_g) gt=σ(WDH[CLS]D+WCH[CLS]C+bg)
H = g t H [ C L S ] D + ( 1 − g t ) H [ C L S ] C H = g_t H_{[CLS]}^D + (1 - g_t) H_{[CLS]}^C H=gtH[CLS]D+(1−gt)H[CLS]C
p ( y ∣ H ) = softmax ( W H + b ) p(y|H) = \text{softmax}(WH + b) p(y∣H)=softmax(WH+b)
其中, W D ∈ R 768 × 768 W_D \in \mathbb{R}^{768 \times 768} WD∈R768×768、 W C ∈ R 768 × 768 W_C \in \mathbb{R}^{768 \times 768} WC∈R768×768、 W ∈ R 768 × 3 W \in \mathbb{R}^{768 \times 3} W∈R768×3、 b g ∈ R 768 b_g \in \mathbb{R}^{768} bg∈R768 和 b ∈ R 3 b \in \mathbb{R}^{3} b∈R3 是可学习参数, σ \sigma σ 是非线性变换函数 tanh \tanh tanh。
使用标准的交叉熵损失来优化此模块中的所有参数:
L = − 1 ∣ D ∣ ∑ l = 0 ∣ D ∣ log p ( y ( l ) ∣ H ( l ) ) L = - \frac{1}{|D|} \sum_{l=0}^{|D|} \log p(y^{(l)}|H^{(l)}) L=−∣D∣1l=0∑∣D∣logp(y(l)∣H(l))
三、数据集介绍
1. 多模态讽刺数据集:
- MUStARD: 该数据集包含 690 个话语(345 个讽刺示例和 345 个非讽刺示例),这些话语源自著名电视节目,例如《老友记》、《生活大爆炸》、《黄金女郎》和《讽刺狂》。 实验数据集的详细统计数据如表一所示。
2. 博文情感计算数据集
- Twitter-2015 和 Twitter-2017: 这两个数据集由多模态推文组成,这些推文注释了文本内容中提到的方面以及每个方面的情感极性。 每条多模式推文均由图像和包含目标方面的文本组成。 由于我们的方法更关注包含人脸的示例,因此我们提取上述两个数据集中包含人脸的示例以形成 Twitterface 数据集并验证我们的模型在此数据集上的优越性。 三个数据集的详细统计数据如下表3所示
3. 抑郁症数据集
- AVEC2019: AVEC2019 DDS数据集是从患者临床访谈的视听记录中获得的。访谈由虚拟代理进行,以排除人为干扰。与上述两个数据集不同的是,AVEC2019中的每种模态都提供了几种不同的特征。例如,声学模态包括MFCC、eGeMaps以及由VGG和DenseNet提取的深度特征。在之前的研究中,发现MFCC和AU姿势分别是声学和视觉模态中两个最具鉴别力的特征。因此,为了简单和高效的目的,我们只使用MFCC和AU姿势特征来检测抑郁症。数据集用区间[0,24]内的PHQ-8评分进行注释,PHQ-8评分越大,抑郁倾向越严重。该基准数据集中有163个训练样本、56个验证样本和56个测试样本。
四、性能展示
1. 情感计算任务
2. 抑郁症检测任务,以下是模型在抑郁症数据集AVEC2019中的表现:
Model | CCC | MAE |
---|---|---|
Baseline | 0.111 | 6.37 |
EF | 0.34 | – |
Bert-CNN & Gated-CNN | 0.403 | 6.11 |
Multi-scale Temporal Dilated CNN | 0.430 | 4.39 |
Proposed | 0.459 | 4.52 |
3. 讽刺数据集任务
Model | Acc | Recall | F1 |
---|---|---|---|
SMSD | 65.6 | 66.1 | 66.1 |
MIARN | 64.7 | 64.0 | 63.9 |
MFN | 70.1 | 69.6 | 69.7 |
IAIE | 72.1 | 71.6 | 72.0 |
RAVEN | 69.1 | 67.5 | 67.1 |
Proposed | 76.9 | 76.1 | 76.5 |
五、实现过程
在下载附件并准备好数据集并调试代码后,进行下面的步骤,附件已经调通并修改,可直接正常运行;
下载所需环境和库包
pip install -r requirements.txt
运行
python FITE.py
六、运行过程
-
训练过程
-
最终结果
源码下载