AAMAS2023|三思而后行:一个类人的用于情感对话生成的两阶段对话代理

本文主要是介绍AAMAS2023|三思而后行:一个类人的用于情感对话生成的两阶段对话代理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

175800be0ae34e3041167d1ab4ca7b32.png

来自:社媒派SMP

进NLP群—>加入NLP交流群

2b64a33032c4e3d328268bcda1966aa7.png

题目:Think Twice: A Human-like Two-stage Conversational Agent for Emotional Response Generation

作者:钱宇珊(天津大学)、王博(天津大学)、马尚朝(天津大学)、吴斌(起硕智能)、张硕(起硕智能)、赵东明(中国移动)、黄堃(中国移动)、侯越先(天津大学)

会议:The 22nd International Conference on Autonomous Agents and Multiagent Systems. (AAMAS 2023)

论文链接:http://arxiv.org/abs/2301.04907

c0a2a6b27cc2ab0d42687c971c0e87bc.png

ed78500a0ff21e4fd85f57789a9c021c.gif

背景

7383297ca5dda7c52c88cb4316637ccc.gif

ce8eb1a8e43c48a5dbcac82326d70846.gif

在开放域对话场景中,融入一些特定因素(如个性、知识、情感等)可以有效提升对话质量。情感对话旨在人机对话中生成能够感知和表达适当情感的回复,大量研究表明包含情感的对话在人机对话系统中可以显著提升用户的满意程度。当前的情感对话方法主要基于神经网络模型,通过端到端的方式,在对话回复中共同建模语义和情感。然而,目前的端到端情感对话模型依旧面临几个挑战:首先,高质量大规模的情感标注对话语料很难获得,人工标注的成本很高。其次,端到端的模型,在解码过程中由于情感向量的约束,会影响回复生成的语义和范围,加剧了安全回复问题。最后,不少模型生成的回复存在相应情感状态表达不明显或者实际情感状态不符合预期的问题,输入的情感信号往往在复杂的学习过程中被削弱,概括地说,是对情感的可控性不强。

bc09209d4afb2fe14db1fecd0ac06940.png

为了解决上述问题,本文参考人类真实对话行为,提出了一种生成情感回复的策略。当人类在对话中进行回复时,同时处理情感和语义不一定能确保满意的结果,产生合适的情感回复的方法之一是在确定回复的语义后,再去单独考虑情感的选择,即,对情感的“三思”。如上图所示,每个回复首先有一个适当的语义来回应上文语境。然后,通过对上文语境的再次确认,从情感层面调整回复。调整回复时考虑采用“Rewrite(改写)”和“Add(增写)”两种方式,对同伴的情感状态做出回应。具体来说,首先在没有情感标注的对话语料上训练生成符合上文语义的原型回复。然后,在第二阶段利用一个具有共情假设的可控情感精炼器修改原型回复。在DailyDialog和EmpatheticDialogues数据集上的实验结果表明,本文所提出的对话模型在情感生成方面优于基线模型,并在自动和人工评估中显示出保持语义性能的能力。本文所提出的对话模型的架构如下图所示。

21312301bdba63f574104ed1b70f0f43.png

524effaa5248d110246b07af9723ac29.gif

对话模型总体框架

1d28d4ebc1268c114185de5b856c89b8.gif

5cff675552b61047c11de0c2f8480070.gif

对话模型由三个模块构成:1)原型语句生成器。该模块将上文语境作为输入,生成一个原型回复。2)对话情感检测器。该模块对上文语境作为输入进行情感分析,得到情感状态集,用来指导最终回复的情感。3)可控情感精炼器。该模块根据情感状态集对原型回复进行精炼,生成一定程度上兼具语义和情感的最终回复。

原型语句生成器 该模块使用具有大规模参数量、可微调的预训练模型作为原型语句生成器,以此来生成内容相关,表达丰富,与上文语境一致的回复。具体而言,本文选择了12-to-48层DialoGPT作为原型语句生成器的基础模型,将上文中的所有语句以“<|endoftext|>”拼接成一个长句子作为整体输入,目标原型语句的条件分布是一系列条件概率的乘积:

对话情感检测器 作为共情的一个直观假设,倾听者倾向于以一种承认说话者感受的方式做出回应,通过呼应说话者的情感,达到一定程度上的共情。对话情感检测器的目标是识别对话上文语境的情感状态,利用上述提到的日常对话中常见的共情原则,根据识别出的上文语境中的情感状态分布将期待的情感传给可控情感精炼器:

 , 

其中,  是每个对话上文语境的情感状态集。  表示情感状态集中每类情感属于积极情感状态的个数,  表示情感状态集中每类情感属于消极情感状态的个数。

对话情感检测器识别对话上文情感的部分主要基于DialogueGCN,将对话中每个语句作为图网络的结点,语句结点与语句结点之间通过有向边连接,边的方向根据语句的序列先后决定。这些有向边用于建模说话者以前说过的话和他人说过的话对说话者自己的情感影响。模型利用Glove编码和CNN抽取语句的特征,得到每个语句  的编码,也就是每个结点的向量。每个语句之前有b句话,之后有a句话,代表每句话的结点和a+b+1个结点(包括自身)有边,每条边的权重  由结点之间的关系程度得到:

最后,将来自序列编码器sq和说话者编码器sp的编码拼接起来,结合基于相似性的注意力机制获得语句结点的最终编码。然后用全连接网络进行多个情感类别(happy, sad, neutral, angry, surprise, disgust, and fear)的分类:

关于该模块的更多细节请参考论文。

可控情感精炼器 该模块将原型回复和期待的情感作为输入,生成最终回复。需要学习的目标可定义为:

可控情感精炼器由两个模块组成,“改写”模块和“增写”模块。“改写”模块通过将句子中的原始情感符号替换为表示目标情感的符号来转换原型回复的情感属性。“增写”模块通过添加额外的句子来调整情感状态。

具体来说,“改写”模块由两个部分组成。第一个部分是删除部分,它用来确定输入中的每个token是否为情感属性词,学习输入中的情感部分和非情感部分,并删除情感部分。采用Transformer的注意力机制提取注意力得分作为每个token的权重:

第二部分是生成部分,生成部分的输入是原型回复和目标情感。输出的是一个符合目标情感的句子。生成部分采用Transformer结构,在不需要并行语料的情况下,生成部分的训练目标是最小化下列重构损失:

“增写”模块在PPLM的工作基础上构建,通过添加具有指定情感的额外句子来改变原始句子的情感极性。借助贝叶斯规则,可以使用模型  和模型  来表示模型  :

选择器用于确定是来自“改写”模块还是“增写”模块的回复作为最终输出。选择器使用GLEU与原型回复进行比较作为判断回复总体效果的依据。选择器会选择GLEU分数较高的回复作为最终回复。

关于该模块的更多细节请参考论文。

0c96153e41b1de4989855d160f345fc3.gif

实验结果

feb981266137d63308ac861206b85811.gif

94d6297487dba56b031ceb79c7824707.gif

本文使用DailyDialog和EmpatheticDialogues数据集进行实验。在评价指标方面,自动评价采用了BLEU、Diversity和Emotion Accuracy(Acc),人工评价采用了Content(Con)、Emotion(Emo)、Emotion-intensity(Int)和Fluency(Flu),具体指标定义请参考原论文。

基线模型选用了通用模型、情感对话模型和共情对话模型。DailyDialog和EmpatheticDialogues数据集的实验结果分别显示在表3和表4中。可以观察到,在情感生成的性能方面,本文所提出的对话模型在两个数据集中的自动评估指标Acc和人类评估指标Emo方面都优于所比较的基线模型,表明在情感生成方面的性能表现优异。此外,本文提出的对话模型在DailyDialog和EmpatheticDialogues数据集的Int指标上分别取得了最优和次优结果,也证明了在表达情感强度方面的优势。在语义生成性能方面,对话模型在BLEU-4和Con指标上达到了最高水平,在Dist-1和Dist-2指标上得分也适中。这些结果证实了本文提出的对话模型在显著改善情感表达的同时保持了适当语义。

8b93fce2ca239ac8550df8194d5d7d75.png

98d31c42d79b98a1db46f7d65e44540b.png

本文也展示了消融研究的实验结果,如表5所示,可以观察到删除Add模块或Rewrite模块都会导致大部分指标下降。这表明,结合“改写”和“增写”策略符合人类语言显式和隐式的表达特点,有助于产生合适的回复。此外,对话情感检测器在情感回复生成中也发挥着重要作用,它优于将上文连接成长句或仅识别单个语句。

da3f03fe6748e2344f186ca20a93d113.png

此外,对于抽样的100个人类评估样本,本文还比较了原型回复的情感和精炼后的回复的情感在所提出的对话模型中的正确性和显著性。如下图所示,左栏和右栏分别表示原型回复和精炼后的回复。红色和蓝色列分别表示正确(即与上文情感分布一致)和错误的情感。列的长度表明了情感的重要性。结果表明,精炼后的回复提高了原型回复中情感的正确性和显著性。

7d6ff8e26bb947aa7e4cc104fc44eb24.png

本文同时也给出了实验的样例分析,如下表所示,展示了从所有七个模型中抽取的一些生成回复的案例,相应的上文没有出现在训练集中。从中可以观察到,其他基线模型生成的回复具有情感表达,但语义层面上并不具有特异性。相比之下,本文提出的对话模型生成的回复不仅继承了上文语境的语义,同时也包含了丰富而恰当的情感。如EmpatheticDialogues数据集上的案例1,对话模型生成的回复既表达了对将问题报告给经理的方法的不确定的语义,同时也以委婉的方式表达了合适的情感。具体的实验分析和相关细节可参考论文。

2a66a9267c7f35e7635f5264a1ecde65.png


发布招聘信息or进NLP群—>加入NLP交流群

这篇关于AAMAS2023|三思而后行:一个类人的用于情感对话生成的两阶段对话代理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/280025

相关文章

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

C/C++随机数生成的五种方法

《C/C++随机数生成的五种方法》C++作为一种古老的编程语言,其随机数生成的方法已经经历了多次的变革,早期的C++版本使用的是rand()函数和RAND_MAX常量,这种方法虽然简单,但并不总是提供... 目录C/C++ 随机数生成方法1. 使用 rand() 和 srand()2. 使用 <random

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码