Facebook大公开:解决NLG模型落地难题!工业界的新一波春天?

文 | 小喂老师
编 | 小轶

作为NLP领域的“三高”用户(高产、高能、高钞),FaceBook最近(2020年11月)又发表了一篇高水准文章,目前已被COLING-2020接收,号称解决了自然语言生成(NLG)落地的问题:Best Practices for Data-Efficient Modeling in NLG:How to Train Production-Ready  Neural Models with Less Data

看到这个有点标题党的文章,我不禁要发出关于NLG落地的素质三连:

众所周知,对于自然语言处理中的NLG问题,一直都没有很好的落地场景,即便是目前最合适的“文本自动摘要-Auto Text Summarization”,也没有特别合适的产品和落地领域。所以虽说你是大佬,但我也不觉得你可以做第一个吃螃蟹的人!

抱着这些疑惑,我一口气读完了整个paper,然后不禁发出感慨:“就这?”——啊不,打错了——然后不禁发出感慨:“四高一”!!!

本篇文章的亮点比较多,属于一篇偏实验性论文,总结为一句话就是:流程化NLG在对话系统落地过程中开发步骤和评估策略

文中研究的NLG主要指对话系统中的NLG。为解决NLG应用落地的难题,论文设计了一套Tree-Based数据集,并据此推出Bucketing训练策略 + TreeAccuracy评价策略。此外,还讨论了NLG中的数据增强知识蒸馏生成模型选择Data-fficiency问题。为对话系统中的NLG落地给出了一套完备&Less-Data&Low-Latency&生成结果High-Acceptable的方案

哈哈,这么高的评价,那我们看一下这篇文章到底做了啥!

论文题目

Best Practices for Data-Efficient Modeling in NLG:How to Train Production-Ready Neural Models with Less Data

论文链接:

https://arxiv.org/abs/2011.03877

Arxiv访问慢的小伙伴也可以在 【夕小瑶的卖萌屋】订阅号后台回复关键词 【1221】 下载论文PDF~

NLG先验知识

在谈论这篇论文之前,我先和大家的沟通一下NLG这个任务,保证大家有一个共通的认知观点。

自然语言生成(Natural Language Generation)是一个很难或者说高复杂度的自然语言处理任务。广义的NLG是给定一个输入(可以是文本、表格、图片或是结构化的数据),输出符合该输入的一段文本描述(可以是文章写作、摘要,也可是图片内容描述)。NLG通常被认为是真正意义上的人工智能,一个完备的NLG任务意味着图灵机的实现。本论文的NLG是特指对话系统(Chatbot System)中的自然语言生成,对于一个对话系统,它通常有如下几个部分:

  • 自动语音识别-ASR

  • 自然语言理解-NLU

  • 对话策略-DM

  • 自然语言生成-NLG

对于此处的NLG任务,它的输入是<Query, DM产生的Actions>,输出的是一段文本回复。

因为是一篇偏实验性的论文,所以论文的要点理解和模型框架并不算特别的难,但是需要大量的先验知识储备。接下来的四个小节中,我将依次列举一些必要的先验知识,包括:

  • Chabot System中的NLG

  • Structured NLG Data

  • Bucketing策略

  • BART模型

Chabot System中的NLG

在对话系统中,经过NLU,DM之后会获得一系列的Dialogue Actions,这类Dialogue Actions就是NLG的重要输入。在Chabot System中做NLG,常用的方法是基于模板生成结果。但是太过于死板且不可迁移。后来就提出了基于Encoder-Decoder的模型生成,和模板生成进行比较,也是有各自的优劣点(具体讨论可见论文细节)。

这里为了能让读者有一个对NLG任务比较直观的理解,给出了一个简单的例子(其中Query和Actions通常作为NLG的输入,ExpectResponse则指代模型NLG的输出):

Query: "我要买一张明天去北京的火车票。"
Actions: {
"intent":"买火车票",
"slots":["destination":北京,"departure":UNK,"time":DayTime[“明天”]_DetailTime["UNK]]
"actions":["询问具体时间","询问出发地点"]"ExpectResponse":"请问您想买【明天】【几点】的火车票?【出发地点】又是哪里呢?"
}

Structured NLG Data

如果使用Encoder-Decoder的生成模型来做NLG,那么不可避免地就引入了模型输出结果不可控制的问题。在生成的模型中,可能缺少重要的要素,也可能要素值生成错误,这些都是生成模型中不可控制的。

作者所在的团队在2019年的一篇论文中(Constrained decoding for neural NLG from compositional representations in task-oriented dialogue ),给出了一种解决方法:它将输入的action使用tree-structured的方式进行存储。这样的结构引入了更多的信息,也便于后面对生成结果进行判定。本文实际上也算是Facebook在以前工作上的一种再创新。

为了便于读者理解,这里给出了论文中一个关于tree-structured input的数据。这是Facebook发布的Dialogue System中的一个case。他将Actions结构化。Reference指期望给出的NLG输出。

Query: "Do I have any reminder to buy milk?"
Structured Actions: INFORM 1[amount[ 3 ]]INFORM 2[todo[ buy milk ] date time[time[ 7 pm ]]]INFORM 3[todo[ buy milk ] date time[colloquial[ tomorrow ]]]INFORM 4[amount remaining[1]]
Reference: Yes, there are 3 reminders. The first two are, buy milk at 7 PM and tomorrow. There’s 1 other reminder.

Bucketing策略

这种策略方式使用比较少,在机器学习中有使用过(我也是咨询了一位同事之后,才了解和理解的)。

在深度学习中,我们通常随机选取一批数据进行模型的训练。如batch_size = 64,选取64个随机数据进行训练。Bucketing则是一种按照某种【策略】将数据分成一个个的bucket(桶),然后将一个个的Bucket的数据丢入到模型中进行训练。这样的训练方法可以减少在模型训练过程中由imbanlanced distribution带来的bias,也能提高数据的利用率,是常用的一种利用“少量数据”训练模型的方法。

在Bucketing的过程中,这种【策略】就非常的重要。好的策略能大大提高数据利用率,坏的策略通常不比随机好,甚至会误导模型的学习。设置Bucket策略的出发点是:各个bucket中的数据中,不一样的信息是希望模型能够学习的信息,一样的(共有的)信息是模型可以忽略的信息

在本论文的任务上,因为数据是tree-structured的数据,作者这里数据的tree-structured degreeargument values,尝试了多种方法进行Bucketing,都取得了比random好的效果。

BART模型

BERT模型我听过,BART模型又是啥??是不是写错了?BART是FaceBook AI团队在2019年发布的一款适用于生成的预训练语言模型

▲BERT、GPT、BART模型框架比较

如果说BERT适合做NLU,GPT框架适合做NLG。那如果我二者取其长,是不是就能更好的做NLP任务了?这个想法很简单也很正常,但你发不了paper,因为你没钱去训练这样的模型,但人家FaceBook有,所以人家FaceBook发了Paper(手动狗头)。模型框架很简单,但是非常有效,出来即刷新榜单,目前在NLP任务中,同量级的模型上仍有多处属于SOTA。

BART模型在HuggingFace的Transformers上开源了自己的预训练模型。笔者在今年8月份使用过BART模型进行过文本摘要生成。对于英文的生成来说,效果确实非常好,基本不用fine-tune也能比较好的生成通顺的有意义的文本;但是对于中文,因为没有Bart-zh,所以无法直接测试。不过FaceBook开放了25种语言的mBART,可用来做中文的文本生成,但直接生成的效果不好,语句通顺都成问题,还未尝试过fine-tune。不过从当前他人的使用评价和论文的结果来看,BART是一个很适合文本生成的预训练模型。

Paper Body

在介绍文章主体之前,我们再梳理一下文章说到的几个要点知识。确保这几个知识点你都能接受和掌握,我们再来看文章细节。

  • NLG任务是给定输入的(dialog act,user query),生成语句通顺,信息正确的回答。

  • 传统NLG系统大多使用基于模板的文本生成(template-based text generation),有优有劣。

  • 新的基于神经网络的NLG(neural-network-based language generation),其框架中主要步骤包括:

  1. 对于输入进行meaning representation(MR);

  2. 使用sequence-to-sequence(S2S)框架,产生对应的response。

  • 因为本论文要探讨的是NLG产品化落地,所以我们期望探索不同数据量下模型精度结果的情况。即,在Data-Reduction的情况下,如何提高Data-Efficiency

  • 因为是要探讨NLG的产品化落地,所以也期望做一下模型压缩在NLG方面的探索。

  • 在上面的几点理解后,我们从以下4个方面来看这篇论文:

    • 训练数据

    • Bucketing策略

    • 评估方法

    • 模型

    四种训练数据

    数据这里使用的是Facebook团队2019年给出的四个对话系统相关的数据,数据的存储格式都是tree-structured的,数据的领域分别是:Weather, Reminder, Time, Alarm。数据的样例格式如上面给出。

    四种数据处于不同难度级别,其中Weather最难,Alarm最简单。论文作者认为,这四个领域的数据能基本代表Task-oriented Dialogue System上NLG的难度水平,也基本满足NLG任务的任务需求(虽然笔者我不这么认为,读者也不一定这么认为????)。

    三种Bucketing策略

    这里作者根据数据tree-structured的结构特色,使用了三种Bucketing策略,分别是:

    • Coarse grained(CB): 使用data中argument names进行Bucket group

    • Medium grained(MB): 精细到使用data中sub-arguments进行Bucket group,对于词语的形态进行归一化

    • Fine grained buckets(FB&FBQ): 更精细化的操作,包括对argument-value去语义化,甚至对query进行去语义化 (FBQ)

    ▲Bucketing 策略示例

    一个完整的训练集使用不同的Bucketing策略,将会被分割成不同数量的buckets。越精细的Bucketing策略,被划分的buckets数量就越多。比如Weather的训练数据集使用CB:MB:FB划分得到的buckets数量分别是2240:6406:15456. 如上图是一个case以及其各种bucket策略的例子表述。

    实验结果证明,无论哪种Bucketing策略,效果都优于random。其实可以预料得到,因为一个正确的bucket策略相当于引入了先验知识,让模型更能按照正确的方向进行优化学习。所以同等训练量和模型容纳能力的情况下,模型效果会更优。

    三种评估方法

    说到NLG问题,就一定绕不开NLG产生结果的评估。因为是自然语言生成的结果,和标准结果之间不能简单的用“==”来判断结果是否正确,因为会存在语义相同,表述不同的结果;也不能使用简单的Rouge-L来评判,因为如果在关键词(如数字,是否)上表述错误,是不可原谅的。所以NLG的结果评判也一直是一个问题。当然,可以引入人为评测,但是如果每一个NLG都使用认为评测,那么成本将非常的高昂。这里作者所使用的3种评测方法是:

    • Tree Accuracy: 因为数据本身是tree-structured数据,所以非常方便的检测生成文本的重要token是否是MR中的token,如果是记为1,否或者缺失记为0;

    • BLEU: 2002年提出,是NLG中通用的一种结果检测方法。此处不做细述。

    • 人工评测:有钱土豪用人工,土豪FaceBook没道理不用。这里论文从Correctness和Grammaticality两个方面对生成文本进行测评。

    三种模型方法和结果

    在原论文中最后给了7种模型策略,但我只列举了三种,因为其它都是在该三种方法上的排列组合。

    • S2S:使用Sequence-to-Sequence框架,用LSTM做encoder和decoder,输入的embedding使用的是glove的embedding。优点是轻量级,小。

    • BART:基于BART的模型框架进行Encoder-Decoder的模型训练,在BART的基础上进行fine-tune。

    • KD(Knowledge Distillation,知识蒸馏):使用BART的模型太大了,不利于模型的线上使用,需要使用知识蒸馏的做法。这里KD指的是将BART蒸馏到S2S模型中。

    此外,作者还提到了JT和DDA。这不算模型,算是两种通用的增强模型效果的方法:

    • Joint-Training(JT): 将多个相近领域的数据一起训练。

    • Dynamic Data Augmentation (DDA):对于不同的Epoch,随机替换每个argument value。这样即便使用一批数据进行训练,每个Epoch的数据都不一样,增大数据可用性。个人认为:由于此任务数据的固有特点,才得以使用该方法进行数据增强,算是合理利用数据特色进行数据增强的一种方法。

    最终输出的7种模型分别的输出结果如下:

    图中横坐标是训练数据量,纵坐标是精度。最后作者认为:S2S+KD 和 S2S+KD+DDA取得了最好的效果

    当然,全文的重点是NLG的Data Efficiency,所以会实验各种数据量之下的模型结果,DDA策略无疑Data Efficiency最佳。而KD效果最差,但KD主要是为了工程应用而生,毕竟KD之后的S2S模型只有2M。

    能达到这样的结果,确实振奋人心。用几句话总结论文的结论,那就是:我们的Bucketing策略很好,我们的DDA很好,我们的TreeAccuracy很好,我们的KD很好。

    此外,论文还分别给出了在四个Domian上的3种测评结果以及人工测评结果,最后给出结论:我们提出的Tree Accuracy还是很有代表性的;我们使用的S2S+KD+DDA是很有效果的,在四个Domain上通用。

    论文结论

    文章的结论我打算整体翻译一下,因为确实是提纲挈领,很有概括性(英文好的建议读原文,原文截图我保留在下面):

    在训练task-oriented对话系统时,不仅要考虑模型的精度,还需要考虑模型的数据利用率以及可接受性(acceptability),响应延迟和所需的开发维护成本。为此,我们提出一个NLG开发流程:

    • 根据数据中的结构(此处为基于树)对meaning representation进行Bucketing采样,以避免不必要和不平衡的数据采集,每个bucket收集1-3个case。训练模型并进行评估。

    • 如果有任务和语义相似的多个domain数据,可以先进行联合训练,然后进行domain内微调。训练模型并进行评估。

    • 实施动态数据增强(DDA),以减少响应对“可互换参数值”的依赖。与增强数据一起训练,并评估模型性能。

    • 首先,使用预训练的模型(例如BART)为未标记数据生成响应,得到增强数据。然后,用增强数据和人工标记的数据,训练一个小模型(KD)。最后,用人工标记数据,进一步微调该模型。评估模型性能。

    • 如有必要,请为每个MR存储桶收集更多示例,并从头开始部署模型。

    ▲论文结论

    我的理解

    关于论文

    论文本身是一个偏实验性的论文,所以阅读时需要注重理解论文设计的原因。因为是做对话系统中的NLG,而且是基于该组2019年发表的数据集进行训练,其格式化的数据格式,引入了本文中两个非常大的亮点:Bucketing策略 和 DDA方法。注意,这两种方法都是需要在Tree-based数据上进行实现的。此外,模型使用的BART模型和KD方法,都属于比较通用的方法,创新性属于锦上添花。

    当然,论文期望知道 NLG落地对数据的需求(Data Reduction)、可能的数据增强方法(DDA)、模型压缩(S2S+KD)能达到的精度和应用领域的差异影响 的结果是什么,并为此设计了一系列实验,也给出了相应的结论。

    关于NLG

    如开头所说的,一个完备的NLG意味着真正图灵机的实现,也意味着真正人工智能时代的到来。目前各大顶级公司都在走这样的路,包括目前很多论文都是将大量的NLP任务转化为语义理解的任务,如:机器阅读理解代替NER,QA方式代替信息抽取,模型生成代替文本分类。例如T5模型将各类NLP任务转化为一个通用任务模型,例如GPT-3的finetune用普通的自然语言描述代替。NLG目前不属于一个很好的可以工业落地和应用的领域,但是自然语言学者们却一直在探索NLG的任务。

    一直说NLG的回答有很多的不可控性,本论文给出了一种Tree Accuracy的方法来评测模型生成的结果,确实从一定程度上衡量了模型输出结果的准确性,算是为NLG的落地提供了一些方向(在格式化文本输出的落地上提供可能)。但是这种情况其实是假设我们已经获取到了输出所需的槽位值,而非真正意义上的从文本中去理解,然后获取相关关系,再产出合理化的回复。所以本文对于通用意义上的NLG有参考意义,但对于问题的解决还是有很长的路要走!路漫漫其修远兮!

    最后的最后,请记得,素质三连!!!

    后台回复关键词【入群

    加入卖萌屋NLP/IR/Rec与求职讨论群

    后台回复关键词【顶会

    获取ACL、CIKM等各大顶会论文集!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 如何利用外部知识提高预训练模型在阅读理解任务中的性能

论文笔记整理&#xff1a;吴桐桐&#xff0c;东南大学博士生&#xff0c;研究方向为自然语言处理。链接&#xff1a;https://www.aclweb.org/anthology/P19-1226/近年来&#xff0c;机器阅读理解已经逐渐发展为自然语言理解方向的主流任务之一。最近&#xff0c;预训练模型尤其…

美团外卖前端容器化演进实践

背景 提单页的位置 提单页是美团外卖交易链路中非常关键的一个页面。外卖下单的所有入口&#xff0c;包括首页商家列表、订单列表页再来一单、二级频道页的今日推荐等&#xff0c;最终都会进入提单页&#xff0c;在确认各项信息之后&#xff0c;点击提交订单按钮&#xff0c;完…

LeetCode 807. 保持城市天际线

文章目录1. 题目2. 解题1. 题目 在二维数组grid中&#xff0c;grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量&#xff08;不同建筑物的数量可能不同&#xff09;的建筑物的高度。 高度 0 也被认为是建筑物。 最后&#xff0c;从新数组的所有四个方向&#…

提供一个Android原生的Progress——SwipeToRefreshLayout下拉刷新时的等待动画

先来上个图看看效果&#xff1a; 这里我为什么要单独把这个拿出来呢&#xff0c;因为最近才开始接触Android最新的东西&#xff0c;也就是5.0以上的东西&#xff0c;发现Android提供的SwipeToRefreshLayout是没有上拉加载更多的&#xff0c;在网上找了不少第三方提供加载更多的…

导师实验室对学生影响有多大?

读博士导师非常重要&#xff0c;比你们想象得还要更重要。一个优秀的导师不仅在科研帮上很多忙&#xff0c;而且让你懂得怎么做科研&#xff0c;更重要的他教会你怎么做一个合格的学者。 跟这种导师工作&#xff0c;你会发现科研其实是一件非常有趣的事情&#xff0c;它带来的乐…

论文浅尝 | 使用孪生BERT网络生成句子的嵌入表示

论文笔记整理&#xff1a;吴杨&#xff0c;浙江大学计算机学院&#xff0c;知识图谱、NLP方向。https://www.ctolib.com/https://arxiv.org/abs/1908.10084动机谷歌的 BERT 预训练模型&#xff0c;已经能够在两个句子的语义相似度匹配等需要输入一对句子的任务上取得了非常好的…

美团点评效果广告实验配置平台的设计与实现

一. 背景 效果广告的主要特点之一是可量化&#xff0c;即广告系统的所有业务指标都是可以计算并通过数字进行展示的。因此&#xff0c;可以通过业务指标来表示广告系统的迭代效果。那如何在全量上线前确认迭代的结果呢&#xff1f;通用的方法是采用AB实验&#xff08;如图1&…

LeetCode 832. 翻转图像(异或^)

文章目录1. 题目2. 解题1. 题目 给定一个二进制矩阵 A&#xff0c;我们想先水平翻转图像&#xff0c;然后反转图像并返回结果。 水平翻转图片就是将图片的每一行都进行翻转&#xff0c;即逆序。例如&#xff0c;水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。 反转图片的意思是图…

MVP模式在Android中的应用之图片展示选择功能的框架设计

前言&#xff1a;虽然安卓出现的时间比其它平台软件比较晚&#xff0c;但是在我们的安卓开发中&#xff0c;一样可以使用我们所熟知的设计模式来给它一个合理、完善的结构&#xff0c;这样&#xff0c;才可以使我们在平常开发的时候减少冗余代码的发生&#xff0c;真正的提高效…

抑制过拟合之正则化与Dropout

避免过拟合&#xff1a; 1、增大数据集合 – 使用更多的数据&#xff0c;噪声点比减少&#xff08;减少数据扰动所造成的影响&#xff09; 2、减少数据特征 – 减少数据维度&#xff0c;高维空间密度小&#xff08;减少模型复杂度&#xff09; 3、正则化 / dropout / 数据增强…

谈谈神经网络的大规模训练优化

文 | 立交桥跳水冠军源 | 知乎大规模神经网络训练一般会涉及到几百个分布式节点同时工作&#xff0c;模型的参数量以及运算量往往很大&#xff0c;作者认为在这个task下当前的工作主要归结为以下三种&#xff1a;对通信本身的优化&#xff0c;神经网络训练通信的优化&#xff0…

LeetCode 1108. IP 地址无效化

文章目录1. 题目2. 解题1. 题目 给你一个有效的 IPv4 地址 address&#xff0c;返回这个 IP 地址的无效化版本。 所谓无效化 IP 地址&#xff0c;其实就是用 “[.]” 代替了每个 “.”。 示例 1&#xff1a;输入&#xff1a;address "1.1.1.1" 输出&#xff1a;&…

Android NDK开发入门学习笔记(图文教程,极其详尽)

以前也简单用过JNI&#xff0c;但是只是简单用一下&#xff0c;好多都不明白。最近在看源码部分&#xff0c;有涉及到JNI调用的&#xff0c;所以这次打算彻底把它搞定。 先普及一下JNI的调用关系&#xff1a;JAVA------------------------>JNI----------------------------…

论文浅尝 | 利用问题生成提升知识图谱问答

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为知识库问答。来源&#xff1a;NLPCC2019链接&#xff1a;http://tcci.ccf.org.cn/conference/2019/papers/183.pdf本文提出了一种利用问题生成提升知识图谱问答模型性能的方法&#xff08;一个…

顶会论文:基于神经网络StarNet的行人轨迹交互预测算法

1.背景 民以食为天&#xff0c;如何提升超大规模配送网络的整体配送效率&#xff0c;改善数亿消费者在”吃“方面的体验&#xff0c;是一项极具挑战的技术难题。面向未来&#xff0c;美团正在积极研发无人配送机器人&#xff0c;建立无人配送开放平台&#xff0c;与产学研各方共…

python操作mysql数据库实现增删改查

python操作mysql数据库实现增删改查 Python 标准数据库接口为 Python DB-API&#xff0c;Python DB-API为开发人员提供了数据库应用编程接口。 Python 数据库接口支持非常多的数据库&#xff0c;你可以选择适合你项目的数据库&#xff1a; GadFlymSQLMySQLPostgreSQLMicrosoft …

LeetCode 654. 最大二叉树(递归)

文章目录1. 题目2. 解题1. 题目 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给…

Probe:Android线上OOM问题定位组件

配送骑手端App是骑手用于完成配送履约的应用&#xff0c;帮助骑手完成接单、到店、取货及送达&#xff0c;提供各种不同的运力服务&#xff0c;也是整个外卖闭环中的重要节点。由于配送业务的特性&#xff0c;骑手App对于应用稳定性的要求非常高&#xff0c;体现App稳定性的一个…

Android中使用官方提供好的功能使用说明(比如系统图库获取),也作为延生学习的学习文档

这篇文章最核心的就是去学习如何学习Android&#xff0c;如何去使用Android文档。 我们一般在刚开始接触开发的时候&#xff0c;如果遇到无法解决的问题&#xff0c;常常会百度&#xff0c;或者google去寻找答案&#xff0c;比如有个需求是获取系统中的图片&#xff0c;你可能…

再介绍一篇Contrastive Self-supervised Learning综述论文

文 | 黄浴源 | 知乎之前已经介绍过三篇自监督学习的综述&#xff1a;《怎样缓解灾难性遗忘&#xff1f;持续学习最新综述三篇&#xff01;》。这是最近2020年10月arXiv上的又一篇论文"A Survey On Contrastive Self-supervised Learning"。论文地址&#xff1a;https…