干货-自然言语处理中的言语模型预训练方法ELMo、GPT、BERT

图灵汇官网

1. 引言

在介绍相关论文之前,先简要介绍一下背景知识。首先,语言模型是一种统计模型,它描述了一组词序列的概率分布。具体而言,语言模型的任务是为一段长度为m的文本确定一个概率分布P,表示这段文本出现的可能性。然而,当文本长度增加时,计算条件概率P(wi | w1, w2, ..., wi−1)变得极其困难。因此,研究者们提出了一种简化模型——n元模型。在n元模型中,计算条件概率时只需要考虑当前词的前n个词。尽管n元模型可以通过频率计数来估算条件概率,但当n值较大时,容易出现数据稀疏问题,从而导致估计不准确。因此,在百万级别语料库中,通常只使用三元模型。

为了缓解n元模型中的数据稀疏问题,研究者们引入了神经网络语言模型。其中一个代表性的工作是Bengio等人于2003年提出的,该模型利用三层前馈神经网络进行建模。研究发现,模型的第一层参数可以用作词表示,不仅维度低且紧密,还蕴含了语义信息,这为后来广泛使用的词向量(如word2vec)奠定了基础。实际上,语言模型可以根据上下文预测下一个词,无需人工标注语料,因此可以从大规模单语语料中学习到丰富的语义知识。

接下来,我们将简要介绍预训练的概念。目前,大多数神经网络在训练过程中主要依靠反向传播(BP)算法,通过随机初始化模型参数,然后利用BP算法结合优化算法(如随机梯度下降法SGD)来优化模型参数。而预训练的思想则是,先在一个任务上训练得到一组模型参数,然后用这些参数作为初始值,再进行训练。这种方法在早期的自编码器堆叠式搭建深度神经网络时已经得到了应用。词向量也可以视为一种预训练,这种思想在基于神经网络的迁移学习中得到了广泛应用。

2. ELMo

2.1 引言

华盛顿大学的研究团队发布了一篇名为《Deep Contextualized Word Representations》的论文,最初发表于2018年NAACL会议,并获得了最佳论文奖。这项工作的前身是在2017年ACL会议上发布的《Semi-supervised sequence tagging with bidirectional language models》。该研究的初衷是认为预训练词表示应能捕捉丰富的句法和语义信息,并能对多义词进行建模。传统的词向量(如word2vec)是上下文无关的。例如,“apple”一词在不同上下文中具有不同的含义,但在word2vec中只有一个词向量,无法处理一词多义的情况。因此,他们利用语言模型获得上下文相关的预训练表示,称为ELMo,并在六个NLP任务中取得了显著提升。

2.2 方法

在ELMo中,他们使用双向LSTM语言模型,由前向和后向语言模型组成,目标函数是取这两个方向语言模型的最大似然。预训练完成后,ELMo通过公式将双向语言模型的每一中间层进行求和,最简单的也可以只使用最高层的表示作为ELMo。在进行有监督的NLP任务时,可以直接将ELMo作为特征拼接到具体的任务模型的词向量输入或最高层表示上。不同于传统的词向量,ELMo通过预训练好的双向语言模型获取上下文相关的当前词表示(对于不同上下文的同一个词的表示是不同的),再将其作为特征加入到具体的NLP有监督模型中。

2.3 实验

实验显示,在六个NLP任务上,ELMo均带来了显著提升,平均提升了约2个百分点,且最终结果都超过了先前的最佳水平。此外,使用所有层的效果比只使用最后一层的效果更好。至于输入层是否添加ELMo,不同任务的效果可能有所不同。

3. OpenAI GPT

3.1 引言

另一篇论文《Improving Language Understanding by Generative Pre-Training》由OpenAI团队发布,其目标是学习一个通用的表示,可以在多个任务上应用。这篇论文的主要亮点在于,他们使用Transformer网络替代了LSTM,更好地捕获长距离的语言结构。在进行具体的有监督任务微调时,他们使用语言模型作为辅助任务训练目标。最终,他们在十二个NLP任务中进行了实验,九个任务达到了最佳水平。

3.2 方法

首先,我们来看一下他们无监督预训练时的语言模型。他们依旧使用标准的语言模型目标函数,即通过前k个词预测当前词,但在语言模型网络上,他们使用了谷歌团队在《Attention is All You Need》论文中提出的Transformer解码器。Transformer模型主要通过自注意力机制实现,这里不再赘述,有兴趣可以查看论文或参考我的博客。

在具体NLP任务的有监督微调时,OpenAI GPT不需要重新构建任务模型结构,而是直接在Transformer语言模型的最后一层接上softmax作为任务输入层,然后对整个模型进行微调。他们发现,如果使用语言模型作为辅助任务,可以提升有监督模型的泛化能力和收敛速度。由于不同NLP任务的输入格式不同,因此在Transformer模型的输入上也有相应调整。具体如下图所示:

  • 对于分类任务,直接输入文本。
  • 对于文本蕴含任务,需要将前提和假设用分隔符拼接后输入。
  • 对于文本相似度任务,需在两个方向上都使用分隔符拼接后输入。
  • 对于问答多选任务,需将每个答案与上下文拼接后输入。

3.3 实验

下面是不同NLP任务上的实验结果。

  • 语言推理任务

  • 问答和常识推理任务

  • 语义相似度和分类任务

可以看出,在多个任务上,OpenAI GPT的表现优于ELMo。通过消融实验可以看到,去掉预训练部分后,所有任务都大幅下降,平均下降了14.8%,说明预训练非常有效。在大数据集上使用语言模型作为辅助任务效果更好,而在小数据集上则不然。用LSTM代替Transformer会导致结果平均下降5.6%,这也反映了Transformer的优越性。

4. BERT

4.1 引言

上周,Google发布了他们的语言模型预训练方法,引起了广泛关注。这篇论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》介绍了BERT方法。这篇论文将预训练语言表示方法分为基于特征的方法(如ELMo)和基于微调的方法(如OpenAI GPT)。目前这两种方法在预训练时都是使用单向语言模型来学习语言表示。这篇论文证明了使用双向预训练效果更好。整体框架与GPT相似,但有进一步发展。具体来说,他们使用Transformer编码器作为语言模型,在预训练时提出了两个新任务(即掩码语言模型MLM和下一句预测任务),最终在十一个NLP任务上达到了最佳水平。

4.2 方法

在语言模型上,BERT使用的是Transformer编码器,并设计了一个较小的基础结构和一个较大的大型网络结构。对比三种语言模型结构,BERT使用的是Transformer编码器,由于自注意力机制,模型各层之间完全互连。而OpenAI GPT使用的是Transformer解码器,它是一个需要从左到右的受限Transformer,ELMo使用的是双向LSTM,尽管是双向的,但只是在两个单向LSTM的最高层进行简单的拼接。因此,只有BERT在模型的所有层中真正实现了双向。

在模型输入方面,BERT进行了更多细节处理。他们使用WordPiece嵌入作为词向量,并加入了位置嵌入和句子分割嵌入。在每个文本输入前加入了一个分类向量,后面可用作分类任务的向量。

在语言模型预训练上,他们不再使用标准的从左到右预测下一个词作为目标函数,而是提出了两个新任务。第一个任务称为MLM,即在输入词序列中随机屏蔽15%的词,任务是预测这些被屏蔽的词。相比传统的语言模型预测目标函数,MLM可以从任何方向预测这些被屏蔽的词,而不仅仅是单向的。然而,这样做会导致两个问题:一是预训练时使用[MASK]符号屏蔽词,在微调阶段没有[MASK]符号,会造成不匹配;二是预测15%的词而不是整个句子,使得预训练的收敛变慢。但对于第二点,作者认为虽然收敛变慢,但效果提升较为明显可以弥补。

对于第一个问题,他们采用了下面的技巧来缓解:不是总用[MASK]替换被屏蔽的词,在10%的时间用一个随机词替换,在另外10%的时间用原词本身。

对于传统的语言模型,没有考虑到句子间的关系。为了使模型能学习到句子间的关系,作者提出了第二个任务,即下一句预测任务。这是一个二分类任务,50%的时间输入一个句子及其下一句的拼接,标签为正例;另外50%的时间输入一个句子及其非下一句的随机句子拼接,标签为负例。整个预训练的目标函数是这两个任务的联合似然函数。

在微调阶段,不同任务的模型略有不同,仅在输入层有所区别,然后对整个模型进行微调。

4.3 实验

以下是不同NLP任务上BERT的效果。

  • GLUE结果

  • QA结果

  • 实体识别结果

  • SWAG结果

可以看出,在所有NLP任务上,BERT都达到了最佳水平,且相比ELMo和OpenAI GPT的效果提升明显。

在预训练实验分析中,可以看到本文提出的两个目标任务的作用显著,尤其是在MLM任务上。

作者还做了模型规模的实验,发现大规模模型效果更好,即使在小数据集上也是如此。

此外,作者还进行了将ELMo作为特征加入的实验,从下图可以看到,将ELMo作为特征加入的最佳效果达到96.1%,接近微调的96.4%,说明BERT对基于特征和基于微调这两种方法都有效。

5. 总结

总的来说,与传统的词向量相比,使用语言模型预训练可以视为一种句子级别的上下文词表示,它可以充分利用大规模单语语料,并对一词多义进行建模。从后两篇论文可以看出,通过大规模语料预训练后,使用统一模型或直接将特征加入到一些简单模型上,可以对各种NLP任务取得较好的效果,这在一定程度上缓解了具体任务对模型结构的依赖。在许多评估指标上,这些方法都达到了最佳水平。ELMo提供了官方网站供用户使用。然而,这些方法在时间和空间复杂度上较高,尤其是BERT,在论文中他们使用16个TPU训练基础版本需要4天时间,使用64个TPU训练大型版本也需要4天。对于一般条件下的一个GPU,训练可能需要一年时间。此外,这些方法中存在许多工程细节,细节处理不当会影响效果。

参考文献

  1. Peters, M. E. et al. Deep contextualized word representations. NAACL (2018).
  2. Radford, A. & Salimans, T. Improving Language Understanding by Generative Pre-Training. (2018).
  3. Devlin, J., Chang, M.-W., Lee, K. & Toutanova, K. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. (2018).
  4. Peters, M. E., Ammar, W., Bhagavatula, C. & Power, R. Semi-supervised sequence tagging with bidirectional language models. ACL (2017).
本文来源: 图灵汇 文章作者: 六六创意