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

标题:《Best Practices for Data-Efficient Modeling in NLG:How to Train Production-Ready Neural Models with Less Data》
作者:Facebook
时间:2020
项目地址:https://github.com/facebookresearch/DataEfficientNLG(只是个数据集仓库,暂时还没有开放code)
中文:数据高效建模的最佳实践NLG:如何用较少的数据训练可落地的神经网络模型
简介:
这篇论文属于一篇偏实验性论文,总结为一句话就是:流程化NLG在对话系统落地过程中开发步骤和评估策略。
baseline使用的是既有的BART,创新点主要在训练方法和评估指标上,即Bucketing训练策略 + TreeAccuracy评价策略。NLG任务的输入是tree-structured input的数据,其实就是任务型多轮对话的话语-状态-动作的嵌套结构,通过控制键值对实现对generated response的控制。
【按:Bucketing训练的操作细节必须开源后才能验证】

1 Bucketing训练策略

在深度学习中,我们通常随机选取一批(如batch_size = 64)数据进行模型的训练。Bucketing则是一种按照某种【策略】将数据分成一个个的bucket(桶),然后将一个个的Bucket的数据丢入到模型中进行训练。这样的训练方法可以减少在模型训练过程中由imbanlanced distribution带来的bias,也能提高数据的利用率,是常用的一种利用“少量数据”训练模型的方法。
设置Bucket策略的出发点是:各个bucket中的数据中,不一样的信息是希望模型能够学习的信息,一样的(共有的)信息是模型可以忽略的信息。
在本论文的任务上,因为数据是tree-structured的数据,作者这里数据的tree-structured degree和argument values,尝试了多种方法进行Bucketing,都取得了比random好的效果。
【按:其实可以预料得到,因为一个正确的bucket策略相当于引入了先验知识,让模型更能按照正确的方向进行优化学习。所以同等训练量和模型容纳能力的情况下,模型效果会更优。】

2 TreeAccuracy评价策略

除了BLEU等古典指标外,提出了Tree Accuracy指标。
Tree Accuracy: 因为数据本身是tree-structured数据,所以非常方便的检测生成文本的重要token是否是meaning representation中的token,如果是记为1,否或者缺失记为0;
【按:也是不难想到的,如果在关键词(如数字,是否)上表述错误,那就根本不能企业上线了。】

3 其他trick

除此之外,作者还尝试了一些动态数据增强(即训练中随机替换键值,使得每个epoch都不一样)的trick,多个相近领域的数据一起训练的trick,模型压缩等,都服务于较少量数据尽量贴合落地的问题。

4 总结

论文最后一段,对面向落地的NLG模型该如何训练进行了总结
在训练task-oriented对话系统时,不仅要考虑模型的精度,还需要考虑模型的数据利用率以及可接受性(acceptability),响应延迟和所需的开发维护成本。为此,我们提出一个NLG开发流程:

  • 根据数据中的结构(此处为基于树)对meaning representation进行Bucketing采样,以避免不必要和不平衡的数据采集,每个bucket收集1-3个case。训练模型并进行评估。
  • 如果有任务和语义相似的多个domain数据,可以先进行联合训练,然后进行domain内微调。训练模型并进行评估。
  • 实施动态数据增强(DDA),以减少响应对“可互换参数值”的依赖。与增强数据一起训练,并评估模型性能。
  • 首先,使用预训练的模型(例如BART)为未标记数据生成响应,得到增强数据。然后,用增强数据和人工标记的数据,训练一个小模型(KD)。最后,用人工标记数据,进一步微调该模型。评估模型性能。
  • 如有必要,请为每个MR存储桶收集更多示例,并从头开始部署模型。

你可能感兴趣的:(深度学习,自然语言处理)