让机器来洞察他的内心!

本文所涉及所有资源均在传知代码平台可获取。

目录

洞察你的内心:你真的这么认为吗?

一、研究背景

二、模型结构和代码

D. 不一致性学习网络

E. 多模态讽刺分类

三、数据集介绍

四、性能展示

五、实现过程

1. 下载预训练的 GloVe 词向量(Common Crawl, 300d, 840B tokens):

2. 下载预提取的视觉特征并放置到 data/ 文件夹下:

3. 下载预提取的 BERT 特征并放置到 data/ 文件夹下:

5. 运行

六、运行过程

洞察你的内心:你真的这么认为吗?

  1. 随着用户生成的在线视频的指数级增长,多模态讽刺检测最近引起了广泛的关注。讽刺通常通过多种言语和非言语暗示来表达,例如语气变化、单词过分强调、音节拖长或表情严肃。 最近讽刺检测方面的大部分工作都是在文本数据上进行的。尽管取得了重大进展,但仍然存在两个主要挑战:以前的工作主要依赖于词级特征交互来建立模态间和模态内之间的关系,这可能会导致基本情感信息的丢失;
  2. 他们仅获得与文本模态交互的不一致信息,这可能导致对不一致的忽略。

为了解决这些难点,我提出了一种用于多模态讽刺检测的新型话语级不一致学习网络,其中多模态话语级注意力和不一致学习网络是两个核心模块。首先,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/VR(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

根据查看到的选项,你可以选择适合的运行配置并执行。

完成上述步骤后,你的环境应该已经正确配置,可以继续运行模型或进行其他实验了。

六、运行过程

感觉不错,点击我,立即使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/442315.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hydra 新手友好使用教程

1. Hydra 简介 Hydra是一款强大的网络登录暴力破解工具,支持多种协议。本教程将帮助新手快速上手,掌握常用指令和操作。 2. 基本语法 hydra [参数] 目标 3. 核心参数详解 3.1 用户名和密码设置 单个用户名: -l LOGIN 例:-l admin 用户名…

Redis:事务

Redis:事务 事务事务操作MULTI & EXECDISCARDWATCH 事务 在MySQL中,事务遵循CIRD特性: 原子性:事务是一个整体,要么没有发生,要么已经执行完毕一致性:事务执行前后,数据都要符…

基于Arduino的遥控自平衡小车

基于Arduino的遥控自平衡小车 一、项目简介二、所需材料三、理论支持四、外壳设计五、线路连接六、检查MPU6050连接七、烧录库八、PID控制设置九、设置传感器参数十、无线移动控制十一、超声波模块 一、项目简介 一个使用Arduino Nano、MPU-6050以及便宜的6伏直流齿轮电机的自…

活久见!2024年诺贝尔物理学奖颁给了AI大佬Hinton 和 Hopfield

家人们!让我们暂停手中工作,庆祝AI届的科学家首次获得诺贝尔物理学奖!!!!! 刚刚出炉的热乎消息:今年的诺贝尔物理学奖颁发给了约翰霍普菲尔德 (John Joseph Hopfield)与杰弗里辛顿&a…

充电桩用能计量有序充电服务的探索应用

关键词:云平台;自动检测;能源管理;有序充电 今年,电动汽车行业抓住了疫情影响洼地,迅速找到了发展突破口,从电动汽车发行政策到锂电池开发技术均出台了多层面利好消息,未来一段时间…

【JavaEE初阶】深入理解不同锁的意义,synchronized的加锁过程理解以及CAS的原子性实现(面试经典题);

前言 🌟🌟本期讲解关于锁的相关知识了解,这里涉及到高频面试题哦~~~ 🌈上期博客在这里:【JavaEE初阶】深入理解线程池的概念以及Java标准库提供的方法参数分析-CSDN博客 🌈感兴趣的小伙伴看一看小编主页&am…

SpringBoot日常:redission的接入使用和源码解析

文章目录 一、简介二、集成redissionpom文件redission 配置文件application.yml文件启动类 三、JAVA 操作案例字符串操作哈希操作列表操作集合操作有序集合操作布隆过滤器操作分布式锁操作 四、源码解析 一、简介 Redisson 是一个在 Redis 的基础上实现的 Java 驻内存数据网格…

Windows Ubuntu下搭建深度学习Pytorch训练框架与转换环境TensorRT

Windows Ubuntu下搭建深度学习Pytorch训练框架与转换环境TensorRT JetBrains2024(IntelliJ IDEA、PhpStorm、RubyMine、Rider……)安装包Anaconda Miniconda安装.condarc 文件配置镜像源查看conda的配置和源(channel)自定义conda虚拟环境路径conda常用命…

破解反编译:使用 ClassFinal 保护你的SpringBoot代码

在当今数字化时代,保护源代码的安全性变得愈发重要。无论是企业的核心算法还是独特的业务逻辑,代码一旦暴露,便可能导致竞争优势的丧失和商业机密的泄露。因此,在使用 Java 和 Spring Boot 开发项目时,理解从源代码到可…

websocket连接异常报错1006

目录: 1、问题现象2、问题原因3、解决方案 1、问题现象 WebSocket状态码的作用: 在WebSocket协议中,状态码用于表示连接状态和错误信息。通过状态码,我们可以快速判断连接是否成功,以及出现错误时的原因。常见的WebSo…

教培机构如何向知识付费转型

在数字化时代,知识付费已成为一股不可忽视的潮流。面对这一趋势,教育培训机构必须积极应对,实现向知识付费的转型,以在新的市场环境中立足。 一、教培机构应明确自身的知识定位。 在知识付费领域,专业性和独特性是关键…

VUE前后端分离毕业设计题目项目有哪些,VUE程序开发常见毕业论文设计推荐

目录 0 为什么选择Vue.js 1 Vue.js 的主要特点 2 前后端分离毕业设计项目推荐 3 后端推荐 4 总结 0 为什么选择Vue.js 使用Vue.js开发计算机毕业设计是一个很好的选择,因为它不仅具有现代前端框架的所有优点,还能让你专注于构建高性能、高可用性的W…

Matlab实现白鲸优化算法优化回声状态网络模型 (BWO-ESN)(附源码)

目录 1.内容介绍 2部分代码 3.实验结果 4.内容获取 1内容介绍 2部分代码 %% 清空环境变量 warning off % 关闭报警信息 close all % 关闭开启的图窗 clear % 清空变量 clc % 清空命令行 tic load bwand %%…

CC2530定时器1中断实现定时1-3

源码 #include "iocc2530.h"//引用CC2530头文件int t1_Count0; //定时器1溢出次数计数void Init_Led(void){ /*******************LED1初始化部分******************/P1SEL &~ 0x01; //设置P1_0口为通用I/O口P1DIR | 0x01; //设置P1_0口为输出口P…

软考越来越难了,2024年软考究竟还值不值得考?

最近不少同学沟通,聊到软考现在越来越难了,考了两三次都没过,也有不少新同学咨询软考考试的一些福利政策,投入大量的物力,财力,精力,那么到底软考值不值得考呢? 01 / 关于软考 软考…

Leetcode 10. 正则表达式匹配

1.题目基本信息 1.1.题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s 的,而不是部分…

k8s的控制节点不能访问node节点容器的ip地址

master控制node服务器添加容器后,访问不了该node服务器容器的ip,只能在node服务器访问 排查后发现是k8s的master服务器和node节点的网址网段和k8s初始化时提示的ip网段不一致 我之前是192.168.137.50, 实际上master主机期望的是192.168.1.50 解决方案: 1.删除服务器后重建ma…

python爬虫 - 进阶requests模块

🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、SSL证书问题 (一)跳过 SSL 证书验证 &#xff0…

Vue3中提到的Tree-shaking

我们知道,Vue3中提到一个叫Tree-shaking的东西,其实也并不是一个新的东西,有人称之为"摇树优化",什么意思? 按照作者的原话解释,Tree-shaking其实就是:把无用的模块进行“剪枝”&…

【Linux】进程间通信——System V消息队列和信号量

一、消息队列 1.1 概念 进程间通信的原理是让不同进程看到同一份资源,资源种类的不同就决定了通信方式的差异。如果用管道通信,则资源是文件缓冲区;如果用共享内存,则资源是内存块 消息队列是由操作系统提供的资源,…