论文浅读-任务型对话系统中的自然语言生成研究进展综述

任务型对话系统中的自然语言生成研究进展综述

覃立波,黎州扬,娄杰铭,禹棋赢,车万翔
摘 要:任务型对话系统中的自然语言生成模块(ToDNLG)旨在将系统的对话动作转换为自然语言回复,其受到研究者的广泛关注。随着深度神经网络的发展和预训练语言模型的爆发,ToDNLG 的研究已经获得了重大突破。然而,目前仍然缺乏对现有方法和最新趋势的全面调研。为了填补这个空白,该文全面调研了 ToDNLG 的最新进展和前沿领域,包括:(1)系统性回顾:回顾和总结了 ToDNLG 近10年的发展脉络和方法,包括非神经网络时代和基于深度学习的 ToDNLG 工作;(2)前沿与挑战:总结了复杂 ToDNLG 等一些新兴领域及其相应的挑战;(3)丰富的开源资源:该文在一个公共网站上收集、整理了相关的论文、基线代码和排行榜,供 ToDNLG的研究人员直接了解最新进展,希望该文的调研工作能够促进 ToDNLG领域的研究工作。
关键词:任务型对话系统;自然语言生成模块;预训练模型

任务型对话系统主要包括四个模块:自然语言理解(NLU)、对话状态追踪(DST)、策略学习、和自然语言生成(NLG)。文章中主要对NLG中相关内容进行概述。
对话系统中NLG通常有两类方法:传统方法和基于深度学习的方法。传统方法包括:基于模板的方法;基于句子规划的方法;基于类的方法;基于短语的方法等,本文主要对深度学习的方法进行整理。

基于深度学习的方法

包括:基于解码器的方法;基于seq2seq的方法以及基于Transformer的方法。
基于解码器的方法首次开启了ToDNLG深度学习时代,基于序列到序列的方法首次借鉴了机器翻译领域的相关技术来提高性能,而基于Transformer的方法很好地解决了之前自回归方法因无法并行而效率低下的问题,以及模型上界不高的缺点。

基于解码器的方法

输入独热编码,直接使用RNN构造的解码器来生成回复。这类方法通常分为语言生成模块和重排序模块。

  • 语言生成模块的输入为语义表示,输出是多个可能的去词化语句。
  • 重排序模块的任务是将生成的多个去词化语句进行打分并排序,选出最好的语句并输出语句。
    tips:
    去词化(delexicalisation):一种自然语言生成技术,​​将句子中的某些词汇替换为通用的占位符,​​以减少生成模型的复杂度和提高生成效率。​​在任务型对话系统中,​​去词化可以用于生成多个可能的语句,​​以便在重排序模块中选择最佳的语句。​​在知识图谱问答系统中,​​去词化可以用于生成查询图,​​以便在图数据库中查询答案。​​在汉语中,​​去词化也可以用于将双音复合单位范畴化,​​以便更好地理解和使用这些词汇。
    重排序:推荐系统中的一个核心模块,​其目的是给用户一个“排好序的”item list。​推荐系统的架构大致分为召回、​粗排、​精排、​重排四个模块,​其中重排离最终的用户展现最近,​所以也十分关键。​重排序模块可以使用注意力模型等技术,​对精排模块输出的候选集进行重新排序,​以提高推荐系统的准确性和效率12。​重排序模块的优化目标或损失函数可以从多个角度来考虑,​例如全局视野的优化指标3。​​

基于Seq2Seq的方法

该类方法在编码器端,对于输入的 MR,DA使用独热编码表示,而对于每个槽值对,对它的槽位和槽值分开进行编码操作,然后将它们的表示相加得到这个槽值对的表示。在解码时,采用自回归的方式,引入注意力机制,生成回复。

基于Transformer的方法

就是用Transformer来生成文本。

评测指标

BLEU

什么是BLEU

双语评估替补(Bilingual Evaluation Understudy,BLEU)是机器翻译任务中常用的评价指标,后来也被引申用于评估自然语言生成任务的效果。BLEU的取值范围为[0,1],如果两个句子完美匹配,那么BLEU就是1,相反,如果两个句子完美不匹配,则BLEU为0。BLEU具备以下优点:

  • 计算代价小、计算速度快
  • 容易理解
  • 与语言无关,可以用于衡量任何语言之间差距
  • 与人类评价结果高度相关

计算方式

BLEU旨在计算模型生成的句子(candidate)和实际句子(reference)之间差异的指标。以N-gram的形式计算两者之间匹配个数,来计算得分,显然这种衡量方式是与语序无关的。
N-gram的计算方式如下列图中所示
1-gram

图中机器翻译6个词,命中reference中5个词,则匹配度为5/6。
2-gram

2-gram时有命中3个词,匹配度为3/5。
3-gram

1-gram可以带边原文有多少词被翻译出来,可以反映译文的充分性,2-gram可以反映译文的流畅性,越高则代表可读性越好。但是由于是通过匹配的方式来衡量性能,无法用于衡量译文的正确性。

如果直接在reference中匹配candidate的话,会发现总是能匹配到the,其匹配度为7/7,但这明显是错误的。因此,在BLEU中,实际上使用的是min(某N-gram在candidate中的出现次数,该N-gram在reference中出现的最大次数)。
the 在candidata中出现次数为7,但在reference中出现次数仅为2,因此,1-gram的匹配度为2/7。

惩罚因子
当机器翻译的长度比较短时,BLEU得分也会比较高,但是这个翻译会损失很多信息,如candidate:a cat reference: there is a cat on the table
因此需要在BLEU分数乘上惩罚因子
$$BP=\LEFT{
\begin{aligned}
1 & len(candidate) > len(reference)
exp(1-len(reference)/len(candidate)) & len(candidate) <=> len(reference)
}$$

举例计算
假设candidate为:Going to play basketball this afternoon ?
reference为:Going to play basketball in the afternoon ?
假设candidate为:Going长度为:7,reference长度为:8

  • 计算各阶n-gram精度
    P1 = 6/7 = 0.8333
    p2 = 4/6 = 0.6666
    p3 = 2/5 = 0.4
    p4 = 1/4 = 0.25

  • 计算Pn的log

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import math
    p1_log = math.log(p1)
    p2_log = math.log(p2)
    p3_log = math.log(p3)
    p4_log = math.log(p4)
    # 对Pn的log值求和
    sum_all = sum([p1_log,p2_log,p3_log,p4_log])
    # 乘Wn,就是除4
    sum_all = sum_all / 4
  • 计算BP
    BP = e^(1-8/7) = 0.867

  • 计算最终结果
    BLEU = BP * e^( (P1+P2+P3+P4) / 4 )
    = 0.867 * e^( (P1+P2+P3+P4) / 4) = 0.867 * 0.4889 = 0.4238