文 | 页眉3
编 | 小轶

背景

当我们在绞尽脑汁地想怎么设计一个对话系统的时候,我们当然希望最后训练出来的系统能越像人越好,输出的回复很连贯,很有趣,很体贴。而其中,连贯性可以说是最基本的要求之一了,毕竟不连贯的回复往往会让人觉得这个对话系统很笨。

至于连贯性的定义,简单来说其实就是对话系统说的话在语法和语义上够不够连贯。比如说,当一个人说“我今天中午吃了面条”,对话系统如果回复“我吃也面面条”,那就是语法不连贯;如果回复“我喜欢跑步”,那就是语义不连贯。

定义有了,那现在问题就来了,要怎么去评估对话系统的连贯性呢?针对这个问题,学术界最开始就是奉行“拿来主义”,把之前机器翻译任务上的自动指标拿来评估对话连贯性,比如BLEU[1],衡量对话系统输出回复和给定参考回复之间的N-gram重叠程度。但这种指标存在一个致命伤:缺乏语义上的考量,容易错怪“好人”,也容易听信“坏人”。比如说,参考回复是 “真巧,我中午也吃了面条”,对话系统的回复是 “哈哈哈我也吃了”,这种情况,对话系统回复是连贯的,只不过和参考回复相比换了个表述,但BLEU只看这两个回复在字面上像不像,就会认为回复是不连贯的。又比如说,对话系统的回复是 “真巧,我中午也吃了条”,和参考回复只有一字之差,但意思就不对了,是不连贯的,但BLEU会觉得它们很像,认为对话系统是连贯的。

发现不对劲后,学术界为了摆脱BLEU这种生硬的字面评估,转向研究基于深度神经网络的自动指标,希望神经网络在训练时记住各种连贯和不连贯的情况,并能泛化到训练时没见过的情况。模型结构往往是一个神经网络作为编码器(比如RNN, Transformer),来对输入的对话历史和对话回复提特征,然后再接一个分数预测模块来将特征转变为连贯性分数。从结果上看,这类指标相比前面提到的BLEU这类指标,确实在整体上能给出更为准确的评估结果。

这类工作的训练目标,最常采用的损失函数还是 cross entropy loss 或 margin ranking loss,并采用无监督的方式来训练。而所谓无监督,其实就是不自己标数据,将原始对话数据作为正样本,再用一些启发式策略为每一个正样本自动生成一个相应的负样本(最直接粗暴的就是从对话语料中随机选一个出来),然后按照前面提到的两种loss之一,让指标在训练过程中尽可能将正负样本区分开。比如说18年提出的RUBER[2],19年提出的BERT-RUBER[3],以及去年提出的GRADE[4],整体思想都是如此。

这种训练方式会存在两个局限:

  1. 将对话连贯性评估问题简化为了一个是否问题,只要求指标能够区分出连贯与不连贯,而忽略了其中具体的连贯性程度。如图1所示,这与人工打分(比如打1到5分)是有明显区别的;

  2. 使用某种启发式负采样策略来人为获取负样本往往存在偏置,无法准确学习到真实的人工打分标准。

▲图1 人工打分 VS. 指标打分

为了解决上述局限,今天要介绍的这篇工作提出了一个新型指标训练框架 QuantiDCE旨在实现可量化的对话连贯性评估指标。该文已被ACL 2021 主会录用,并获得了4/4/4的 review 评分,受到评审人的一致认可。

论文标题

Towards Quantifiable Dialogue Coherence Evaluation

论文链接
https://arxiv.org/abs/2106.00507

开源代码
https://github.com/James-Yip/QuantiDCE

方法

本文提出的 QuantiDCE框架包括两个训练阶段:MLR预训练(Multi-Level Ranking pre-training)和 KD微调(Knowledge Distillation fine-tuning)。

▲图2 QuantiDCE整体训练流程

模型结构方面,采用BERT作为特征提取模块对输入的context-response pair进行编码,然后将编码后的特征输入到一个三层MLP中,得到最终的连贯性分数输出:





























在MLR预训练阶段,我们希望能够让指标模型在没有连贯性分数标注作为监督信息的情况下,初步学习到对不同连贯性程度的对话回复的粗粒度判断。对此,本文提取了一个多层级排序损失函数(MLR loss)作为训练目标。MLR loss 具体包括三个子 loss :separation loss, compactness loss 以及 ordering loss。

其中,separation loss旨在让具有不同连贯性程度的context-response pairs彼此远离;compactness loss是让连贯性程度相同的pairs相互靠近;而最后的ordering loss则是为了约束不同连贯性程度的pairs之前满足一个从小到大的排序关系,例如最不连贯的pair对应的分数要小于中等连贯的,中等连贯的又要小于最连贯的。损失函数具体公式如下:

接下来的KD微调阶段,主要是希望指标模型能够在前面预训练的基础上,进一步学习到人类打分的真实标准。为此,文章作者用了少量的人工打分标注数据作为ground truth,计算模型预测分数和人工真实分数之间的MSE loss进行优化。另外,因为用于微调的数据量很少,模型很容易会出现过拟合的现象,导致之前在预训练阶段学习到的量化知识都被遗忘掉。针对这个问题,我们在MSE loss的基础上,引入了一个知识蒸馏正则项,用于在微调阶段保留预训练阶段学习到的知识。具体来说,我们将预训练后的指标模型(参数固定)作为teacher,待微调的指标模型作为student,并借鉴TinyBERT[5]的蒸馏目标,约束student的各层输出以及中间层注意力矩阵与teacher的保持一致。损失函数具体公式如下:



































实验结果

实验在一个公开的指标评测benchmark[4]上进行。将QuantiDCE训练的指标模型与现有的八个自动指标进行了比较。实验结果显示,本文指标取得了最佳性能,并比目前的SOTA结果平均高五个点左右。

▲表1 各个自动指标在ConvAI2和EmpatheticDialogues数据集上的性能对比

另外,针对MLR预训练阶段和KD微调阶段,我们还尝试了各种不同的损失函数进行比较,进一步验证了我们提出的MLR loss以及KD-MSE loss的有效性。图二也展示了模型采用不同损失函数的可视化结果。可以看到,在预训练阶段优化MLR loss可以使得指标模型能够有效地区分出不同连贯性程度的对话输入。

▲表2 采用不同预训练损失函数的性能对比

▲图3 采用不同预训练损失函数时,模型中间特征(上)及最终分数输出(下)的可视化结果

▲表3 采用不同微调损失函数的性能对比

最后还进行了两组消融实验。(1)单独去除QuantiDCE训练过程中用到的其中一个损失函数,研究了本文提出的各个损失函数对最终性能影响的重要程度;(2)对微调阶段使用的数据量进行了实验,研究少样本设定下数据量对模型性能的影响。

▲表4 消融实验(1):去除某个特定损失函数的性能对比

▲图 3 消融实验(2):微调阶段采用不同数据量的性能变化趋势

总结

本文针对对话连贯性评估问题提出了一个两阶段指标训练框架QuantiDCE。通过两阶段的递进式训练,逐步让指标模型掌握量化的能力,从而能够输出与人工打分更为一致的连贯性分数。实验上,本文将QuantiDCE训练出来的指标模型与当前现有的各种自动指标进行了对比,并取得了最佳性能,验证了该框架的有效性。

寻求报道、约稿、文案投放:
添加微信xixiaoyao-1,备注“商务合作”

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

 

[1] Kishore Papineni, et al. BLEU: a Method for Automatic Evaluation of Machine Translation. In ACL 2002.

[2] Chongyang Tao, et al. Ruber: An unsupervised method for automatic evaluation of open-domain dialog systems. In AAAI 2018.

[3] Sarik Ghazarian, et al. Better automatic evaluation of open-domain dialogue systems with contextualized embeddings. In Proceedings of the Workshop on Methods for Optimizing and Evaluating Neural Language Generation, ACL 2019.

[4] Lishan Huang, et al. GRADE: Automatic Graph-Enhanced Coherence Metric for Evaluating Open-Domain Dialogue Systems. In EMNLP 2020.

[5] Xiaoqi Jiao, et al. TinyBERT: Distilling BERT for Natural Language Understanding. In Findings of EMNLP 2020.

对话系统答非所问?快试试这篇ACL'21的连贯性评估大法相关推荐

  1. linux下kegg注释软件,工具篇丨GO和KEGG富集不到通路?快试试这个超赞的功能分析工具吧...

    原标题:工具篇丨GO和KEGG富集不到通路?快试试这个超赞的功能分析工具吧 i生信 专注生物分析最前沿 定期解读生信文章 提供生信分析思路和套路 方便大家短平快发SCI GO和KEGG富集分析是我们在 ...

  2. 电脑图片删除怎么找回?快试试这个方法!

    电脑图片彻底删除怎么找回?大家电脑里面应该都保存着大量图片吧?保存到电脑的图片比较方便.不过在操作电脑的时候,很容易因为误操作将图片不小心给删除了,这时候千万不能慌,快试试小编这些方法. 方法一:&q ...

  3. 【OpenCV 例程200篇】21. 图像的叠加

    [OpenCV 例程200篇]21. 图像的叠加 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 两张图像直接进行加法 ...

  4. 王者荣耀服务器维护中有什么漏洞,王者荣耀:玩家发现新漏洞,趁天美没修复,快试试...

    原标题:王者荣耀:玩家发现新漏洞,趁天美没修复,快试试 在王者荣耀这款游戏中,当游戏中出现一些bug之后,是一件让玩家们又喜又恨的事情,之所以喜,是因为当这些bug出现之后,我们可以在游戏中体验到平时 ...

  5. 为什么餐厅老是没人光临?快试试全息投影餐厅

    为什么餐厅老是没人光临?快试试全息投影餐厅 与传统的餐厅相比,全息投影餐厅构建是基于多媒体投影技术,那什么是多媒体全息投影呢?简单来说就是使用一台或者多台投影设备,在将需要构建的场景使用定制化的多媒体 ...

  6. 如何快速写一篇文章。

    写文章,可能会非常耗时当你没有准备的主题中,您想要写在足够的信息.你可以最终在你的电脑前坐着,并在屏幕发呆.那么,怎样才是你写的文章较快的时间?以下是我做什么: 1.文章营销秘密无1. -研究 在您开 ...

  7. 【C++ 基础篇:21】:friend 友元四连问:什么是友元?友元类?友元函数?什么时候用友元?

    本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇.STL 篇.高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C++的三大特 ...

  8. 小白如何快速写一篇高质量SEO文章

    由于搜索引擎越来越智能化,以前那种疯狂采集行业文章改一下标题的方式早已经过去.现在百度的AI强大到,段落重复超过多少字符甚至是语意类似就可以直接判定你这是伪原创,不给收录. 所以,今天我就跟大伙分享一 ...

  9. ACL’21 | 对话系统也要进军多模态了!

    文 | 胡煌,梁祖杰 编 | 小轶 对于一个对话Bot来讲,拥有对视觉信息的感知和联想能力是非常重要的.比如,我们人类在对话中谈到大海的时候,就会自然地联想到蓝天.白云和飞翔的海鸟.然而,当前的对话模 ...

最新文章

  1. 二手服务器cpu性能,二手服务器cpu当主机
  2. django 限制匿名用户访问以及重定向
  3. php超市结算,超市物品结算简易程序代码
  4. 苹果CMS v10一键采集芒果tv官方直链地址插件
  5. windows下安装mongodb服务
  6. JSONArray传值的使用小结
  7. 解决频率选择性衰落的措施_螺杆压缩机,振动怎么办?解决办法在这里
  8. 最后1天!阿里云双11拼团入官方热荐团直享最低折扣!还有机会瓜分百万现金!...
  9. Maven搭建SpringMVC项目详解
  10. 我的Android进阶之旅------>解决:Failed to create ‘XXX\build\outputs\apk\xxx.apks‘: 拒绝访问。
  11. 浅谈c++中upper_bound与lower_bound的用法
  12. 领军服务外包 大连软件业加速对接资本市场
  13. fiddler 抓取手机上点击微信公众号的链接
  14. 昌平北七家空调移机-空调安装电话
  15. 【连载】人类唯一的出路:变成人工智能(一)
  16. 七月算法机器学习笔记4 凸优化
  17. mmdetection里进行特征图可视化
  18. 深圳新生儿出生入户办理流程 - 父深圳公司集体户 母内地户口
  19. 微信小程序JS字符串操作方法汇总
  20. win10系统经常遇到资源管理器卡死

热门文章

  1. 《你的灯亮着吗》 读书笔记三
  2. 设有n个正整数,将他们连接成一排,组成一个最大的多位整数
  3. 我最近在学微信小程序开发,一起吗?
  4. SystemTray.cpp
  5. 【Pytorch神经网络理论篇】 07 激活函数+Sigmoid+tanh+ReLU+Swish+Mish+GELU
  6. 总谐波失真计算公式_新能源汽车技术|车用轮毂电机转矩谐波协同控制策略
  7. python排序元组两个元素_在python中对具有3个元素的元组列表进行排...
  8. Chapter1-4_Speech_Recognition(HMM)
  9. LeetCode 1538. Guess the Majority in a Hidden Array
  10. LeetCode MySQL 597. 好友申请 I :总体通过率