论文阅读笔记(12月15)--DialogXL

论文阅读笔记(12月15)–DialogXL

基本情况介绍:

作者:Weizhou Shen等
单位:中山大学
时间&期刊:AAAI 2021
主题:对话情绪识别(ERC)–文本模态
论文链接:https://ojs.aaai.org/index.php/AAAI/article/view/17625
代码:https://github.com/shenwzh3/DialogXL

1 摘要

1.1 翻译:

本文介绍了我们在使用预训练语言模型进行会话情感识别( ERC )方面的开创性工作。与常规文档不同,会话话语交替出现于不同的参与方,在以往的工作中通常被组织成层级结构。这样的结构不利于XLNet等预训练语言模型的应用。
为了解决这个问题,我们提出了一个一体式的XLNet模型,即DialogXL,它具有增强的内存来存储更长的历史上下文和对话感知的自注意力来处理多方结构。
具体来说,为了更好地对会话数据进行建模,我们首先将XLNet的递归机制从segment-level修改为utterance-level。其次,我们引入对话感知的自注意力来替代XLNet中的vanilla自注意力,以捕获有用的说话人内部和说话人之间的依赖关系。
在4个ERC基准测试集上进行了广泛的实验,并与主流模型进行了比较。实验结果表明,所提出的模型在所有数据集上均优于基准模型。此外,还进行了一些其他实验,如消融研究和误差分析,结果证实了DialogXL关键模块的作用。

1.2 重点

作者的两大创新点:

  1. 增强存储能力,保存更长的历史上下文
  2. 用对话感知的自注意力机制替换XLNet中的vanilla自注意力

2 引言及相关工作(略)

这篇论文我是略读,因为考虑到它的时间比较久了3年前的文章了,若对这个部分感兴趣自己看论文

3 方法

3.1 方法要解决的问题:

方法里面提到两个挑战:

  1. 如何编码有成百上千个单词的长的历史上下文;
  2. 如何建模不同参与者(对话中的说话者)的说话者自身和说话者之间的依赖
    作者在XLNet的基础上利用两个改进提出了DialogXL来解决这两个挑战。

3.2 模型框架

翻译:
包含1个嵌入层、12个transformer层和一个前馈神经网络。在对话输入的时候,模型依次识别每一句话语的情绪。与XLNet相比,DialogXL在训练和测试阶段配备了更有效的存储bank,用于存储历史话语的隐藏状态,以便将来复用。存储bank使用一种新的话语复述机制更新,每个transformer层的隐藏状态源于对话感知的自注意力机制。
模型框架图如下:
在这里插入图片描述

3.3 问题定义

输入:{u1, u2, …, uN },有N个话语的历史对话
每个话语包含很多个token;
输出:根据历史上下文查询话语的情绪标签(实时情绪识别)
在这里插入图片描述
在这里插入图片描述

3.4 话语recurrence

翻译:
XLNet (Yang et al. 2019)和Transformer-XL (戴翔等2019)通过一种叫segment recurrence的机制解决了输入尺寸的限制,它将以前的隐藏状态缓存在内存库中,并在将来的计算中重新访问。
然而,该机制直接应用于会话情感识别时效果不佳,原因有二。
首先,XLNet中的"段"指的是固定长度的序列,而不是句子这样的语言单元,ERC中的会话是用话语来定义的,通常是完整的句子或段落。因此,保持话语的完整性而不是将其分割成碎片是至关重要的。
其次,segment recurrence限制同一训练批次中的片段具有相同的长度,导致内存中存储的填充过多。相比之下,我们所提出的话语recurrence将历史上下文存储在无填充的记忆中,使得能够存储更长的历史上下文。
记为m的记忆就像一个堆栈。每次为查询语句生成一组新的隐藏状态后,将其与当前内存进行串联。为了防止在记忆中引入噪声,只存储话语标记的隐藏状态,忽略’ [ CLS ] '和填充位置的隐藏状态。形式上,对于第t个语句,在每个Transformer层l,新的记忆ml′更新为:
在这里插入图片描述
式中:‖表示连接操作。这种更新策略在批处理操作中特别有用。如图2所示,只使用话语token的隐藏状态更新内存使得内存更加紧凑,因为填充引入的噪声大部分被消除,并且释放了更多的空间来缓存更长的上下文。
在这里插入图片描述

3.5 对话感知的自注意力

翻译:
会话中会话双方交替出现,XLNet中的香草自注意力无法直接应用于多方场景。为此,我们将自注意力替换为对话感知的自注意力,这使得我们的模型能够在多轮多方的环境下对会话上下文进行编码。新的自注意力包括四种类型的自注意力:针对不同大小的感受野的全局自注意力和局部自注意力,以及针对说话人内和说话人间依赖关系的说话人自注意力和听话人自注意力。我们通过巧妙地改变自注意力的掩蔽策略来实现对话感知的自注意力,而不需要添加任何额外的嵌入或参数,如图所示:
在这里插入图片描述
对话感知的注意力是多头的。对于第l个Transformer层的每个注意力头,注意力输出计算如下:
在这里插入图片描述
其中Wl q、Wl k和Wl v是每个注意力头的可训练参数,RelPosAttn ( · )是Transformer - XL和XLNet采用的相对位置注意力。式( 7 )中的注意力mask s是一个与注意力权重alt形状相同的矩阵。只有当qlt中的第i个向量与klt中的第j个向量之间的注意力被掩盖时,sij的值才设置为+∞,否则设置为0。

3.5.1 全局注意力:

全局自注意力将所有的历史语境和查询语句作为接收域。这与香草自注意相同,询问语句关注整个语境。这种设置允许我们的模型关注先前的遥远的话语,这也可能是有用的( Majumder等2019)。因此,没有对全局自注意力进行掩蔽:
在这里插入图片描述

3.5.2 局部自注意力:

仅有ω个最新历史语句的接收域,其中ω为超参数。这种注意的动机是,直觉上讲话者的情感主要受最近话语的影响。在局部自注意力中,我们屏蔽了查询语句与接收域之外的历史语句之间的注意力:
在这里插入图片描述

3.5.3 说话人自注意力:

说话人自注意力只考虑当前说话人所说的历史上下文。它拟通过识别说话人历史话语中的情感线索,对说话人内依存( Ghosal等2019)进行建模。在说话人自注意力中,我们掩盖了查询语句与其他说话人所说的语句之间的注意力:
在这里插入图片描述

3.5.4 听者自注意力:

只考虑其他说话人所说的历史话语。它试图对说话人之间的依存关系( Ghosal等2019)进行建模,即当前说话人的情感可能会受到其他说话人话语的影响。在听者自注意力中,我们掩盖了查询语句和当前说话人的语句之间的注意力:
在这里插入图片描述
之后,四种类型的自注意力连接起来,再通过一个归一化层和前馈网络层作为transformer层的输出。如图:
在这里插入图片描述

模型训练

采用最后一层[CLS]的隐藏状态作为查询话语和历史上下文的最终编码,通过一个前馈神经网络得到预测的情绪:
在这里插入图片描述
损失函数:
标准的交叉熵损失
注:4种类型的注意力头是12?

4 实验

4.1 实现细节

略,看图:
在这里插入图片描述

4.2 数据集

IEMOCAP:用于情绪识别的多模态对话数据集,每个对话有两个说话者,情绪标签:neutral, happiness, sadness, anger, frustrated, and excited。(每段对话较长)
MELD:从电视节目《老友记》中收集情感识别的多模态数据集。情绪标签包括neutral, happiness, surprise, sadness, anger, disgust, and fear。
DailyDialog:人类书写的日常交流,带有情感标签包括:neutral, happiness, surprise, sadness, anger, disgust。
EmoryNLP:电视剧剧本选自《老友记》,但在场景和情感标签的选择上与MELD有所不同。该数据集的情感标签包括:neutral, sad, mad, scared, powerful, peaceful, and joyful。
本论文仅利用文本模态。

4.3 基线模型

5 结果和分析

5.1 整体表现

我们的DialogXL和基线的总体结果报告在表2中。我们可以清楚地看到,DialogXL在4个数据集上都达到了一个新的水平。此外,我们还可以做如下两个观察,这有助于理解ERC任务和DialogXL的利与弊。
首先,总的来说,预训练语言模型在MELD、DailyDialog和EmoryNLP上比其他模型有相当大的改进。然而,在这些数据集上,DialogXL相对于BERT和XLNet的改进并不显著。经过对数据集的深入挖掘,我们发现这些数据集中的对话都是相对较短的(多为5 ~ 9句)。因此,目前的语言模型BERT和XLNet在大多数情况下已经可以对整个历史上下文和查询语句进行编码。然而,在这些简短的对话中,DialogXL的优势并没有完全展现出来。
第二,虽然BERT和XLNet的性能低于IEMOCAP上的其他基线,但DialogXL相对于BERT和XLNet的性能提升是显著的。通过对数据集的考察,我们发现IEMOCAP中的对话比其他数据集的(每对话框约70句话)要长得多。在这种情况下,BERT和XLNet不能有效地编码过多的历史上下文,而诸如DialogueRNN和DialogueGCN这样的基线可以到达远处的话语,并且还可以编码说话人信息等其他关键特征。此外,我们的DialogXL既可以通过话语重现有效地编码历史语境,也可以通过对话感知的自注意力捕获说话人信息,从而获得优于所有基线的性能。

5.2 记忆增强效应

我们以100为间隔,将最大记忆长度从100变化到1000,并在IEMOCAP上绘制测试分数,在每个对话中都有足够的话语。XLNet中片段递归的内存浪费率也是根据内存中填充的百分比绘制的。由于所提出的话语复现在理论上具有0的记忆浪费,因此其记忆浪费率没有标绘出来。本实验研究了三种模型:带有原段递归的XLNet、带有语句递归的XLNet和DialogXL。
结果见图4。我们注意到,对于每一个不同的记忆长度,片段递归总是导致超过60 %的记忆浪费率。速率随着记忆长度的增加而下降,伴随着三种模型的增长。当记忆长度超过700时,它们的性能一般不再提高,这表明增加最大记忆长度只在一定范围内对测试结果有贡献。

5.3 消融实验

在这里插入图片描述
此外,当去除局部自注意力后,IEMOCAP上的F1得分下降最多,每个对话包含长的话语(约70个)。这表明查询语句附近的历史上下文对于该数据集更为重要。MELD的下降不如IEMOCAP明显,因为MELD的对话(每次对话5 ~ 9次)要短得多。最后,去除全局自注意力会导致最小的性能下降。原因可能有两方面。首先,全局话语不如局部话语重要。其次,说话人自注意力和听话人自注意力已经从远处的话语中捕获了一些有用的信息。
注:这里仅仅翻译了一部分我觉得重要的地方,完整的要看论文。

5.4 说话者角色嵌入

我们的说话人自注意力和听话人自注意力通过直接让模型知道应该关注哪部分话语来对说话人依赖项( Ghosal等2019)进行建模。另一种让预训练的语言模型理解对话中的说话人依赖关系的方法是说话人角色嵌入(包群等2020 ; Ham et al 2020),它将每个参与者映射为一个可训练的嵌入向量。在这里,我们对在IEMOCAP和DailyDialog上嵌入不同参与方的两种方法进行了简单的比较。为此,我们将DialogXL的说话人自注意力和听话人自注意力替换为说话人角色嵌入,并将得到的模型称为DialogXL - emb。比较结果见表4。我们可以观察到,我们的显性说话人和听话人自注意力比说话人角色嵌入方法更有效。因此,所提出的注意力机制也可以潜在地应用到其他对话任务中。

5.5 错误研究

我们在数据集IEMOCAP上进行了误差研究。
简要的说,我们发现DialogXL在历史语境中直接捕捉词级特征的强大能力可能是一把双刃剑。如图5所示,基于语义相关性的单词级注意力机制可以帮助做出很好的预测( Case # 1 ),但也可能会因为过于关注查询语句和历史语句之间的语义相关性而导致错误。因此,似乎有必要与其他机制相结合,而不是仅仅依靠popular的注意力机制来进行对话中的情绪识别。
除此之外,我们还从我们的坏案例中观察到一些在以前的工作中提到的,例如情感转换(也就是说,同一个说话人的连续两句话的情感标签是不同的) (哈扎里卡et al 2018 ; Majumder et al 2019)。粗略地说,我们的模型在这些案例中犯了45 %的错误,这需要进一步的研究。(这里没有看懂)

6 总结

为了对多轮多方对话数据进行建模,DialogXL在XLNet和Transformer - XL的基础上做了两点改进。
此外,我们有以下三个发现。首先,原始的片段递归机制在内存中存储了超过60 %的填充信息,这使得它不能有效地编码ERC的历史上下文。第二,传统的说话人角色嵌入策略不如我们的说话人和听话人自注意力有效,这也适用于其他对话任务。最后,误差分析表明,仅仅依靠注意力机制可能会对模型产生误导。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MX6ULL学习笔记(十二)Linux 自带的 LED 灯

前言 前面我们都是自己编写 LED 灯驱动,其实像 LED 灯这样非常基础的设备驱动,Linux 内 核已经集成了。Linux 内核的 LED 灯驱动采用 platform 框架,因此我们只需要按照要求在设备 树文件中添加相应的 LED 节点即可,本章我们就来学…

算法:二叉树的遍历

一、31种遍历方法 (1)先序法(又称先根法) 先序遍历:根,左子树,右子树 遍历的结果:A,B,C 遍历的足迹:沿途经过各结点的“左部” (2)中序法(又称中根法&#…

【MySQL内置函数】

目录: 前言一、日期函数获取日期获取时间获取时间戳在日期上增加时间在日期上减去时间计算两个日期相差多少天当前时间案例:留言板 二、字符串函数查看字符串字符集字符串连接查找字符串大小写转换子串提取字符串长度字符串替换字符串比较消除左右空格案…

【ArkTS】Watch装饰器

Watch装饰器,相当于Vue中的监听器 以及 React中使用useEffect监听变量 使用Watch装饰器,可以监听一个数据的变化,并进行后续的响应。 使用方法: Watch(‘回调函数’),写在State装饰器后(其实写在前面也行&a…

在thinkphp5.1 自定义验证规则 获取get 传递的值的时候 传递了 值 能够获取到 验证出错

控制器: public function teamDetail(){if(request()->isGet()){$team_id $this->request->get(team_id, );$this->validate->scene(teamDetail)->check($team_id);if ($this->validate->getError()) {return resultArray(lang(strval($this->vali…

Matcap的原理和应用

一、概念和原理 2.1 什么是Matcap 什么是Matcap?Matcap实际上是Material Capture的缩写,即材质捕捉。实际上,这是一种离线渲染方案。类似光照烘焙,将光照或者其它更复杂环境下的渲染数据存储到一张2D贴图上, 再从这张…

Python读写arxml文件

文章目录 前言一、XML简介二、XML文件结构三、Python读取xml文件安装ElementTree库读取xml文件四、Python写入xml文件前言 本文主要通过介绍arxml文件,为后续python脚本开发奠定基础。 arxml是AUTOSAR XML的简称,是一个通用的配置/数据库文件,实质是一个xml文件。 ①更规范…

Swin-Transformer 在图像识别中的应用

1. 卷积神经网络简单介绍 图像识别任务主要利用神经网络对图像进行特征提取,最后通过全连接层将特征和分类个数进行映射。传统的网络是利用线性网络对图像进行分类,然而图像信息是二维的,一般来说,图像像素点和周围邻域像素点相关…

Kubernetes实战(十四)-k8s高可用集群扩容master节点

1 单master集群和多master节点集群方案 1.1 单Master集群 k8s 集群是由一组运行 k8s 的节点组成的,节点可以是物理机、虚拟机或者云服务器。k8s 集群中的节点分为两种角色:master 和 node。 master 节点:master 节点负责控制和管理整个集群…

iPhone 与三星手机:哪一款最好?

三星比苹果好吗?还是苹果比三星更好? 小米公司如何称霸全球智能手机市场?小米公司,由雷军创立于2010年,是一家领先的电子巨头。以其MIUI系统和互联网服务闻名,小米公司在全球智能手机市场中稳居前列。小米…

Mybatis 动态SQL的插入操作

需求 : 根据用户的输入情况进行插入 动态SQL:根据需求动态拼接SQL 用户往表中插入数据,有的数据可能不想插入,比如不想让别人知道自己的性别,性别就为空 insert into userinfo(username,password,age,gender,phone) values(?,?,?,?,?); insert into userinfo(username,…

Llama 架构分析

从代码角度进行Llama 架构分析 Llama 架构分析前言Llama 架构分析分词网络主干DecoderLayerAttentionMLP 下游任务因果推理文本分类 Llama 架构分析 前言 Meta 开发并公开发布了 Llama系列大型语言模型 (LLM),这是一组经过预训练和微调的生成文本模型,参…

NVIDIA A100 PCIE 40GB k8s-device-plugin install in kubernetes

文章目录 1. 目标2. 简介2.1 英伟达 A100 技术规格2.2 架构优势2.3 显卡跑分对比2.4 英伟达 A100 与 kubernetes 3. 安装 NVIDIA A100 GPU 40G 硬件4. NVIDIA R450 datacenter driver5. NVIDIA Container Toolkit6. 创建 runtimeclass5. MIG Strategies6. 配置仓库7. 下载镜像8…

深度学习——第6章 浅层神经网络(NN)

第6章 浅层神经网络(NN) 目录 6.1 神经网络模型概述 6.2 神经网络正向传播 6.3 神经网络反向传播 6.4 W和b的初始化 6.5 总结 上一课主要介绍了一些神经网络必备的基础知识,包括Sigmoid激活函数、损失函数、梯度下降和计算图。这些知识对…

Linux 中使用 docker 安装 Elasticsearch 及 Kibana

Linux 中使用 docker 安装 Elasticsearch 及 Kibana 安装 Elasticsearch 和 Kibana安装分词插件 ik_smart 安装 Elasticsearch 和 Kibana 查看当前运行的镜像及本地已经下载的镜像,确认之前没有安装过 ES 和 Kibana 镜像 docker ps docker images从远程镜像仓库拉…

Domino万物可订阅

大家好,才是真的好。 如果你还不知道什么是RSS,从V站截图一份放到这里供大家参考: 其实,Domino上也可以很简单地发布RSS站点,以供内部或外部用户订阅。 前面其实我们说了不少关于Notes客户端的RSS订阅功能&#xff…

Redis设计与实现之字符串哈希表列表

目录 一、字符串 1、字符串编码 2、编码的选择 二、哈希表 1、字典编码的哈希表 2、压缩列表编码的哈希表 3、编码的选择 4、哈希命令的实现 三、列表 1、 编码的选择 2、 列表命令的实现 3、阻塞的条件 4、 阻塞 5、 阻塞因 LPUSH 、RPUSH 、LINSERT 等添加命令而…

【MySQL】(DDL) 数据类型 和 表操作-修改 删除

目录 介绍: 1.数值类型 3.日期类型 修改表: 示列: 介绍: 在之前建表语句内,用到了 int cvarchar ,那么在mysql内除了 以上的数据类型 还有那些常见数据类型 mysql 中的数据类型有很多种 &#xff0c…

QML 自定义进度条组件开发

一、效果预览 二、介绍: 自定义的QML 屏幕亮度拖动进度条组件CusProgressBar 可跟鼠标移动 更改进度条样式 三、代码 import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Controls.Material 2.12/***author:Zwj*csdn:来份煎蛋吧*date:2023/12/16*…

C++实现简单的猜数字小游戏

猜数字 小游戏介绍:猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了,还是小了,相等表示猜到了。如果猜到&…
最新文章