五、BERT

  1. 将预训练模型用于下游任务有两种策略:

    • 基于微调的策略。如 GPT,通过简单微调预训练模型的参数来训练下游任务。

      该策略在预训练期间通过单向语言模型来学习通用语言representation,而单向语言模型严重限制了预训练模型的表达能力。

      例如,在token 级别的任务(如:词性标注任务),结合两个方向的上下文对模型性能非常重要。

    • 基于特征的策略。如 ELMo ,将预训练模型的representation 作为下游任务模型的额外特征。

      该策略虽然是双向语言模型,但是该模型是浅层的。

    与它们不同,BERT:Bidirectional Encoder Representations from Transformers 是一个同时利用了左右双向上下文的、深度的预训练模型,它在11项 nlp 任务中取得最领先的结果。

  2. 基于特征的方法具有一定优势:

    • 并不是所有的 NLP 任务都可以很容易地用 Transformer encoder 架构来表示,因此需要添加特定于任务的模型架构。
    • 如果通过训练数据预先计算一次昂贵的数据表示,然后在该表示的基础上用廉价的模型来完成许多任务,这会带来很大的计算优势。
  3. 单向语言模型可以是从左到右 Left to Right:LTR 或者从右到左 Right to Left :RTL

    BERT 也可以像 ELMO 一样训练独立的 LTRRTL 模型后拼接在一起,但是这么做有两个问题:

    • 其训练代价是单个双向模型的两倍。
    • 对于Question - Answer 之类的问题是反直觉的,因为 RTL 模型需要根据答案来反推问题。
    • BERT 可以自由的组合左侧上下文和右侧上下文。

5.1 预训练

  1. BERT 预训练模型包含两个预训练任务:预测被屏蔽的单词、预测下一个句子。

  2. BERT 的预训练语料库必须使用 document-level的语料库,而不是经过混洗的 sentence-level 的语料库。因为混洗句子会破坏句子预测预训练任务。

    • 这里的 “句子” 不一定是真实的句子,而是一段话或者几段话,代表了一个 token 序列。
    • BERT 预训练时,每个 ”句子“ 的 token 长度小于等于 512 。
  3. BERT 的训练语料库经过了 WordPiece 词干化。如:

    1. 原始: He is an engineer
    2. WordPiece词干化: He is an engine ##er

    在 ”预测被屏蔽的单词“ 任务中,无需预测单词片段 ##er

  4. BERT 预训练采用 gelu 激活函数,训练一百万步,bath size = 256

5.1.1 MLM

  1. 受完形填空任务启发,BERT 通过提出一个新的预训练目标来解决前面提到的单向限制:掩码语言模型masked language model:MLM

  2. 从直觉上,深度双向模型要比深度单向模型、单层双向模型表达能力更强。

    • 标准的条件语言模型只能从左到右或者从右到左训练,因为双向条件作用允许每个单词在多层上下文中间接“看到自己”。

    • MLM 模型从输入中随机屏蔽一些token,目标是基于上下文预测被屏蔽单词。方法是:将被屏蔽的单词替换为 [MASK] 标记,然后被屏蔽的单词作为真实 label

      与单向语言模型不同,MLM 结合了左右两侧上下文。

  3. 为了训练 MLM,模型随机屏蔽一定百分比(论文中为 15%)的 token,然后仅预测那些被屏蔽的 token

    这种方式有两个缺陷:

    • 预训练和微调之间的不匹配。因为在微调阶段,模型永远不会看到 [MASK] 标记。

      为了缓解这种状况,MLM 在预训练时并不总是用真的 [MASK] 标记,而是从输入种随机选择 15%token80% 替换未 [MASK] 标记,10% 替换为一个随机单词,10% 保持原样。

      MLM 并不知道哪些词被替换,因此它总是努力的学习每个单词的正确表达。

      1. my dog is hairy -> my dog is [MASK] // 80% 概率
      2. my dog is hairy -> my dog is test // 10% 概率
      3. my dog is hairy -> my dog is hairy // 10% 概率
    • 每个 batch 预测的 token 只有 15%,这意味着模型需要更多的训练步才可能收敛。

      实验证明MLM 的收敛速度确实比单向语言模型稍慢,但是相对于 MLM 的泛化能力的提升,这种代价是值得的。

5.1.2 NSP

  1. 许多重要的下游任务,如:知识问答和自然语言推理,都是基于理解两个句子之间的关系,而这种关系不是由语言模型直接捕获的。

    为了训练理解句子关系的模型,BERT 训练一个二元化的句子预测任务,称作Next Sentence Prediction:NSP

    • 每个训练样本由一对句子 AB 组成:50% 的样本中 B 是紧跟在 A 之后的句子,50%的样本中二者是随机挑选的。
    • 模型需要预测的是 B 是否是 A 的下一个句子。

    如:

    1. Input1 = [CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]
    2. Label1 = IsNext
    3. Input2 = [CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]
    4. Label2 = NotNext

5.2 模型结构

  1. BERT 采用双向 self-attentionTransformer 来构建。

    双向 self-attentionTransformer 也称作 Transformer encoder,而单向 self-attentionTransformer 被称作 Transformer decoder

  2. BERT 有两种尺寸:令 BERT 层数为 五、BERT - 图1 ,每层每个隐向量的维度均为 五、BERT - 图2self-attentionhead 数为 五、BERT - 图3BERT 将所有前馈层和 filter 层的维度设为 五、BERT - 图4

    • 五、BERT - 图5五、BERT - 图6 ,模型参数数量为 110 M

      其模型大小与 GPT V1 大小几乎相同。选择这组参数的目的是为了与 GPT V1 进行更好的比较(OpenAI GPT V1 模型的参数也是 L=12,H=768,A=12 )。

    • 五、BERT - 图7五、BERT - 图8,模型参数数量为 340M

    五、BERT - 图9

  3. BERT 的模型输入能够表达单个句子或者一对句子。

    • 每个 token 的输入 representation 由三个部分相加而成:token embeddingsegment embeddingposition embedding

    • 每个序列的第一个 token 是一个特殊的[CLS]。网络最后一层对应于该位置的一个隐向量作为整个序列的 representation 来用于分类任务。

      对于非分类任务,该隐向量被忽略。

    • 如果是一对句子,则在句子之间插入特殊的 token[SEP] 。然后对句子的前后关系学习一个segment embedding

      • 前一个句子的每个 token 学习和使用 A embedding,代表前后关系的 “前关系” 的表达。
      • 后一个句子的每个 token 学习和使用 B embedding,代表前后关系的 “后关系” 的表达。

      通过这种方式,模型得以学习和区分两个句子的前后关系。

    • 对于单个句子,模型仅学习和使用 A embedding

    • position embedding 是模型学习和使用的 input 每个绝对位置的表达。

    • token embedding 是模型学习和使用的每个 token 的表达。

    五、BERT - 图10

5.3 微调

  1. 对于句子级别的分类任务,微调方式为:

    • 取得预训练模型对应于 [CLS] 位置的最后一层隐向量 (一个 H 维的向量) 作为整个句子的 representation

      如果是句子对,则在两个句子之间插入分隔符 [SEP]

    • 增加一个 softmax 输出层,将该隐向量作为输出层的输入,输出为样本对应于各分类类别的概率。

    此时新增 softmax 输出层仅仅需要训练额外的权重矩阵 五、BERT - 图11 ,其中 五、BERT - 图12 为分类类别的数量。

    五、BERT - 图13

  2. 文本区间预测任务:给定一个问题和一段话,任务目标是预测正确答案在该段话中的区间位置。

    假设问题为 Q,包含 Ntoken; 段落为 A,包含 MtokenBERT 在微调期间:

    • 首先将问题和段落通过分隔符 [SEP] 拼接在一起:Q [SEP] A
    • 然后模型需要预测段落 A 的第 itoken 分别为答案开始、结束的位置。

    设起始向量 五、BERT - 图14、终止向量 五、BERT - 图15,这两个向量是模型需要学习的参数。设段落 A 的第 itoken 的输出向量为 五、BERT - 图16,则该单词为答案开始、结束的概率分别为:

    五、BERT - 图17

    预测的区间开始和结束为:

    五、BERT - 图18

    • 训练期间,训练目标为最大化开始 + 结束的最大似然:

      五、BERT - 图19

      其中:

      • 五、BERT - 图20 表示训练集中的第 五、BERT - 图21 个样本的序列、答案在段落中的开始位置、答案在段落中的结束位置
      • 五、BERT - 图22 表示第 五、BERT - 图23 个样本预测到段落位置 五、BERT - 图24 为答案开始位置的概率
      • 五、BERT - 图25 表示第 五、BERT - 图26 个样本预测到段落位置 五、BERT - 图27 为答案结束位置的概率
    • 由于模型并未对预测的结束位置和开始位置施加约束,因此推断期间可能发生结束位置在前、开始位置在后的违反常理的情形。

      因此 BERT 在推断期间增加强制约束:结束在开始之后,即 五、BERT - 图28

    五、BERT - 图29

  3. 命名实体识别 NER 任务是为了评估模型的 token tagging 能力。

    BERT 微调阶段增加一个 softmax 输出层,然后获取最后一层每个位置 五、BERT - 图30 的隐向量 五、BERT - 图31 ,并将该隐向量作为输出层的输入,输出为 token i 属于各NER label 的概率。

    注意:这里隐含假设每个 tokenNER label 与周围其它单词无关。

    五、BERT - 图32

  4. 在微调阶段,除了 batch size、学习率、训练 epoch 不同之外,其它训练参数与预训练阶段的训练参数相同。

    • 微调阶段通常很快,因此建议对超参数进行彻底搜索并选择在验证集上表现最好的模型。

    • 论文发现:数据集越小,模型性能对超参数的选择越敏感。

      大数据集(超过10万的标记样本)对超参数的敏感性要低的多。

5.4 性能

  1. BERT 中的一些设计被有意选择为尽可能接近GPT,从而方便二者的比较。二者除了在结构上不同以外,在预训练阶段还有以下不同:

    • GPTBooksCorpus800M 单词)上预训练,BERTBooksCorpusWikipedia2500M 单词)上预训练。
    • GPT 预训练100万步,32000 token/batchBERT 训练 100 万步,128000 token/batchbatch size=256 sentence,一个序列包含 512 token ) 。
    • GPT 仅仅在微调阶段引入句子分隔符[SEP] 和分类符 [CLS] ,而 BERT 在预训练阶段就引入 [SEP],[CLS] 以及句子词序 A/B 从而学习它们的 embeding
    • GPT 对所有的微调任务都使用 5e-5 的学习率,而BERT 根据不同任务的验证集来选择合适的学习率。

5.4.1 文本分类任务

  1. GLUE 数据集:通用语言理解评估General language Understanding Evaluation:GLUE 基准是一组各种 NLP 文本任务。

    • 大多数GLUE 数据集已经存在多年,而GLUE 将它们收集在一起的目的是:

      • 为这些数据集建立统一的训练集、验证集、测试集拆分标准。
      • 用一个标准的 evaluation 服务器来缓解 evaluate 不一致,以及测试集过拟合的问题。
    • GLUE 不给测试集打标签,用户必须将测试结果上传到 GLUE 服务器进行评估(但是提交次数有限)。

    • GLUE 基准包含以下数据集:

      • Multi-Genre Natural Language Inference:MNLI:大规模的、众包的蕴含分类任务。

        给定一对句子,其目标是预测第二句相对于第一句是蕴含句entailment、矛盾句、还是中性句。

      • Quora Question Pairs:QQP:一个二元分类任务。

        给定一对 Quora 上的两个问题,其目标是预测它们在语义上是否等价。

      • Question Natural Language Inference:QNLI:斯坦福 Question Answering 数据集的一个转换为分类任务的版本。

        正类样本由问题和正确答案组成,负类样本由问题和非正确答案组成,其中非正确答案来自于同一段文本。

      • Stanford Sentiment Treebank:SST-2:一个二元单句分类任务。

        其数据集从电影评论中提取的句子组成,由人类对其进行二元情感标注。

      • Corpus of Linguistic Acceptability: CoLA :一个二元单句分类任务。

        其目标是预测一个英语句子是否在语法上可接受的。

      • Semantic Textual Similarity Benchmark : STS-B:一个句子相似度多元分类任务。

        其数据集从新闻标题和其它数据源提取的句子对,通过人工来标记一对句子在语义上的相似得分(1分到5分)。

      • Microsoft Research Paraphrase Corpus:MRPC:一个句子相似度二元分类任务。

        从在线新闻数据源抽取的句子对,由人工标记一对句子是否语义上相等。

      • Recognizing Textual Entailment: RTE:类似 MNLI 的二元蕴含关系任务,但是RTE 数据集规模更小。

      • Winograd NLI:WNLI:一个小型的自然语言推理数据集。

        GLUE 网页指出该数据集有问题:所有提交上来的结果都不如 baseline(仅仅将结果预测为训练集中出现次数最多的类别)。因此 BERT 并未评估该数据集。

  2. BERT 在所有 GLUE 任务上选择 batch size=32, epoch = 3,学习率根据验证集的效果在 5e-5, 4e-5,3e-5, 2e-5 中选择最好的那个。

    注意:五、BERT - 图33 在小数据集上的微调效果可能不稳定(发生过拟合),此时会进行随机重启,最终选择使得验证集最好的那个随机重启的模型。

    五、BERT - 图34

  3. Situations With Adversarial Generations dataset:SWAG 数据集:包含11.3万组句子对,用于评估常识推理。

    • SWAG 数据集的每个样本是视频字幕数据集中的一个句子,任务是在四个选项中选择最合理的延续。

    • SWAG 任务的微调类似于 GLUE

      • 首先将问题和四个选项给自拼接成一个序列,将每个序列的 [CLS] 对应位置的表达 五、BERT - 图35 作为该序列的整体表达。

      • 然后引入向量 五、BERT - 图36 ,它是模型待学习的参数。将它和第 五、BERT - 图37 个序列的表达 五、BERT - 图38 相乘即可得到评分:五、BERT - 图39

      • 最后对评分归一化即可得到每个选项为正确答案的概率:

        五、BERT - 图40

  4. BERTSWAG 任务上选择 batch size=16, epoch = 3,学习率为 2e-5

    其中 Human performance 是人类在 100 个问题上回答的结果。

    五、BERT - 图41

5.4.2 文本区间预测任务

  1. Standford Question Answering Dataset:SQuAD数据集:包含10万个众包的question-answer 样本。

    • 每个样本包含一个问题以及Wiki 中的、包含答案的一段话,标签信息是人工标注的、从该段话中提取的答案。

      任务目标是:给定一个问题和 Wiki 中的一段话,预测答案在段落中的位置区间。因此该任务是区间预测任务。

    • 考虑到数据的预处理过程(WordPiece 词干化),最终在评估结果时需要将预处理后的答案区间转换为预处理前的答案区间。

  2. BERTSQuAD 任务上选择 batch size = 32, epoch = 3,学习率为 5e-5

    其中:

    • BERT Single 采用单个BERT 模型;BERT Ensemble 使用了 7 个模型的融合,这些模型采用不同的预训练 checkpoints 和不同的微调 seeds
    • + TriviaQA 表示使用 TriviaQA 数据集来扩充训练数据。

    五、BERT - 图42

5.4.3 命名实体识别任务

  1. CoNLL 2003 Named Entity Recoginition(NER) dataset数据集:包含20万个单词的命名实体识别数据集。

    单词被人工标注为:Person, Organization, Location,Miscellaneous 或者 Other (表示非命名实体)。

    考虑到数据的预处理过程(WordPiece 词干化),以 ## 开头的单词片段不需要进行 NER 识别。

  2. BERTCoNLL-NER 任务上的超参数通过验证集来选取,最终给出的 Dev F1, Test F1 是使用最好的超参数、并且在5个随机重启的模型上的平均结果。

    五、BERT - 图43

5.4.4 探索实验

  1. MLMNSP 的效果实验探索结果表明:

    • 单向语言模型在 token-levelspan-level 任务上表现很差。因为token -level 的隐向量无法感知到右侧的上下文信息。
    • NSP 对于句子级别任务的效果提升非常显著。

    这些模型和 五、BERT - 图44 使用相同的训练语料、微调方式 和Transformer 超参数。其中:

    • No NSP:使用了 MLM 但是未使用 NSP

    • LTR & No NSP:使用了单向 LTR 的语言模型,而不是MLM,也未使用 NSP。其结构类似 GPT 1.0

      同时在微调阶段也使用LTR 而不是双向的。因为实验发现:单向的训练双向的微调导致效果较差。

    • + BiLSTM :在 LTR + No NSP 的微调阶段在模型头部添加一个随机初始化的 BiLSTM

    五、BERT - 图45

  2. 对预训练步数的实验探索结果表明:

    • BERT 需要大量的训练步从而产生一个更好的效果。
    • 双向语言模型(MLM) 比单向语言模型(LTR)收敛速度稍微慢一点,但是其微调能力几乎一开始就强于单向语言模型模型。

    其中每个训练步的模型是从训练过程中生成的 checkpoint 提取出来的。

    五、BERT - 图46

  3. 对模型尺寸的实验探索表明:BERT 模型越大,效果越好。

    其中: #L 表示层数,#H 表示隐向量的维度,#A 表示attention headsLM(ppl) 表示MLM 困惑度。

    结果是微调阶段经过5次随机重启的验证集平均准确率。

    五、BERT - 图47

  4. BERT 应用于基于特征的策略而不是基于微调的策略表明:BERT 在基于微调和基于特征的方式上都能够取得很好的效果。

    这里基于特征的方式为:将 BERT 的一个或多个层的隐向量采取类似于 ELMO 的方式灌入到一个两层 768 维度的BiLSTM

    五、BERT - 图48