0%

论文阅读-pretrained language model-BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

动机

  • 现有的预训练语言模型仅使用单向的语言模型来学习通用的语言表征,限制了预训练模型表征的效果;

贡献

  • 提出了一种新的语言表示模型BERT(Bidirectional Encoder Representations from Transformers),其使用masked language model去训练深度双向表征,论证了双向预训练对语言表征的重要性;
  • 仅通过一个额外的输出层,即可对预训练的BERT进行微调,且刷新了 11 个任务的当前最优结果。

BERT

BERT有两个阶段:预训练和微调。在预训练时,模型基于未标记的数据进行训练;在微调时,首先使用预训练参数进行初始化,然后使用下游任务中的标记数据对所有参数进行微调。

模型结构

BERT的模型结构基于multi-layer bidirectional Transformer encoder。定义Transformer block的数量为 L ,隐层大小为 H ,而self-attention head的数量为 A 。与GPT比较,BERT使用bidirectional self-attention,而GPT使用constrained self-attention(每个token仅关注其左边的上下文)。

在文献中,双向Transformer被称为Transformer encoder,而只关注左侧语境的版本因为可以用于文本生成而被重新定义为Transformer decoderBERTGPTELMo之间的比较如图所示:

如上图,BERT使用双向TransformerGPT使用从左到右的TransformerELMo使用独立训练的从左到右的LSTM和从右到左的LSTM,其中,只有BERT在所有层同时受到左右语境的限制。

输入表示

为了使BERT适应下游任务的输入,BERT的输入形式可以表征单个句子或一对句子。在本文中,作者定义sentence为连续的任意跨度的文本,sequence表示输入BERTtoken序列,可以是单个sentence或一对sentence。输入表示由三部分组成,包括token embeddingsegment embeddingposition embedding。细节如下:

  • 使用含 30000 token词表的WordPiece embedding##表示拆分的token
  • 每个sequence的第一个tokenclassification token([CLS]),该tokenTransformer的输出被用作分类任务中该sequence的表征,对于非分类任务,该隐藏状态被忽略;
  • 句子对则被拼接在一起形成一个单独的sequence,一是使用特殊token([SEP])将其分开,二是为每个token添加一个可训练的segment embedding来区分属于句子 A 或者句子 B ;对于单句输入,则只使用句子 A embedding
  • 使用可学习的position embedding,支持的序列长度最长为 512

预训练阶段

本文不使用传统的从左到右或从右到左的语言模型预训练,而是使用两个无监督任务对BERT进行预训练。

Masked LM

类似于随机划分窗口的CBOW,实现了双向的信息获取

直觉上,深度双向模型比从左到右的模型或从左到右模型结合从右到左模型的浅层连接更强大,但标准条件语言模型只能单向训练,因为双向条件作用将允许每个单词间接see itself,使得在多层上下文中可以轻松预测。

本文采用随机mask一定比例的输入tokens,然后预测这些masked tokens,该任务被称为Masked LM(MLM)或完形填空(Cloze)。在这种情况下,masked tokens对应的最后隐层特征被输入到与词表对应的softmax,目的是生成masked tokens对应的词汇表中的单词。在本文,对每个序列中的tokens随机mask 15\% ,与denoising auto-encoder相比,BERT只是让模型预测被masked的单词,而不是重建整个输入。

虽然该方法可以获得双向预训练模型,但仍具有两个缺点:

  • 预训练和微调时的不匹配,如token [MASK]仅出现在预训练期间,而从不出现在微调阶段。解决方法时对随机选择的 15\% token,不是总用[MASK]替换,而是采用如下操作:

    • 80\% 的情况下,使用[MASK]替换被选择的token
    • 10\% 的情况下,使用随机token替换被选择的token,发生概率只占 1.5\% 也不会过度损害模型的语言理解能力;
    • 10\% 的情况下,保持被选择的token不变,使表示偏向于实际观察到的词。

    这使得Transformer encoder不知道哪些token已经被随机token替换或将预测哪些token,被迫保持每个输入token的上下文表征。

  • 每批数据中只有 15\% tokenmask用来预测,意味着模型需要更多的时间收敛,但实验效果远超过它增加的预训练成本。

Next Sentence Prediction (NSP)

由于许多下游任务(如问答、自然语言推断)等基于理解两个sentence之间的关系,而语言建模无法直接捕捉。

本文训练一个NSP的二分类任务,即对于每个训练示例,选择句子A和句子B 50\% 概率的情况下,BA实际的下一个句子,标记为IsNext 50\% 概率的情况下,B是语料库中的随机句子,标记为NotNext。最终预训练模型训练结果可达到 97\%\sim 98\% 的准确率。

训练过程

预训练过程

数据集:BooksCorpusEnglish Wikipedia(只提取文本段落),文档级别的语料库提取长的连续序列。

输入样本:对于每个输入序列,从语料库中采样两段文本,其中第一个句子为A,另一个句子为B。其中, 50\% 的情况BA实际的下一个句子, 50\% 的情况B是语料库中的随机句子。而MLM时,使用WordPiece序列化句子,并以 15\% 的概率对token进行mask

训练细节:batchsize 256 token长度为 512 ,使用 \text{Adam}(0.9,0.999) 训练 100\text{w} 次迭代,最大学习率为 1e-4 ,在前 10000 步进行warmup,然后线性衰减。 L_2 的权重衰减为 0.01 ,同GPT,网络层使用 \text{rate}=0.1 dropout,及Gelu激活函数。损失函数为MLM的最大似然和NSP最大似然的平均值。

微调过程

对于不同的任务,对最后一层特征的使用方式不同,如图:

其中, (a) (b) 是序列级任务, (c) (d) 是标记级任务。图中 E 表示输入embedding T_i 表示第 i token的上下文表示,[CLS]表示分类输出,[SEP]用于分隔两个序列。

BERTGPT训练过程的比较

  • 预训练数据集不同:GPT使用BooksCorpus(800M)BERT 使用BooksCorpus(800M)Wikipedia(2500M)
  • 输入形式不同:GPT仅在微调时使用句子分隔符[SEP]和分类标记[CLS]BERT在预训练时也使用[SEP][CLS]A/B embedding
  • 预训练的训练时间不同:GPT使用含 32000 个词的batchsize训练1M步,BERT使用含 128000 个词的batchsize训练1M步;
  • 微调的学习率不同:GPT微调时学习率均为 5e-5 BERT 对于特定任务根据验证集选择最优学习率。

部分实验结果

Ablation Study:

  • NSPMLM对预训练模型结果影响很大

    图中,No NSP表示不使用NSP训练模型,LTR & No NSP表示像GPT使用从左到右的语言模型并不使用NSP训练模型,+ BiLSTM表示在LTR & No NSP模型微调时添加一个随机初始化的BiLSTM层。

  • 模型越大,语言模型表征能力越强,对下游任务提升越大

  • 训练步数的影响

    • BERT需要更长时间的预训练来实现更好的微调结果;
    • MLM相比LTR(从做到右的模型)收敛速度更慢,但准确性更高;

BERT预训练模型提取固定特征(Feature-based),进行下游任务训练的结果: