多模态情感分析(Moglobal et al.,2011; Zadeh等人,2016 b; Jiang et al.,2015)是情感计算研究的一个越来越受欢迎的领域(Escherichet al.,2017年),专注于将基于文本的情感分析推广到固执己见的视频,其中存在三种沟通方式:语言(口语),视觉(手势)和声学(语音)。
如图所示,“这部电影很恶心”的话语本身可能是模糊的(积极或消极的),但如果说话者同时也在微笑,那么它将被视为积极的。另一方面,同样的话语与皱眉将被视为负面的。一个人大声说“这部电影有病”仍然会模棱两可。这些例子说明了双峰相互作用。图中显示了三模态交互的示例,此时大声说话会将情绪增加到强烈的积极情绪。在第二个三模态例子中显示了模态间动态的复杂性,其中话语“This movie is fair”仍然是弱正的,给出了单词“fair”的强烈影响。
MTFN模型(Multi-Task Fusion Network)是一种多任务学习模型,旨在提高情感分析的准确性。该模型通过融合多个相关任务的信息,共享底层网络参数,从而提高每个任务的性能。MTFN模型的核心思想是利用多任务学习的优势,将多个相关任务同时进行训练。这些任务可以是不同语言、不同模态的情感分析任务,如文本分类、语音识别、图像识别等。多模态数据的融合是将多个单模态表示集成到一个紧凑的多模态表示中的过程。通过共享底层网络参数,MTFN模型能够有效地利用不同任务之间的信息,从而提高每个任务的性能。我们提出的TFN由三个主要组成部分组成:
1)模态嵌入子网络将单峰特征作为输入,并输出丰富的模态嵌入。
2)张量融合层使用来自模态嵌入的3重笛卡尔积显式地对单峰、双峰和三峰相互作用进行建模。
3)情感推理子网络是以张量融合层的输出为条件的网络,并执行情感推理。
(1).Spoken Language Embedding Subnetwork
网络通过使用时间相关嵌入的非线性仿射变换来简单地关注相关部分,编码可由流水线的其余部分使用,所述时间相关嵌入的非线性仿射变换可充当维数减少注意机制。
带有遗忘门的LSTM网络(Hochreiter和Schmidhuber,1997)(Gers等人,2000)用于学习时间相关的语言表示,根据以下LSTM公式计算单词。
(
i
f
o
m
)
=
(
s
i
g
m
o
i
d
s
i
g
m
o
i
d
s
i
g
m
o
i
d
t
a
n
h
)
W
l
d
(
X
t
W
l
e
h
t
?
1
)
c
t
=
f
⊙
c
t
?
1
+
i
⊙
m
h
t
=
o
?
t
a
n
h
(
c
t
)
h
l
=
[
h
1
;
h
2
;
h
3
;
…
;
h
T
l
]
\begin{aligned} \begin{pmatrix}i\\f\\o\\m\end{pmatrix}& =\begin{pmatrix}sigmoid\\sigmoid\\sigmoid\\tanh\end{pmatrix}W_{l_d}\begin{pmatrix}X_tW_{l_e}\\h_{t-1}\end{pmatrix} \\ c_{t}& =f\odot c_{t-1}+i\odot m \\ h_{t}& =o\otimes tanh(c_{t}) \\ \mathbf{h}_{\mathbf{l}}& =[h_{1};h_{2};h_{3};\ldots;h_{T_{l}}] \end{aligned}
?ifom?
?ct?ht?hl??=
?sigmoidsigmoidsigmoidtanh?
?Wld??(Xt?Wle??ht?1??)=f⊙ct?1?+i⊙m=o?tanh(ct?)=[h1?;h2?;h3?;…;hTl??]?
(2).Visual Embedding Subnetwork和Acoustic Embedding Subnetwork
我们可以从下图看到,首先,输入x被传递给批量归一化层。
然后,归一化后的数据被传递给Dropout层。
最后,dropout后的数据被依次传递给三个线性层,每个线性层后都跟着一个ReLU激活函数。
通过整合不同模态的特征来捕捉它们之间的交互信息,并输出丰富的模态嵌入表示。
2. 张量融合层:
张量融合层是MTFN模型的核心部分,它负责将多个任务的特征进行融合。张量融合层的设计需要考虑不同任务之间的关联性和差异性。在MTFN模型中,张量融合层使用3-fold笛卡尔积显式地模拟单模态、双模态和三模态相互作用。这种设计可以有效地利用不同模态之间的信息,提高情感分析的准确性。
该定义在数学上等同于zl、视觉表示zv和声学表示za之间的可微外积,如下公式所示:
z m = [ z l 1 ] ? [ z v 1 ] ? [ z a 1 ] \mathbf{z}^m=\begin{bmatrix}\mathbf{z}^l\\1\end{bmatrix}\otimes\begin{bmatrix}\mathbf{z}^v\\1\end{bmatrix}\otimes\begin{bmatrix}\mathbf{z}^a\\1\end{bmatrix} zm=[zl1?]?[zv1?]?[za1?]
3. 情感推理子网:
情感推理子网络是MTFN模型的另一个重要组成部分,它以张量融合层的输出为条件进行情感推理。情感推理子网络的设计也需要考虑不同任务之间的差异性和关联性。在MTFN模型中,情感推理子网络使用多头自注意力机制对张量融合层的输出进行进一步的处理,以生成最终的情感预测结果。情感推理子网络的似然函数定义如下,其中φ是情感预测:
arg ? max ? ? p ( ? ∣ z m ; W s ) = arg ? max ? ? U s ( z m ; W s ) \underset{\phi}{\arg\max}p(\phi\mid\mathbf{z}^{m};W_{s})=\underset{\phi}{\arg\max}\mathcal{U}_{s}(\mathbf{z}^{m};W_{s}) ?argmax?p(?∣zm;Ws?)=?argmax?Us?(zm;Ws?)
首先pip一下
pip install MMSA
接着
from MMSA import MMSA_run, get_config_regression
def mutil():
# get default config of mult on sims
config = get_config_regression('mtfn', 'sims')
# alter the default config
config['train_mode'] = 'classification'
config['batch_size'] = 16
config['num_classes'] = 3
config['featurePath'] = 'data/sims_feature'#数据地址
print(config)
# check config
# run with altered config
MMSA_run('mtfn', 'sims', config=config, model_save_dir='model', res_save_dir='output\multi', log_dir='log\mutli', num_workers=4)
if __name__ == '__main__':
mutil()
记得把自己的数据地址配置改一下,数据文件去这个网站下载,还有关于MMSA的详细介绍。