赞
踩
Abstract
task-oriented系统中NLU和NLG是两个基础且相关的任务,NLU将自然语言处理为形式表示,而NLG将形式表示转换为自然语言。这篇论文将两个任务结合起来,探索自然语言和形式表示之间共享的潜在空间。
Introduction
NLU和NLG之前多被单独训练,二者之间的联系很少被探索。
虽然自然语言和形式表示的未标注数据很容易获得,但由于二者处于不同的空间,如何利用他们还不清楚。
在这篇文章中,提出了一个联合NLU和NLG的模型,使用一个隐变量连接NLU和NLG,隐变量表示二者之间共享的意图。通过一个连续的变量学习这两个离散的空间,促进两个任务的信息共享。
此外,本文的模型还可以以一种半监督的方式训练,当出现未标记的数据时,也可以探索NLU和NLG的空间。在两个对话数据集中测试了他们的模型:E2E数据集,其中形式表示是以槽值对的形式表示的,weather Dataset,形式表示是树结构的形式。两个数据集上的结果都有提升。
Model
这篇文章的关键假设就是:在一对语句x和形式表示y下存在一个抽象的隐变量z。(这个隐变量z应该就是意图的抽象表示),抽象的意图z可以指导NLU和NLG的生成。同时,z也可以被x或y推断出来。简而言之,在NLU任务中,x推断出z,然后根据x和z生成y,NLG任务则相反,根据y推出z,然后根据y和z生成x。
NLG
总体的想法是:y生成z,y和z生成x。将后验分布 q(z|y)视为高斯分布,则推断z的任务就变成了使用NLG的encoder计算高斯分布的均值和方差。
encoder的结构包括输入y经过一个BiLSTM、一个池化层,两个全连接层分别计算均值和标准差,输出就是计算出的均值和标准差,然后在高斯分布中采样,根据重参数技巧,得到z。
decoder根据z和y生成x,一个LSTM层、一个attention,一个全连接层和softmax,最终得到输出token的分布。
NLU
NLU执行NLG相反的流程。
但是有一些区别在于,语句x是有歧义的,多个语句可能对应同一个意图,而形式化的表示是精准定义的,是一个一对多的过程,同一个形式化表示可以生成多条语句。因此在这里,论文对z的生成做了一些修改,z不再由均值和方差得到,而是由均值表示。
由于y的表示有多种形式,例如槽值对形式或者树结构。在槽值对形式表示的y下,decoder针对每一个slot都设计了一个分类器(一层前馈层)。当y是树结构时,将y看做一个序列,和NLG生成x一样,由一个LSTM和attention解码生成。
优化
监督优化:成对的x和y,就是普通vae的损失函数,Lx,y和Ly,x都可以优化,最终关于这部分的loss,是两个加起来一起优化的。
无监督优化:针对无标识的x和y,级联优化NLU和NLG,x到z到y再到z再到x,y同理。
先验选择:本来的先验应该是p(z),NLU和NLG都要求后验和先验匹配,但是两个后验和先验匹配,并不能保证两个后验接近,但是共享的隐空间应该是期望两个后验接近的。为了解决这个问题,论文对先验进行了修改,当后验为p(z|x)时,选择q(z|y)作为先验p(z)的prior belief。反之亦然。这种方法直接推动了两个后验更接近,以此确保共享的隐空间。
最后,请注意,当我们有标记的x和y时,同时计算q(z|x)和q(z|y)是很简单的。然而,当我们有未标记的数据,我们只能使用NLU或NLG模型生成的伪标签对,这样我们可以匹配一个推断后验预定义之前反映我们的共享潜在空间的信念。
训练总共分为三种:一种是全监督,同时优化NLU和NLG,一种是使用了边缘分布,在第一种的基础上继续优化自编码器的路径。还有一种是半监督,针对无标签的数据。
实验结果在E2E NLG任务中达到了sota的效果,同时做了消融实验,比较了隐变量z的作用及无标记数据x和y对实验结果的提升。
总体来讲,我认为这篇论文还是比较有创新点的。VAE模型已经有很长的历史了,文章的基础虽然还是VAE模型,但是在此之上,将NLU和NLG任务联合训练,为VAE模型穿上了一层新衣,大大提升了模型的效果。除此之外,针对联合训练出现的问题及一些新颖的方法,文章也进行了探讨,比如如何保证两个后验接近,这个没有数学知识啥的,其实我也不是很明白。其次是如何在半监督的设置下训练模型,损失函数的设计都完美契合了论文的初衷,提升了论文的价值。总之,有许多值得借鉴的地方。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。