热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

论文阅读《AGenerativeModelforJointNaturalLanguageUnderstandingandGeneration》联合NLU和NLG的生成模型

Abstracttask-oriented系统中NLU和NLG是两个基础且相关的任务,NLU将自然语言处理为形式表示,而NLG将形式表示转换为自然语言

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模型穿上了一层新衣,大大提升了模型的效果。除此之外,针对联合训练出现的问题及一些新颖的方法,文章也进行了探讨,比如如何保证两个后验接近,这个没有数学知识啥的,其实我也不是很明白。其次是如何在半监督的设置下训练模型,损失函数的设计都完美契合了论文的初衷,提升了论文的价值。总之,有许多值得借鉴的地方。


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 标题: ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 使用Spring AOP实现切面编程的步骤和注意事项
    本文介绍了使用Spring AOP实现切面编程的步骤和注意事项。首先解释了@EnableAspectJAutoProxy、@Aspect、@Pointcut等注解的作用,并介绍了实现AOP功能的方法。然后详细介绍了创建切面、编写测试代码的过程,并展示了测试结果。接着讲解了关于环绕通知的使用方法,并修改了FirstTangent类以添加环绕通知方法。最后介绍了利用AOP拦截注解的方法,只需修改全局切入点即可实现。使用Spring AOP进行切面编程可以方便地实现对代码的增强和拦截。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
author-avatar
a171759015_753
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有