论文翻译:TOD-BERT:任务导向型对话的预训练自然语言理解模型

因为有一个NLP课程的作业需要找与研究领域相关的比较近的一篇论文进行翻译,所以就找到了TOD-BERT这篇论文~
目前也在看作者们给出的代码,如果可以会自己去训练一下试试看~~

放在前面:
  • 学到的点:主要就是TOD-BERT模型,但是我对于这种修改方法的优点还并不是特别的了解,可能要等跑通代码之后才能更好的理解吧。

TOD-BERT:任务导向型对话的预训练自然语言理解模型

摘要:普通文本和任务型对话之间的语言模式的潜在差异使得现在的与训练语言模型在实际使用中作用不大。在这项工作中,我们统一了九个人与人之间的多回合任务的对话数据集进行语言建模。为了在预训练期间更好的模拟对话行为,我们将用户和对话系统的token合并放入带mask的语言模型中。我们提出了一个对比目标函数去模拟响应选择任务。我们的预训练任务导向型对话的BERT模型(TOD-BERT)在四个下游的面向任务的对话应用中(包含意图识别,对话状态追踪,对话行为预测和响应选择)都优于BERT基线。我们还发现,TOD-BERT具有较强的few-shot能力,可以缓解面向任务对话的数据稀缺的问题。

一、介绍

具有自注意力编码结构的预训练模型已经被广泛的应用到许多NLP领域中。这些模型是基于大规模的通用文本语料库(如英语维基百科或书籍)进行自监督的。通过进一步微调这些模型,各种下游任务,特别是自然语言理解的突破不断被报道。
然而,以往的研究表明,直接对会话语料库进行微调在表现上存在一些不足。一个可能的原因是人类对话和写作文本之间语言模式的内在差异,导致数据分布的巨大差异。因此,最近研究了使用来自社交媒体(如Twitter和Reddit)的聊天语料库进行预训练的对话语言模型,特别是在对话响应生成和检索方面。尽管这些开放域的对话很多样,也很容易获得,但是他们通常很短,有很多噪音,没有具体的聊天目标。
另一方面,以任务为导向的对话有着明确的目标(比如餐馆预定和机票预定)和许多的会话互动。但是每个数据集通常都很小并且很分散,因为获取和标记这些数据是非常费时的。此外,面向任务的对话有明确的用户和系统行为,其中用户有自己的目标,系统有自己的任务和数据库的信息,这使得语言理解成分和对话策略学习比那些聊天场景更为重要。
本文旨在证明一个假说:对任务导向型的下游任务,使用任务型语料库的自监督语言模型预训练可以比现有的预训练模型学习到更好的表征。我们强调我们最关心的并不是我们的预训练模型是否在每一个下游任务中都能够达到最先进的结果,因为目前最好的模型大多是建立在预训练模型的基础上的,我们的模型可以很容易的替换他们。在我们的实验中进行微调时,我们避免在预训练架构的基础上添加太多额外的组件。
我们收集并整合了9个面向人和多回合的任务型对话的语料库来训练一个面向任务的对话BERT(TOD-BERT)。总体而言,有大约10万个对话,140万个话语,超过60个不同的领域。与BERT一样,TOD-BERT由带mask的语言模型构成,并且使用一个深度双向的Transformer的Encoder作为其模型结构。与BERT不同的是,TOD-BERT为用户和系统引入了两个特殊的token来模拟相应的对话行为。在预训练阶段结合响应选择任务的对比目标函数来捕捉响应的相似性。我们选择BERT是因为它是目前NLP研究领域中应用最广泛的模型。并且我们的统一数据集可以很容易的应用在任何现有的语言模型的预训练中。
我们在面向任务的对话系统的四个核心下游任务中测试了TOD-BERT,包括意图识别、对话状态跟踪、对话行为预测和响应选择。我们观察到:TOD-BERT在所有我们选择的下游任务上都优于BERT和GPT-2、DialoGPT等强基线,这进一步证实了它对提高对话语言理解的有效性。我们发现响应对比学习是有用的,但是目前在对话预训练的研究中却没有得到很好的研究。更重要的是,TOD-BERT在每项任务上都比BERT有更强的few-shot的能力,这表明它可以减少对昂贵的人工标注数据的需要。TOD-BERT能够很容易地利用和适应新的面向任务的对话数据集。我们的源代码和数据处理已经发布了,以促进未来对任务型对话在预训练和微调上的研究。

二、相关工作

一般的预训练语言模型,是在例如维基百科和图书语料库等大量文本上训练的,大致可以被分成两类:单向注意机制和双向注意机制。GPT和GPT-2是使用Transformer解码器的单向语言模型的代表,其目标是最大化从左到右的生成可能性。这些模型通常被应用到自然语言生成任务中。另一方面,BERT, RoBERTa和他们的方差是使用双向token预测的Transformer编码器预训练的。这些模型通常用来评估分类任务,例如GLUE或者基于广度的问答任务。
对话预训练模型一般是在Reddit或Twitter等开放领域的数据集上进行训练的,用于对话响应的生成。Transfertransfo用GPT-2在ConvAL-2对话比赛中取得了良好的成绩。DialoGPT是GPT-2的一个扩展,它是在Reddit数据上预训练的,用于生成开放域的响应。ConveRT预训练了一个双向Transformer解码器,用于大规模Reddit(输入,响应)响应选择任务。PLATP使用了Twitter和Reddit的数据去预训练了一个带有离散潜变量的对话生成模型。所有这些都是为处理开放域聊天机器人的响应生成任务而设计的。
另一方面,针对任务型对话的预训练却鲜有相关的研究。. Budzianowski 等人在2019年的论文中第一次将GPT-2模型应用到响应生成任务中,以系统信念(system belief),数据库结果和最后一轮对话作为输入,预测下一个来自系统的响应。他们只用了一个数据集去训练他们的模型,因为很少有公共数据集有可用的数据库信息。Henderson等人预训练了一个面向任务对话的响应选择模型。他们首先对Reddit语料库进行预训练,然后对目标对话域进行微调,但是他们的训练和微调的代码并未公布。Peng等人聚焦于自然语言生成任务,该任务假定给定对话行为和槽填充(slot-tagging)结果来生成自然语言的响应。利用GPT-2模型对一组标注的自然语言语料库进行预训练,可以提高条件生成的质量。

三、方法

本章节主要讨论了面向任务的预训练中使用的每一个数据集以及我们如何处理数据。然后介绍了所选择的预训练的基础模型和目标函数。

3.1 数据集

我们收集了九个不同的任务型数据集,它们是英语的,人和人产生的多回合对话。总计有100707个对话,包含超过60个领域的1388152个话语。数据集统计如表1所示。

MetaLWOZ(Meta-Learning Wizard-of-Oz):元学习的绿野仙踪数据集是一个旨在帮助开发能够预测未知领域中用户响应的模型的数据集。这个大型数据集由众包37884个面向任务的对话创建,涵盖47个领域的227个子任务。
Schema:模式引导对话有22825个对话,它为一些任务提供了一个有挑战性的测试平台,特别是对话状态追踪。每一个模式就是一组追踪槽,每个域都可能有多个可能的模式。这使得单个对话系统能够支持许多服务,并促进了新服务的简单集成,而不需要太多的培训数据。Schema数据集被用作DSTC8对话比赛的对话状态跟踪任务。
Taskmaster:该数据集包括13215个对话,包含六个域,其中有5507个口语对话和7708个书面对话,由两个不同的过程创建。其中一种是两人绿野仙踪(Wizard of Oz)方法,一个人像机器人一样行动,另一种是自对话的方法,即众包工人自己编写整个对话。
MWOZ:多领域绿野仙踪数据集包含7个领域上的10420个对话,并且在单个对话中包含多个域。它详细的描述了数据收集过程,用户目标,系统行为和对话状态标签。与现有的大多数语料库不同,它还提供了完整的数据库信息。
MSR-E2E:微软的端到端对话挑战赛在电影票预定、餐厅预定和出租车预定三个领域共有10087个对话。它还包括一个实验平台,每个领域内都内置了模拟器。
SMD:斯坦福的多域对话是一个车内个人助理的数据集,包含3301个对话和三个域:日程安排,天气信息检索和兴趣点导航。它被设计成与知识库的平滑接口,其中知识片段作为简化的数据库信息附在每个对话中。
Frames:该数据集包含1369个人与人对话,每个对话平均14.6轮,其中用户在预定行程时受到一些限制,助手在数据库中搜索合适的行程。与其他的数据库不同,它有标签来跟踪不同的语义框架,这是用户在每个对话中的决策行为。
WOZ和CamRest676:这两个语料库用了相同的数据收集过程和来自DSTC2的相同本体。他们是第一批使用“绿野仙踪”风格的对话数据集,用文本输入代替语音输入,提高了模型的语义理解能力,而不是其对自动语音识别错误的鲁棒性。

3.2 TOD-BERT

我们基于BERT结构来训练我们的TOD-BERT,使用了两个损失函数:MLM损失和响应对比损失(RCL)。请注意,我们使用的数据集可以用来预训练任何现有的语言模型体系结构,这里我们选择BERT是因为它是NLP研究中使用最广泛的模型。我们使用了BERT的基础模型,它是一个Transformer自注意编码器,具有12层和12个注意头,隐藏层大小为768。
为了捕捉说话人的信息和对话中潜在的交互行为,我们在字节对嵌入中增加了两个特殊的token[USR]和[SYS]。我们为每个用户的话语和系统的响应都加上特殊的token前缀,并将同一对话中的所有话语连接成一个平面序列,如图1所示。例如,对一个对话D={S_1,U_1,…,S_n,U_n },其中n是对话轮次,每个S_i或U_i包含一个单词序列,即预训练的输入。模型采用标准的位置嵌入和分段嵌入进行处理,即将输入处理为"[SYS] S_1 [USR] U_1…"
**带mask的语言模型(Masked language modeling)**是一种常见的类BERT结构的预训练策略,它在输入序列中选择一个随机的token,然后用特殊的token[MASK]去替换它。MLM的损失函数是去预测被掩盖掉的token的交叉熵损失。在最初的实现中,随机的掩盖和替换在开始时执行一次,并在训练中一直保存。在这里我们在批处理训练时动态的进行token的mask。TOD-BERT由一个好的初始参数集BERT进行初始化,然后在这些面向任务的语料库上进一步的预训练。MLM损失函数为:
MLM loss

其中,M为被mask的token的总数,P(x_m )是tokenx_m在词汇表上预测的概率。
**响应对比损失(Response contrastive loss)**也能被用于对话语言模型,因为它不需要任何额外的人类注释。使用RCL进行预训练有以下几个优点:1)是我们能够学到[CLS]这个token的更好的表示,这对于所有下游任务都是必不可少的。2)是我们鼓励模型去捕获潜在的对话顺序、结构信息和响应的相似性。
与BERT预训练中最初的下一句预测(NSP)目标不同(BERT将两段A和B连接起来,以预测B是否是A的下一句),我们采用双编码器方法,模拟了多个负样本。我们首先收集一批对话{D_1,…,D_b }并在随机选择的回合t分割每个对话。例如,D_1将被分割成两部分,一部分是上下文11
,另一部分是是响应S_(t+1)^1。我们用TOD-BERT分别编码所有上下文和它们对应的回应。
然后,我们通过从b对话中获得输出[CLS]的表示得到了一个上下文矩阵C和一个响应矩阵R。我们将同一批次中的其他反应视为随机选择的负样本。RCL目标函数为:
RCL loss

将批处理大小增加到一定程度,可以在下游任务上获得更好的性能,特别是在响应选择方面。Softmax函数规范化每行的向量。在我们的设置里,增加批次大小也意味着改变对比学习中的正负例比。批次大小是一个能够被硬件限制的超参数。我们在预训练阶段也尝试了不同的负抽样策略,如局部抽样,但与随机抽样相比没有显著变化。
**整体(Overall)**预训练的损失函数为L_mlm和L_rcl的加权和,在我们的实验中,我们简单的将它们相加。我们在没有热身期的情况下逐渐降低学习率。我们使用AdamW优化器训练TOD-BERT,在所有层和注意权重上的drop率为0.1。使用GELU激活函数。模型用一个延迟开发集的困惑分数实现早停策略(early-stopped),小批次包含32个序列,每个序列最大长度为512个token。实验在两个NVIDIA Tesla V100 GPU上进行。
TOD-BERT

四、下游任务

在这篇论文中,我们最关心的是TOD-BERT这个使用聚合的任务型对话语料库的预训练语言模型是否显示出了它相比于BERT的优势。因此,在对每一个下游任务进行微调时,我们避免在它的结构之上增加太多的组件。此外,我们使用同样的结构和相似数量的参数做一个公平的比较。在微调时,所有的模型都用同样的超参数进行梯度修剪(gradient clipping)到1.0的方法更新。我们选了四个关键的任务导向型的下游任务去评估,分别时:意图识别,对话状态追踪,对话行为预测和相应选择。所有的这些下游任务都是模块化任务导向系统的核心组件。
意图识别任务是一个多分类问题,我们输入一个句子U,然后模型在超过i个可能的意图中预测一个单一的意图。
ytsb

其中,F是预训练语言模型,我们用它的[CLS]嵌入作为输出的表示,W_1∈R^(I×d_B )是一个可训练的线性映射。模型在预测的分布P_int和真实意图标签之间使用交叉熵损失来训练。
对话状态追踪可以被看作一个使用预定义主体的多分类问题。与意图不同,我们使用对话的历史X(一系列的话语)作为输入,然后模型预测每一个对话回合中每一个(域,槽)对的槽值。每一个对应的值v_i^j(表示第j个(域,槽)对的第i个值)被传递到预训练的模型中,并在训练期间被固定表示。
111

其中Sim是余弦相似函数,Sj∈R|v^j | 是第j个(域,槽)对在其可能值上的概率分布。G_j是第j个槽的槽投影层,|G|投影层的数量和(域,槽)对的数量相同。该模型采用将所有对的交叉熵损失加和的方法进行训练。
对话行为预测是一个多标签分类问题,因为系统的响应可能会包含多种对话行为,例如同时包含请求和通知。模型将对话历史作为输入并且对每种可能的对话行为预测一个二分类的结果。
111

其中W_2∈R^(d_B×N)是一个可训练的线性映射,N是可能的对话行为的数量,在经过一个sigmoid层之后,A中的每个值都在0到1之间。模型用二分类交叉熵损失来进行训练,当A_i>0.5时,第i个对话行为被认为是触发的对话行为。
响应选择是一个排序问题,它的目的是从候选池中检索最相关的系统响应。我们使用双编码器策略并计算源X和目标Y之间的相似性分数,
122

其中,Y_i是第i个候选响应,r_i是它的余弦相似度分数。源X可以被截断,在我们的实验中,我们将上下文长度限制为最多256个token。我们从语料库中随机的抽取几个系统响应当作负例。虽然它可能不是一个真的负例,但是这样去训练和评估它的结果是很常见的。

五、评价数据集

我们选取了几个数据集OOS、DSTC2、GSIM和MWOZ进行下游评估。前三个数据集不包括在进行预训练的面向任务的数据集中。对于MWOZ来说,公平地说,我们不包括它在预训练阶段的测试集对话。下面讨论了每个评估数据集的详细信息:
OOS:超意图数据集是最大的注释意图数据集之一,包括分别用于训练、验证和测试集的15100/3100/5500个样本。它涵盖了10个领域的151个意图类,包括150个范围内意图和一个范围外意图。超范围意图是指不属于任何预定义意图的用户话语。每个意图有100个训练样本。
DSTC2:DSTC2是一个面向人机任务的数据集,其中可能包含特定的系统响应噪声。它有1612/506/1117个对话,分别用于训练、验证和测试集。我们遵循Paul等人(2019)将原始的对话行为标签映射为普遍对话行为,这导致了19种不同的系统对话行为。
GSIM:GSIM是一个面向任务的人工重写机器语料库,包括1500/469/1039个分别用于训练、验证和测试集的对话。我们将它的两个领域,电影和餐厅领域,合并成一个单一的语料库。它是由机器与机器对话(M2M)方法收集的,这是一种功能驱动的过程,结合了对话自演步骤和众包步骤。我们将其对话行为标签映射为普遍对话行为,从而产生13种不同的系统对话行为。
MWOZ:MWOZ是面向任务的对话最常用的基准,尤其是对话状态跟踪。它有8420/1000/1000对话,分别用于训练、验证和测试集。在七个不同的域中,总共有30个(域、槽)对需要在测试集中跟踪。我们使用它的修订版MWOZ2.1,它有相同的对话记录,但是有更清晰的状态标签注释。

六、结果

对每一个下游任务,我们首先用全部的数据集进行实验,然后我们模拟few-shot设置去展示我们TOD-BERT的强度。为了减少样本的方差,我们至少对每一个few-shot实验用三次不同的随机种子去运行,并报告这些有限数据场景的平均值和标准差。我们研究了两个版本的TOD-BERT,一个是TOD-BERT-mlm,在预训练时它只用到了MLM损失;另一个是TOD-BERT-jnt,它用MLM损失和RCL损失进行联合训练。我们将TOD-BERT和BERT以及其余的基线(包括两个其它的强大的预训练模型,GPT2和DialoGPT)进行比较。对于一个基于GPT的模型,我们使用隐藏状态的平均池作为它的输出表示,我们发现这样比只用最后一个token要更好。

6.1 线性探头

在对每个预先训练好的模型进行微调之前,我们首先通过探测它们的输出表示来研究它们的特征提取能力。提出了探测方法来确定所学习的嵌入在本质上携带了什么信息。我们在一个固定的预先训练的语言模型上使用一个单层感知器来探测输出表示,并且只针对具有相同超参数的下游任务微调该层。
表3显示了MWOZ上的域分类、OOS上的意图识别和MWOZ上的对话行为预测的探测结果。TOD-BERT-jnt在这个设置中实现了最高的性能,这表明它的表示包含了最有用的信息。
b3

6.2 意图识别

在一个最大的意图识别数据集中,TOD-BERT优于BERT和其他强基线,如表2所示。我们评估所有数据的准确性,分别评估了域内意图和域外意图。请注意,有两种方法可以预测域外的意图,一种是将其视为附加类,另一种是设置预测置信度的阈值。这里我们报告第一次设置的结果。TOD-BERT-jnt达到了最高的范围内和范围外的准确率。另外,我们在训练集中每个意图的类别中都随机抽取一个和十个话语,进行一次和十次实验。与一次实验的BERT相比,TOD-BERT-jnt在所有意图的正确率增加了13.2%,在领域准确率增加了16.3%。
B2

6.3 对话状态追踪

在对话状态跟踪任务中,常用两种评价指标:联合目标准确度和槽准确度。联合目标准确度将预测的对话状态与每个对话回合的真是状态进行比较。真实状态包括所有可能(域,槽)对的槽值。当且仅当所有预测值与其基本真值完全匹配时,输出才被认为是正确的预测。另一方面,槽准确度将每个(域,槽,值)三元组分别与其基本真值标签进行比较。
在表5中,我们比较了MWOZ2.1数据集上的BERT和TOD-BERT-jnt,发现后者的联合目标精度提高了2.4%。由于Budzianowski等人提供的原始本体不完整(一些标记值未包含在本体中),我们创建了一个包含所有可能注释值的新本体。我们还列出了几个著名的对话状态跟踪器作为参考,包括DSTReader、HyST、TRADE和ZSDST。我们还报告了使用1%、5%、10%和25%数据的少量few-shot实验。注意,1%的数据有大约84个对话。TOD-BERT在所有情境下的表现都优于BERT,这进一步显示了任务型对话预训练中的优势。
B5

6.4 对话行为预测

我们在三个不同的数据集上进行了实验,并报告了对话行为预测任务(一个多标签分类问题)的micro-F1和macro-F1分数。对于MWOZ数据集,我们从原始系统标签中删除域信息。例如,“出租车通知”将简化为“通知”。这一进程将可能的对话行为从31个减少到13个(对行为进行合并)。对于DSTC2和GSIM语料库,我们遵循Paul等人的方法,应用通用对话行为映射,将原始对话行为标签映射为通用对话行为格式,分别在DSTC2和GSIM中产生19个和13个系统对话行为。我们运行另外两个基线,MLP和RNN,以进一步显示基于BERT的模型的优势。MLP模型简单地利用包中的单词进行对话行为预测,RNN模型是一个双向GRU网络。
在表4中,我们可以观察到,在全数据场景中,无论是哪种数据集或哪种评估指标,TOD-BERT始终比BERT和其他基线工作得更好。在few-shot实验中,TOD-BERT-mlm在1%数据的情况下,在MWOZ语料库上的micro-F1和macro-F1分别比BERT好3.5%和6.6%。我们还发现,10%的训练数据可以获得接近全数据训练的良好性能。

B4

6.5 响应选择

为了评估任务型对话中的响应选择,我们遵循k-to-100的准确性,这正成为研究界的标准。k-of-100度量是使用100个示例的随机批计算的,因此来自同一批中的其他示例的响应可以用作随机负例候选。这使我们能够高效地计算跨多个示例的度量。虽然不能保证随机负例确实是“真”负例,但是1/100的度量仍然提供了一个有用的评估信号。在推断过程中,我们运行五个不同的随机种子来抽样批次并报告平均结果。
在表6中,我们对三个数据集(MWOZ、DSTC2和GSIM)进行了响应选择实验。TOD-BERT-jnt在MWOZ上的1-to-100准确率为65.8%,3-to-100准确率为87.0%,分别超过BERT18.3%和11.5%。在DSTC2和GSIM数据集中也一致地观察到类似的结果,并且TOD-BERT-jnt的优势在few-shot场景中更为明显。我们不报告TOD-BERT-jnt在MWOZ数据集上的few-shot设置,是因为在预训练的响应对比学习阶段使用了完整的MWOZ数据集,这和其它的模型去比较是不公平的。响应选择结果对训练批量很敏感,因为批量越大,预测越困难。在我们的实验中,我们将所有模型的批量大小设置为25。
B6

七、可视化

在图2中,我们给定来自MWOZ测试集的相同输入,给出了可视化的BERT、TOD-BERT-mlm和TOD-BERT-jnt的嵌入。每个样本点都是一个系统响应表示,通过一个预训练的模型,利用t分布随机邻域嵌入(tSNE)进行降维,将其高维特征降为一个二维点。因为我们知道每个话语的真实领域和对话行为标签,所以我们使用不同的颜色来表示不同的领域和对话行为。可以观察到,TOD-BERT-jnt比TOD-BERT-mlm有更清晰的群体边界,并且它们两个都比BERT更好。
为了定量分析结果,我们在BERT和TOD-BERT的输出嵌入的基础上运行了Kmeans(一种常见的无监督聚类算法)。我们把K的K均值设为10和20。在聚类之后,我们可以将MWOZ测试集中的每个语句分配给一个预测类。然后计算聚类结果与每个话语的实际域标签之间的归一化互信息。我们观察到:TOD-BERT的NMI得分始终高于BERT。对于K=10,TOD-BERT的NMI得分为0.143,BERT只有0.094。当K=20时,TOD-BERT的NMI得分为0.213,而BERT的NMI得分为0.109。
T2

八、结论

我们提出了一种任务导向对话BERT模型(TOD-BERT)训练方法,该方法训练了9个跨60多个领域的人与人之间多轮任务对话的数据集。TOD-BERT在四个对话下游任务,包括意图识别、对话状态跟踪、对话行为预测和响应选择上都优于BERT。当只有有限的标记数据可用时,它在少量的few-shot实验中也有明显的优势。TOD-BERT易于部署,并且将是开源的,允许NLP研究社区应用或微调任何面向任务的会话问题。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值