高效的文本生成方法 — LaserTagger 现已开源

2020-05-09 14:15 1541 阅读 ID:50
TensorFlow
TensorFlow

文 / Eric Malmi 和 Sebastian Krause,SE,Google Research

序列到序列 (seq2seq) 模型为机器翻译领域带来了巨大变革,并成为完成摘要生成、句子合并和语法纠错等多种文本生成任务的首选工具。近几年,由于从模型架构(例如 Transformer)和无监督预训练样本能力(大型无标注文本语料库)的改进,基于神经网络方法的文本生成质量得到了提升。

时至今日,使用 seq2seq 模型生成文本时对于某些用例依然存在多种重大缺陷,例如“幻象”(Hallucination,即模型的部分输出不存在与之对应的输入信息),并且需要大量训练数据才能达到出色性能。此外,seq2seq 模型通常逐字生成输出内容,所需推理时间较长。

在《编码、标记、实现:高精度文本编辑》(Encode, Tag, Realize: High-Precision Text Editing) 一文中,我们展示了一种新型、开源的文本生成方法,旨在解决上述的三种缺陷。由于新方法速度快、精度高,我们将其命名为为 LaserTagger。LaserTagger 使用预测的编辑操作标记单词而不是从头开始生成输出文本,然后在独立的 实现步骤 (Realization) 中将这些操作应用于输入单词,进而生成输出。使用这种方法生成文本不易出错,且模型架构训练更简单、执行更快速。

LaserTagger 的设计与功能

许多文本生成方法都有一个显著特征:输入与输出常有高度重合。例如,在检测和修复语法错误或合并句子时,大部分输入文本能够保持不变,仅有一小部分单词需要修改。因此,LaserTagger 生成的是一系列编辑操作,而不是真实的单词。我们使用以下四类编辑操作:Keep(将单词复制到输出)、Delete(移除单词)、Keep-AddX(在已标记单词前添加词组 X)和 Delete-AddX(在已标记单词前添加词组并删除已标记单词)。下图展示了 LaserTagger 是如何合并句子:

使用 LaserTagger 合并句子。预测的编辑操作为:删除“.Turing”并在其之前添加“and he” (Delete-AddX)。请注意输入和输出文本之间的高重合度

所有添加的词组均来自一个限制词汇表。词汇表被优化过,目的是:

  1. 最小化词汇表规模;
  2. 最大化训练样本数量,仅包含需要添加到目标文本的必要单词。

限制词汇表的词组数量可以减少相应输出的决策量,并防止模型随意添加单词,进而缓解“幻象”问题。由于输入和输出文本高度重合,我们只需要修改部分单词。这意味着我们可以并行准确的预测编辑操作,相较于需要顺序进行(依赖上一步操作)的 seq2seq 模型,带来了显著的端到端速度的提升。

实验结果

我们通过四项任务来评估 LaserTagger 的性能:句子合并、句子的拆分和改述、提炼摘要和语法纠正。

在这些任务中,LaserTagger 的表现可媲美基于 BERT 的 seq2seq 基准模型 (Baseline Model),后者采用大量训练样本且性能出色;而当训练样本有限时,LaserTagger 的性能明显优于基准模型。

下图展示的是模型在 WikiSplit 数据集上的训练结果,任务是将一个长句子改述为两个连贯的短句:

在包含 1 百万个样本的完整数据集上训练模型时,LaserTagger 和基于 BERT 的 seq2seq 基准模型性能相当,但当训练的子样本降低至 10000 个时,LaserTagger 的性能明显优于该基准模型(SARI 分数越高,性能越高)

LaserTagger 的主要优势

与传统的 seq2seq 方法相比,LaserTagger 具备以下优势:

  • 可控:通过控制输出词组词汇表(我们也可以手动编辑或管理),LaserTagger 相较于 seq2seq 基准更不易产生幻象。
  • 快速:LaserTagger 计算预测的速度是 seq2seq 基准的 100 倍,因此适合实时应用。
  • 高效:即使训练样本量在几百至几千,LaserTagger 也能生成合理的输出。在我们的实验中,用于对照的 seq2seq 基准则需要数万个样本才能获得同等水准的性能。

LaserTagger 的意义

在大规模应用中,LaserTagger 的优势更加明显,比如通过缩短回复内容的长度、减少重复表述来改进语音应答等服务。LaserTagger 模型的快速推理能力可与现有技术栈良好结合,客户端不会感到明显延迟。它的高效率同时能收集多种语言的训练数据,让来自不同语言背景的用户受益。

在目前的工作中,我们致力于对其他有关生成自然语言的 Google 技术进行类似改进。此外,我们也正在探索,当用户规模越大、成分越来越复杂,且作为对话的一方出现时,这种编辑文本(而不是从头生成文本)的方式将如何帮助我们更好地理解用户诉求。我们已通过 GitHub 代码库向社区开放了 LaserTagger 源代码。

致谢

此项研究由 Eric Malmi、Sebastian Krause、Sascha Rothe、Daniil Mirylenka 和 Aliaksei Severyn 共同完成。感谢 Enrique Alfonseca、Idan Szpektor 和 Orgad Kelle 参与探讨,令我们收获颇多。

如果您想详细了解 本文提及 的相关内容,请参阅以下文档。这些文档深入探讨了这篇文章中提及的许多主题:

  • 句子合并
    https://ai.google/tools/datasets/discofuse/
  • Transformer
    https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html
  • 幻象
    https://arxiv.org/abs/1910.08684
  • 编码、标记、实现:高精度文本编辑
    https://ai.google/research/pubs/pub48542/
  • 开源
    http://lasertagger.page.link/code
  • BERT
    https://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html
  • WikiSplit
    https://ai.google/tools/datasets/wiki-split/
  • seq2seq
    https://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html
  • SARI 分数
    https://www.aclweb.org/anthology/Q16-1029/
  • 当用户规模越大、成分越来越复杂,且作为对话的一方出现时
    https://blog.google/products/search/search-language-understanding-bert/
  • GitHub 代码库
    https://github.com/google-research/lasertagger
免责声明:作者保留权利,不代表本站立场。如想了解更多和作者有关的信息可以查看页面右侧作者信息卡片。
反馈
to-top--btn