本文是对发表于自然语言处理领域顶级会议ACL 2021的论文“Towards Quantifiable Dialogue Coherence Evaluation(面向可量化的对话连贯性评估)”的解读。
针对对话系统的连贯性评估问题,该论文提出了一个新型的两阶段指标训练框架QuantiDCE,旨在让自动评估指标学习到各种不同连贯性程度的对话回复之间的区别,掌握量化的能力,从而更为精准地输出连贯性分数。
作者介绍:叶政,中山大学二年级硕士生,导师 梁小丹。主要研究方向为开放域对话系统。
论文链接:https://arxiv.org/abs/2106.00507
开源代码:https://github.com/James-Yip/QuantiDCE
当我们在绞尽脑汁地想怎么设计一个对话系统的时候,我们当然希望最后训练出来的系统能越像人越好,输出的回复很连贯,很有趣,很体贴。而其中,连贯性可以说是最基本的要求之一了,毕竟不连贯的回复往往会让人觉得这个对话系统很笨。至于连贯性的定义,简单来说其实就是对话系统说的话在语法和语义上够不够连贯。比如说,当一个人说“我今天中午吃了面条”,对话系统如果回复“我吃也面面条”,那就是语法不连贯;如果回复“我喜欢跑步”,那就是语义不连贯。定义有了,那现在问题就来了,要怎么去评估对话系统的连贯性呢?
针对这个问题,学术界最开始就是奉行“拿来主义”,把之前机器翻译任务上的自动指标拿来评估对话连贯性,比如BLEU[1],衡量对话系统输出回复和给定参考回复之间的N-gram重叠程度。但这种指标存在一个致命伤:缺乏语义上的考量,容易错怪“好人”,也容易听信“坏人”。比如说,参考回复是 “真巧,我中午也吃了面条”,对话系统的回复是 “哈哈哈我也吃了”,这种情况,对话系统回复是连贯的,只不过和参考回复相比换了个表述,但BLEU只看这两个回复在字面上像不像,就会认为回复是不连贯的。又比如说,对话系统的回复是 “真巧,我中午也吃了条”,和参考回复只有一字之差,但意思就不对了,是不连贯的,但BLEU会觉得它们很像,认为对话系统是连贯的。
发现不对劲后,学术界为了摆脱BLEU这种生硬的字面评估,转向研究基于深度神经网络的自动指标,寄托神经网络在训练时记住各种连贯和不连贯的情况,并能泛化到训练时没见过的情况。从结果上看,这类指标相比前面提到的BLEU这类指标,确实在整体上能给出更为准确的评估结果。从模型结构上看,往往是一个神经网络作为编码器(比如RNN, Transformer),来对输入的对话历史和对话回复提特征,然后再接一个分数预测模块来将特征转变为连贯性分数。最后从训练目标上看,最常采用的损失函数就是cross entropy loss或margin ranking loss,并采用无监督的方式来训练。而所谓无监督,其实就是不自己标数据,将原始对话数据作为正样本,再用一些启发式策略为每一个正样本自动生成一个相应的负样本(最直接粗暴的就是从对话语料中随机选一个出来),然后按照前面提到的两种loss之一,让指标在训练过程中尽可能将正负样本区分开,比如说18年提出的RUBER[2],19年提出的BERT-RUBER[3],以及去年提出的GRADE[4],整体思想都是如此。
然后,这种训练方式会存在两个局限:(1)将对话连贯性评估问题简化为了一个是否问题,只要求指标能够区分出连贯与不连贯,而忽略了其中具体的连贯性程度,这与人工打分(比如打1到5分)是有明显区别的,如图1所示;(2)使用某种启发式负采样策略来人为获取负样本往往存在偏置,无法准确学习到真实的人工打分标准。
图1 人工打分 VS. 指标打分
1 实验方法
为了解决上述局限,本文提出了一个新型指标训练框架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的保持一致。损失函数具体公式如下:
2 实验结果
本文在一个公开的指标评测benchmark [4]上,将QuantiDCE训练的指标模型与现有的八个自动指标进行了比较。实验结果显示,本文指标取得了最佳性能,并比目前的SOTA结果平均高五个点左右。
表1 各个自动指标在ConvAI2和EmpatheticDialogues数据集上的性能对比
另外,针对MLR预训练阶段和KD微调阶段,本文还尝试了各种不同的损失函数进行比较,进一步验证了提出的MLR loss以及KD-MSE loss的有效性。图3也展示了模型采用不同损失函数的可视化结果。可以看到,在预训练阶段优化MLR loss可以使得指标模型能够有效地区分出不同连贯性程度的对话输入。
表2 采用不同预训练损失函数的性能对比
图3采用不同预训练损失函数时,模型中间特征(上)及最终分数输出(下)的可视化结果
表3 采用不同微调损失函数的性能对比
最后,本文还进行了两组消融实验。(1)单独去除QuantiDCE训练过程中用到的其中一个损失函数,研究了本文提出的各个损失函数对最终性能影响的重要程度;(2)对微调阶段使用的数据量进行了实验,研究少样本设定下数据量对模型性能的影响。
表4 消融实验:去除某个特定损失函数的性能对比
图 3 消融实验:微调阶段采用不同数据量的性能变化趋势
3 总结
本文针对对话连贯性评估问题提出了一个两阶段指标训练框架QuantiDCE。通过两阶段的递进式训练,逐步让指标模型掌握量化的能力,从而能够输出与人工打分更为一致的连贯性分数。实验上,本文将QuantiDCE训练出来的指标模型与当前现有的各种自动指标进行了对比,并取得了最佳性能,验证了该框架的有效性。
参考文献:
[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.