序列到序列(sequence-to-sequence,简称 seq2seq)模型使机器翻译这个领域起了翻天覆地的变化,并且成为像摘要、句子融合和语法错误纠正等各种文本生成任务的首选工具。近几年来我们看到,得益于模型架构(如Transformer)的诸多改进和通过无监督的预训练来利用大量未注释文本的能力,神经网络方法的质量得到了相应的提升。
但是,把 seq2seq 模型用于文本生成会带来一些不可忽视的缺点,具体则取决于用例,比如生成不受输入文本支持的输出(被称为幻觉),以及需要大量训练数据才能达到良好的性能。此外,由于 seq2seq 模型通常是一个词一个词地生成输出,因此它们的推理速度天生就很慢。
在《编码、标记、实现:高精度文本编辑》( Encode, Tag, Realize: High-Precision Text Editing)这篇文章中,我们提出了一个全新的开源文本生成方法,该方法旨在专门解决这三个缺点。
由于该方法速度快、精度高,因此被称为 LaserTagger。LaserTagger 不是从头开始生成输出文本,而是通过预测的编辑操作来标记单词以生成输出,这些预测的编辑操作随后在单独的实现步骤上应用于输入词组。这种方法在处理文本生成时不易出错,处理它的模型架构也可以选择更容易训练和更快执行的类型。
LaserTagger 的设计和功能
很多文本生成任务的一个显著特征是,在输入和输出之间常常存在高度重叠。比如,在检测测和修复语法错误或是融合语句时,大多数输入文本可以保持不变,只有一小部分单词需要修改。因此,LaserTagger 会生成一系列编辑操作而不是一些实际的单词。我们使用的 4 种编辑操作是:Keep(把一个单词复制到输出)、Delete(删除一个单词)以及 Keep-AddX/Delete-AddX(在标记过的单词前面添加短语 X,还可以选择删除这个标记过的单词)。该过程如下图所示,展示了 LaserTagger 在语句融合中的应用。
LaserTagger 适用于语句融合。该预测编辑操作相当于删除“. Turing”并在它的前面添加“and he”。请注意在输入和输出文本之间的高度重叠。
所有添加的短语都来自于有限的词汇表。该词汇表是一个优化过程的结果,该过程有两个目标:(1)把词汇表做得尽量小,(2)把训练示例的数量尽量做大,其中唯一需要添加到目标文本中的单词来自该词汇表。由于有了一个有限的短语词汇表,因而输出决策的空间变小了,并且避免了模型随意添加单词的情况,从而减轻了幻觉的问题。输入和输出文本高度重叠的属性的一个推论是,所需的修改往往是局部的,并且彼此独立。这意味着,该编辑操作可以进行高度精确的并行预测,与自回归 seq2seq 模型(这种模型是根据先前的预测顺序执行预测)相比,前者的端到端速度明显提高。
结果
我们在 4 个任务上对 LaserTagger 进行了评估,这 4 个任务分别是:语句融合、拆分和改述、抽象摘要及语法纠正。 在这些任务中,LaserTagger 的表现与强大的基于BERT的 seq2seq 基线相当,而后者使用了大量的训练示例;并且当训练示例的数量有限时,LaserTagger 的性能显然优于后者。 我们在WikiSplit数据集上的训练结果展示如下,其中的任务是把一个长句改述为两个连贯的短句。
在有 1 百万个示例的完整数据集上训练时,LaserTagger 和基于BERT的 seq2seq 基线这两个模型表现相当,但在其具有 1 万个或更少示例的子集上训练时,LaserTagger 的表现明显优于基线模型(SARI得分越高越好)。
LaserTagger 的主要优点
与传统的 seq2seq 模型相比,LaserTagger 具有以下优点:
控制:通过控制输出短语词汇表(我们也可以手动编辑或整理),LaserTagger 比 seq2seq 基线模型更不易产生幻觉。
推理速度:在预测方面,LaserTagger 比 seq2seq 基线模型快,速度之差最高可达 100 倍,使之更适合用于实时应用程序。
数据效率:即使只使用几百个或几千个训练示例进行训练,LaserTagger 也可以产生合理的输出。在我们的实验中,一个有竞争力的 seq2seq 基线模型需要上万个示例才能获得相应的表现。
为什么如此重要
进行大规模应用时,LaserTagger 的优点变得更明显,比如通过缩短应答的长度并减少重复性可以在某些服务中改善语音应答的格式。较高的推理速度使得该模型可以直接插入现有的技术栈,而不会在用户端增加任何可察觉的延迟,与此同时,改善的数据效率可以收集多种语言的训练数据,从而让具有不同语言背景的用户都可以从中受益。
在当前的工作中,我们将努力为其他生成自然语言的谷歌技术进行类似的改进。
此外,我们正在探索当文本变得越来越长、越来越复杂并作为对话的一部分的时候,如何能通过文本的编辑(而不是从头开始生成文本)来帮助我们更好地理解用户的需求。LaserTagger 的代码已经通过我们的GitHub存储库对社区开源了。
致谢
Eric Malmi、Sebastian Krause、Sascha Rothe、Daniil Mirylenka 和 Aliaksei Severyn 一起进行了这项研究。
我们衷心感谢 Enrique Alfonseca、Idan Szpektor 和 Orgad Keller 与我们进行了卓有成效的讨论。
原文链接:
Encode, Tag and Realize: A Controllable and Efficient Approach for Text Generation
评论