编者按:微软亚洲研究院提出新的预训练模型 ProphetNet,提出了一种新的自监督学习目标——同时预测多个未来字符,在序列到序列的多个自然语言生成任务都取得了优异性能。
大规模预训练语言模型在自然语言理解(NLU)和自然语言生成(NLG)中都取得了突破性成果。这些模型通常使用特殊的自监督学习目标先在大规模无标记语料中进行预训练,然后在下游任务上微调。
传统自回归语言模型通过估计文本语料概率分布被广泛用于文本建模,序列到序列的建模(seq2seq),以及预训练语言模型中(如 GPT 等)。这类模型通常使用 teacher-forcing 的方法训练,即每一时刻通过给定之前时刻的所有字符以预测下一个时刻的字符。然而,这种方式可能会让模型偏向于依赖最近的字符,而非通过捕捉长依赖(long-term dependency)的信息去预测下一个字符。有如以下原因:(1)局部的关系,如两元字符的组合,往往比长依赖更强烈;(2)Teacher-forcing 每一时刻只考虑对下一个字符的预测,并未显式地让模型学习对其他未来字符的建模和规划。最终可能导致模型对局部字符组合的学习过拟合,而对全局的一致性和长依赖欠拟合。尤其是当模型通过贪心解码(greedy decoding)的方式生成序列时,序列往往倾向于维持局部的一致性而忽略有意义的全局结构。
ProphetNet(先知网络)针对上述问题,我们提出了一个新的 seq2seq 预训练模型, 我们称之为 ProphetNet(先知网络)。该模型带有一个新颖的自监督学习目标函数,即预测未来的N元组(Predicting Future N-gram)。与传统 seq2seq 的 Teacher-forcing 每一时刻只预测下一个字符不同,ProphetNet 每一时刻将学习去同时预测未来的 N 个字符。如图1所示:
图1:左边是传统的语言模型,每一时刻预测下一时刻的字符。右边是 Bigram 形式下的 ProphetNet,每一时刻同时预测未来的两个字符。
预测未来 N 元组这一自监督学习目标在训练过程中显式地鼓励模型在预测下一个字符时考虑未来更远的字符,做到对未来字符的规划,以防止模型对强局部相关(strong local correlation)过拟合。
ProphetNet 基于 Transformer 的 seq2seq 架构,其设计有两个目标:1.模型能够以高效的方式在训练过程中完成每时刻同时预测未来的 N 个字符;2.模型可以灵活地转换为传统的 seq2seq 架构(每时刻只预测一下个字符),以在推理或微调阶段兼容现有的方法和任务。为此,我们受 XLNet 中 Two-stream self attention 的启发,提出了用于模型 decoder 端的 N-stream self-attention 机制。图2展示了 bigram 形式下的 N-stream self-attention 样例。除了原始的 multi-head self-attention 之外(我们称为 main stream self-attention,如图2a),N-stream self-attention 包含了额外的 N 个 predicting stream self-attention(如图2b和图2c),用于分别预测第 n 个未来时刻的字符(如图2d)所示。每一个 predicting stream 与 main stream 共享参数,我们可以随时关闭 predicting stream 以让模型转换回传统 seq2seq 的模式。
图2:(a) 为main stream self-attention;(b) 为1-st predicting stream self-attention;(c) 为2-nd predicting stream self-attention;(d) 展示了n-stream self-attention的输入输出及流程。
由于难以获取到大量带标记的序列对数据,我们用去噪的自编码任务通过大量无标记文本预训练 ProphetNet。去噪的自编码任务旨在输入被噪音函数破坏后的序列,让模型学习去复原原始序列。该任务被广泛应于 seq2seq 模型的预训练中,如 MASS、BART、T5 等。本文中使用 MASS 的预训练方式,通过引入提出的 predicting n-stream 自监督学习目标函数预训练 ProphetNet。我们以 bigram 形式的 ProphetNet 为例,整个流程如图3所示:
图3:二元形式下的 Prophet 整体框架图
实验结果我们使用两个规模的语料数据训练 ProphetNet。ProphetNet 包含12层的 encoder 和12层的 decoder,隐层大小为1024。先在 BERT 所使用的 BookCorpus+Wikipedia(16GB)的数据上预训练模型,将模型在 Text summarization 和 Question generation 两个 NLG 任务上的三个数据集微调并评估模型性能。与使用同等规模数据(16GB)的预训练模型相比,ProphetNet 在CNN/DailyMail、Gigaword 和 SQuAD 1.1 question generation 数据集上都取得了最高的性能,如表1-3所示。
表1:CNN/DailyMail 测试集结果
表2:Gigaword 测试集结果
表3:SQuAD 1.1 测试集结果(上半部分)SQuAD 1.1 交换验证测试集结果(下半部分)
除了使用 16GB 的语料训练模型,我们也进行了更大规模的预训练实验。该实验中,我们使用了 160GB 的语料(该语料被 BART、RoBETRa 等模型预训练中所使用)预训练 ProphetNet。我们展示了预训练14个 epoch 后的 ProphetNet 在 CNN/DailyMail 和 Gigaword 两个任务上微调和测试的结果。如表4所示。需要注意的是,在相同大小的训练数据下,我们模型的预训练 epoch 仅约为 BART 的三分之一。我们模型的训练数据使用量仅约为 T5 和 PEGASUSLARGE(C4)的五分之一,约为 PEGASUSLARGE(HugeNews) 的二十分之一。尽管如此,我们的模型仍然在 CNN/DailyMail 上取得了最高的 ROUGE-1 和 ROUGE-L F1 scores。并在 Gigaword 上实现了新的 state-of-the-art 性能。
表4:模型经大规模语料预训练后在 CNN/DailyMail 和 Gigaword 测试集的结果
为了进一步探索 ProphetNet 的性能,我们在不预训练的情况下比较了 ProphetNet 和 Transformer 在 CNN/DailyMail 上的性能。实验结果如表5所示,ProphetNet 在该任务上超越了同等参数量的 Transformer。
表5:模型不经过预训练在 CNN/DailyMail 验证集结果
总结本文介绍了微软亚洲研究院在序列到序列模型预训练的一个工作:ProphetNet,该模型提出了一种新的自监督学习目标,在同一时刻同时预测多个未来字符。并通过提出的 N-stream self-attention 机制高效地实现了模型在该目标下的训练。实验表明,该模型在序列到序列的多个自然语言生成任务都取得了不错的性能。我们将在之后尝试使用更大规模的模型架构和语料进行预训练,并进一步深入地探索该机制。
了解更多技术细节,请点击阅读原文查看论文:
ProphetNet: Predicting Future N-gram for Sequence-to-Sequence Pre-training
论文链接:https://arxiv.org/pdf/2001.04063.pdf
代码链接:https://github.com/microsoft/ProphetNet(即将开放)
本文作者:刘大一恒、齐炜祯、晏宇、宫叶云、段楠、周明
你也许还想看: