文 / Google Research 及 Google Brain 团队学生研究员 Kevin Clark 和高级研究员 Thang Luong
在语言预训练模型方面取得的最新进展已为自然语言处理领域 (NLP) 带来巨大收获,包括 BERT、RoBERTa、XLNet、ALBERT 和 T5 等最前沿 (SOTA) 模型。这些训练方法尽管在设计上各不相同,但都遵循相同的理念:在针对特定 NLP 任务(例如情感分析和问题回答)微调之前,利用大量未标记文本来构建通用的语言理解模型。
现有预训练方法通常分为两类:一是语言模型(LM,如 GPT),这类模型按照从左至右的顺序处理输入文本,依据先前上下文预测下一个词;二是掩码语言模型(MLM,如 BERT、RoBERTa 和 ALBERT),这类模型改为预测输入文本中已掩盖的少量单词的特征。MLM 具有双向性,能够“看到”被预测 Token 左右两侧的文本,而非只是一侧,这是该模型的优势。但是,MLM 目标(及 XLNet 模型等的相关目标)也有缺点。这些模型并没有预测每个输入 Token,而只是预测很小的子集,即被掩盖的 15%,从而减少了从每个句子中学习的信息量。
现有预训练模型及其缺点:箭头指示用于生成给定输出表示(矩形)的 Token。左:LM(如 GPT)仅使用当前单词左侧的上下文。右:MLM(如 BERT)使用左右两侧的上下文,但是对于每个输入仅预测很小子集的单词
在 “ELECTRA:预训练文本编码器作为判别器而不是生成器” (ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators) 中,我们采用不同的语言预训练方法,兼具 BERT 的优势,并且学习效率更高。ELECTRA — Efficiently Learning an Encoder that Classifies Token Replacements Accurately(高效地学习对 Token 替换进行准确分类的编码器)是一种新颖的预训练方法,在相同的计算预算下,其性能优于现有技术。例如,ELECTRA 仅使用不到 ¼ 的计算量即可在 GLUE 自然语言理解基准上达到与 RoBERTa 和 XLNet 相当的性能,并且能在 SQuAD 问题回答基准上达到 SOTA 结果。ELECTRA 出色的效率意味着即使在小型模型上也有不错的训练效果——可在数天内在单个 GPU 上完成训练,准确率高于需使用 30 倍以上计算量的 GPT 模型。ELECTRA 在 TensorFlow 上作为开源代码模型 发布,并且包含许多立即可用的预训练语言表示模型。
加快预训练速度
ELECTRA 使用一种称为 “替换 Token 检测” (RTD) 的新预训练任务,该任务可在训练双向模型(如 MLM)的同时,从所有输入位置(如 LM)学习,。
受生成对抗网络 (GAN) 启发,ELECTRA 可训练模型区分“真实”和“虚假”输入数据。我们的方法是通过将一些输入的 Token 替换为不正确但有些合理的内容来抹去输入,而不是像 BERT 中那样通过用 “[MASK]” 替换 token 来抹去部分输入。例如,在下图中,单词“cooked”可替换为“ate”。虽然这一替换勉强说得通,但却不符合整个上下文的语义。预训练任务要求模型(即 判别器)接下来要确定原始输入中的哪些 Token 已被替换或仍保持一致。重要的是,这项二分类任务将被应用于 每项 输入的 Token,而不只是少量的掩码 Token(在类 BERT 的模型中仅占为 15%),这使得 RTD 比 MLM 更加有效。而 ELECTRA 只需更少的示例即可实现相同的性能,原因在于 ELECTRA 能够接收每个示例的模式训练信号。与此同时,RTD 可促成强大的表示学习,这是因为模型必须学习准确表示的数据分布才能完成任务。
替换 Token 检测在从所有输入位置学习的同时,训练双向模型
替换 Token 来自称为生成器的 另一个神经网络。虽然生成器可以是在 Token 上产生输出分布的任何模型,但我们使用与判别器联合训练的小型掩码语言模型(即有小规模掩码的 BERT 模型)。尽管生成器结构与 GAN 相似,但是由于将 GAN 应用于文本存在 难度,我们训练生成器以最大可能性预测已掩盖的单词,而非进行对抗性预测。生成器和判别器共享相同的输入单词嵌入。在进行预训练后,生成器下降,判别器(ELECTRA 模型)在下游任务上进行微调。我们的模型均使用 transformer 神经网络架构。
有关替换 Token 检测 (RTD) 任务的更多细节。假 Token 自与 ELECTRA 联合训练的小型掩码语言模型中采样
ELECTRA 结果
我们将 ELECTRA 与其他前沿 NLP 模型进行比较,发现在给定的相同计算预算下,相较之前的方法,ELECTRA 取得实质性的改进,其性能与 RoBERTa 和 XLNet 相当,而使用的计算量不到 25%。
x 轴显示用于训练模型的计算量(以 FLOP为单位),y 轴显示 dev GLUE 得分。与现有预训练 NLP 模型相比,ELECTRA 的学习效率要高得多。但需要注意的是,目前 GLUE 上的最佳模型(例如 T5 (11B) )与该图情况不符,因为其使用的计算量比其他模型多得多(大约比 RoBERTa 多 10 倍)
为进一步突破效率上限,我们通过一个小型 ELECTRA 模型进行实验,该模型可在 4 天内于单个 GPU 上训练得到很好的精确度。尽管无法达到与需要多个 TPU 进行训练的大型模型相同的精确度,但小型 ELECTRA 的性能仍然非常不错,甚至优于 GPT,而所需的计算量却只有其 1/30。
最后,为确定是否能在大范围内达到理想的结果,我们使用更多的计算量(大约与 RoBERTa 相同的量,大约是 T5 的 10%)训练了一个大型 ELECTRA 模型。该模型在 SQuAD 2.0 问题回答数据集(见下表)中达到单个模型的全新领先水平,并且在 GLUE 排行榜上的表现优于 RoBERTa、XLNet 和 ALBERT。虽然大型 T5-11b 模型在 GLUE 上的得分仍然较高,但 ELECTRA 的大小是其 1/30,而用于训练的计算量是其 10%。
模型 | Squad 2.0 测试集 |
---|---|
ELECTRA-Large | 88.7 |
ALBERT-xxlarge | 88.1 |
XLNet-Large | 87.9 |
RoBERTa-Large | 86.8 |
BERT-Large | 80.0 |
ELECTRA-Large 和其他前沿模型(仅显示非整体模型)的 SQuAD 2.0 得分
发布 ELECTRA
我们将发布 代码,以用于执行 ELECTRA 预训练并在下游任务对其进行微调,而当前受支持的任务包括:文本分类、问题回答和序列标记。代码支持在单个 GPU 上快速训练小型 ELECTRA 模型。我们还将发布适用于 ELECTRA-Large、ELECTRA-Base 和 ELECTRA-Small 的预训练权重。ELECTRA 模型目前仅支持使用英文,但我们希望未来可以发布已接受多种语言预训练的模型。
原文:More Efficient NLP Model Pre-training with ELECTRA
中文:谷歌开发者公众号