Abstract
自然语言理解包括一系列不同的任务,如文本蕴涵(textual entailment, 指两个文本片段有指向关系)、问题回答、语义相似性评估和文档分类。尽管大量的未标记文本语料库非常丰富,但是用于学习这些特定任务的标记数据却非常稀少,这使得区分性地训练模型很难充分执行。我们展示了可以通过在不同的未标记文本语料库上生成语言模型的预训练来实现在这些任务上取得巨大收益,然后对每个特定任务进行区分性微调。与以前的方法相比,我们在微调过程中使用了 task-aware 的输入转换,以实现有效的迁移,同时只需对模型体系结构进行最小的更改。我们在广泛的自然语言理解基准测试中证明了我们的方法的有效性。我们的通用的 task-agnostic 模型优于使用专门为每个任务设计的体系的经过严格训练的模型,在研究的12个任务中有9个显着改善了现有技术水平。例如,我们在常识推理(Stories Cloze测验)上实现了8.9%的绝对改进,在回答问题(RACE)上实现了5.7%的绝对改进,在文本蕴含度(MultiNLI)上实现了1.5%的绝对改进。
Introduction
从原始文本有效学习的能力对于减轻自然语言处理(NLP)中对监督学习的依赖至关重要。大多数深度学习方法需要大量的手动标注数据,这限制了它们在许多缺乏标记资源的领域中的适用性。在这些情况下,可以利用来自未标记数据的语言信息的模型为收集更多标注提供了宝贵的替代方法,这可能既耗时又昂贵。此外,即使在可以进行大量监督的情况下,以无监督的方式学习良好的表示形式也可以显着提高性能。到目前为止,最有说服力的证据是广泛使用预训练的词嵌入来提高一系列NLP任务的性能。
但是,利用未标记文本中的单词级信息以外的信息具有很大的挑战性,这主要有两个原因。首先,不清楚哪种类型的优化目标最有效地学习对迁移有用的文本表示形式。最近的研究关注了各种目标,例如语言建模,机器翻译和语篇连贯,每种方法在不同任务上的表现均优于其他方法。其次,关于将这些学习的表示迁移到目标任务的最有效方法尚无共识。现有的技术包括对模型架构进行特定于任务的更改,使用复杂的学习方案和添加辅助学习目标。这些不确定性使得开发有效的语言处理半监督学习方法变得困难。
在本文中,我们探讨了一种半监督的语言理解任务的方法,结合使用无监督的预训练和监督微调。我们的目标是学习一个普遍的表征,使用很少的修改可以迁移到广泛的任务。我们假设有大量未标记文本的语料库和一些带有标注的训练示例(目标任务)的数据集。我们的设置不要求这些目标任务与未标记的语料库位于同一个域中。我们使用了一份两阶段的训练过程。首先,我们使用语言建模的目标对未标记的数据学习神经网络模型的初始参数。随后,我们使用相应的监督目标使这些参数适应目标任务。
对于我们的模型架构,我们使用了Transformer,它在机器翻译、文档生成和语法分析等各种任务上表现出色。与诸如循环网络之类的替代方案相比,这种模型选择为我们提供了更结构化的存储来处理文本中的长期依赖性,从而在各种任务之间实现了强大的迁移性能。在迁移过程中, 我们利用从traversal-style 方法得到的 task-specific 的自适应输入。 正如我们在实验中展示的那样,这些调整使我们能够以最小的方式对预训练模型的架构进行有效的微调。
我们在四种类型的语言理解任务上评估我们的方法-自然语言推理,问题回答,语义相似性和文本分类。我们的通用的 task-agnostic 模型优于针对每个任务专门设计的架构的区别性的训练模型,在所研究的12项任务中,有9个任务显著改善了SOTA。例如,我们在常识推理(故事完形填空测试)方面取得了8.9%的绝对改进,在问答(RACE)方面取得了5.7%的绝对改进,在文本蕴涵(MultiNLI)方面取得了1.5%的绝对改进,在最近引入的GLUE多任务基准测试方面取得了5.5%的绝对改进。我们还分析了预训练的模型在四种不同环境下的零样本表现,并证明它为下游任务获取了有用的语言知识。
Related Work
Semi-supervised learning for NLP 我们的工作大体上属于自然语言半监督学习范畴。这个范例引起了人们的极大兴趣,它可以应用于序列标记或文本分类等任务。最早的方法是使用未标记的数据来计算单词级别或短语级别的统计信息,然后将其用作监督模型中的特征。在过去的几年中,研究人员已经证明了使用词嵌入(在未标记的语料库上进行训练)来改善各种任务的性能的好处。但是,这些方法主要迁移单词级别的信息,而我们的目标是捕获更高级别的语义。
最近的方法已经研究了学习和利用超过词级语义的未标记的数据。可以使用未标记的语料进行训练的短语级或句子级嵌入,已经被用来将文本编码成适合各种目标任务的向量表示。
Unsupervised pre-training 无监督的预训练是半监督学习的一种特殊情况,其目标是找到一个好的初始化点,而不是修改监督学习的目标。早期的工作探索了该技术在图像分类和回归任务中的使用。随后的研究表明,预训练可作为一种正则化方案,从而在深度神经网络中实现更好的泛化。在最近的工作中,该方法已用于帮助在各种任务(如图像分类,语音识别,实体歧义消除和机器翻译)上训练深度神经网络。
与我们最接近的工作是使用语言建模目标对神经网络进行预训练,然后在监督下对目标任务进行微调。Dai et al和Howard and Ruder使用这种方法来改善文本分类。但是,尽管预训练阶段有助于捕获某些语言信息,但是LSTM模型的使用将其预测能力限制在很短的范围内。如我们的实验所示,我们选择的 transformer 网络使我们能够捕获更长距离的语言结构。此外,我们还证明了我们的模型在更广泛的任务中的有效性,包括自然语言推理、释义检测和故事完成。其他方法使用预训练的语言或机器翻译模型的隐藏表征作为辅助特征,同时对目标任务训练监督模型。这涉及到每个单独目标任务的大量新参数,而在迁移过程中,我们需要对模型体系结构进行最小的更改。
Auxiliary training objectives 添加辅助无监督训练目标是半监督学习的另一种形式。Collobert和Weston的早期工作使用了各种各样的辅助NLP任务,例如POS标记,分块,命名实体识别和语言建模,以改善语义角色标记。最近,Rei在目标任务目标中添加了辅助语言建模目标,并证明了序列标记任务的性能提升。我们的实验也使用了一个辅助目标,但正如我们所展示的,无监督的预训练已经学习了与目标任务相关的几个语言方面。
Framework
我们的训练过程包括两个阶段。 第一阶段是学习大量文本语料库的高容量语言模型。 接下来是微调阶段,在此阶段中,我们使模型适应于带有标记数据的判别任务。
Unsupervised pre-training
给定无监督的token语料 $U = {u_1, …, u_n}$, 我们使用标准语言建模目标来最大化以下可能性:
\[L_1(U) = \sum_i \log P(u_i \mid u_{i-k}, ..., u_{i-1};\Theta) \tag{1}\]其中 $k$ 是上下文窗口的的大小, 条件概率 $P$ 使用参数 $\Theta$ 的神经网络建模。这些参数使用随机梯度下降训练。
在我们的实验中, 我们的语言模型使用多层 Transformer decoder 建模, 它是transformer的一个变体。 此模型对输入上下文 token 应用 multi-head self-attention 操作,然后使用位置级前馈层,以在目标 token 上产生输出分布:
\[\begin{aligned} h_0 &= U W_e + W_p \\ h_l &= transformer\_block(h_{l-1}) \forall i \in [1, n] \\ P(u) &= softmax(h_nW_e^T) \\ \end{aligned} \tag{2}\]其中 $U = {u_{-k}, …, u_{-1}}$ 是 tokens的上下文向量, $n$ 是层数, $W_e$ 是 token embedding 矩阵, $W_p$是 position embedding 矩阵。
Supervised fine-tuning
在使用公式(1)中的目标训练模型之后, 我们参数调整为监督的目标任务。 我们假设一个有标注的数据集 $\mathcal{C}$, 其中每个实例由输入 tokens 的一个序列组成, $x^1, …, x^m$, 标签为y。输入送入我们的预训练模型得到最终的 transformer block 的激活 $h_l^m$, 它然后被送入一个额外的参数为 $W_y$ 的线性层输出层预测 $y$:
\[P(y \mid x^1, ..., x^m) = \text{softmax} (h_l^mW_y) \tag{3}\]这给了我们以下最大化的目标:
\[L_2(\mathcal{C}) = \sum_{(x, y)} \log P(y \mid x^1, ..., x^m) \tag{4}\]我们还发现,将语言建模作为微调的辅助目标帮助学习 (a) 提高监督模型的泛化能力 (b) 加速收敛。 这与先前的工作一致,后者也观察到使用这种辅助目标可以改善性能。特别地, 我们用以下目标优化(以权重 $\lambda$)
\[L_3(\mathcal{C}) = L_2(\mathcal{C}) + \lambda * L_1(\mathcal{C}) \tag{5}\]总体而言,在微调期间我们唯一需要的额外参数是$W_y$, 和定界符 tokens 的 embeddings(如Section 3.3所述)。
Figure 1: (left) 本工作的 Transfomer 结构 以及 训练目标。 (right) 用于在不同任务上的 微调 输入 transformations。 我们将所有结构化输入转换成token序列,由预训练的模型进行处理,然后是linear+softmax层。
Task-specific input transformations
对于一些任务,比如文本分类,我们可以直接按照上面的描述微调模型。某些其他任务,如问答或文本蕴涵,具有结构化输入,如有序句子对,或文档、问题和答案的三元组。因为我们预先训练的模型是在连续的文本序列上训练的,所以我们需要一些修改才能将它应用到这些任务中。先前的工作提出了在迁移表征之上的学习任务特定的体系结构。这种方法重新引入了大量的特定于任务的定制,并且没有对这些额外的体系结构组件使用迁移学习。进而,我们使用 traversal-style 的方法,将结构化输入转换为我们预训练的模型可以处理的有序序列。这些输入转换允许我们避免跨任务对体系结构进行大量更改。我们在下面简要描述了这些输入转换,图1提供了一个直观的说明。所有转换都包括添加随机初始化的开始和结束标记 ($,
Textual entailment 对于文本蕴含任务, 我们拼接premise $p$ 和 hypothesis $h$ token 序列, 之间有分割符。
Similarity 对于相似性任务,被比较的两个句子没有固有的顺序。为了反映这一点,我们修改了输入序列以包含两种可能的句子顺序(中间有一个分隔符),并独立地处理每种顺序以生成两种序列表示 $h_l^m$,这两种序列表示 $h_l^m$ 在输入线性输出层之前按元素相加。
Question Answering and Commonsense Reasoning 对于这些任务, 我们给定一个上下文文档 $z$, 一个问题 $q$, 以及一组可能的答案 ${a_k}$。 我们拼接文档上下文和每个可能答案的问题, 在它们之间增加分隔符得到
\[[z; q; \$; a_k]\]这些序列中的每一个都由我们的模型独立处理,然后通过softmax层进行归一化,以在可能的答案上产生输出分布。