模型学习笔记(3):BERT

本文详细介绍了BERT模型,重点讨论了其双向预训练任务,包括Masked Language Model和下一句预测,以及在GLUE、SQuAD等任务上的优秀表现。BERT模型结构为多层Transformer编码器,输入数据通过特殊标记处理,预训练和微调过程中展现出双向上下文理解的重要性。
摘要由CSDN通过智能技术生成

BERT 学习笔记

本部分来源于论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》 (arXiv: 1810.04805)

0 摘要

语言表示模型 —— BERT:Bidirectional Encoder Representations from Transformers(来自Trabsformer的双向编码表示)。BERT被设计成通过在所有层共同调节包括左右的上下文来预训练深度双向表示,因此只需一个输出层,就可以对预先训练好的BERT模型进行微调来得到最先进的模型,而不需要对特定的任务进行实质性的修改。

1 介绍

目前有两种把预训练模型应用到任务的思路:

  • 基于特征 feature-based
  • 微调 fine-tuning

它们都是使用单向的语言模型来学习一般的语言表示。作者认为当前的技术严重(特别是对于微调类的)预训练表示模型的能力,主要的限制是因为他们是单向的,这就限制了在预训练中使用的模型结构。

Masked Language Model(MLM):随机在输入中掩盖一些单词,目的是根据被掩盖的词的上下文来预测被掩盖的词。和从左到右的预训练语言模型不同,MLM允许表示融合向左和向右的上下文,这就可以预训练一个深层双向的Transformer。除此之外,作者还介绍了一个“预测下一句”的联和预训练文本对表示的任务。

作者贡献如下所示:

  • 论证了双向预训练对语言表达的重要性。不像那些用单向模型来进行预训练,BERT材料 MLM 来预训练深度双向表示,这也和独立训练从左到右以及从右到左的LMS浅链接不同。
  • 表明了预训练表示消除了许多繁重工程特定任务的体系结构的需求。
  • 证明了在这个模型里,双向性质是最重要的新贡献。

2 相关工作

  • Feature-based 方法
  • Fine-tuning 方法
  • Transfer Learning from Supervised Data

3 BERT

首先介绍BERT的体系结构和输入表示,然后介绍预训练任务,最后套路BERT和OpenAI GPT的不同。

3.1 模型结构

BERT的模型结构是一个多层双向Transformer编码器。如图一所示,BERT使用双向Transformer,GPT使用从左到右的Transformer,ELMo则独立训练从左到右和从右到左的LSTM。

作者主要以 B E R T L A R G E : L = 24 , H = 1024 , A = 16 , T o t a l   P a r a m e t e r s = 340 M BERT_{LARGE} : L = 24,H = 1024,A = 16,Total~Parameters = 340M BERTLARGE:L=24,H=1024,A=16,Total Parameters=340M 网络进行实验,其中:

  • L 是层数
  • H 是隐藏层的大小
  • A 是 self-attention 头的数量
  • Total Parameters 是一共需要训练的参数数量

Figure 1

3.2 输入数据的表示

输入表示能够以一个标记序列清楚的表示单个文本句或者一对文本句(如{question,answer})。而对于给定的标记,他的输入表示通过对相应的标记、部分以及嵌入的位置求和来构造。图二给出了输入数据表示的可视化表示。

Figure 2

  • 每个序列的第一个标记是特殊的分类嵌入(CLS),最后的隐藏状态(如transformer的输出)相当于该标记用于分类任务的总序列表示,对于不分类的任务,忽略这个向量。
  • 句子对被组合成一个序列。作者采用两种方法来区分,首先用一个特殊的标记(SEP)将他们分开,然后将一个学习过的句子A嵌入到第一个句子的每个标记中,然后把一个句子B嵌入到第二句的每个标记中。
  • 对于单句,只是用句子A嵌入。

3.3 预训练任务

使用两个新的无监督预测任务对BERT进行预训练。

3.3.1 任务一:Masked LM

直观上有理由相信深度双向模型比单纯的从左到右或者从右到左的模型更加强大。但是问题在于标准条件语言模型只能训练为从左到右或者从右到左,因为双向模型会导致每个单词在多层上下文中间接的看到自己。

因此,为了训练一个深层的双向表示模型,作者采用了一种直接的方法,即按照百分比随机的屏蔽一些输入字符,然后只预测这些被屏蔽的字符。作者把这个模型称之为 Masked LM(MLM),也就是大家经常说的完形填空。和标准LM一样,和被屏蔽的字符对应的最终隐藏层的向量通过词汇表被映射到一个softmax输出中。在实验中作者屏蔽了15%的字符,然后只是预测被屏蔽的字符而不是整个输入。

这个模型存在两个缺点:

  • 这造成了在预训练和微调(fine-tuning)之间的不匹配,因为在微调期间模型有可能从未见过被[mask]的字符。因此,训练数据生成器首先随机选择15%的字符,然后80%的情况用 [MASK] 替换字符,10%的情况用随机的字符替换字符,10%的情况不替换字符。这样做的目的是让表示偏向实际观察到的字符。因此,Transformer编码器不知道他会被要求预测哪些单词,或者哪些单词已经被替换了,因此它必须保留输入字符的上下文表示。
  • 由于每次只有15%的字符被掩盖,因此模型需要更多的训练步骤来收敛。在5.3中作者证明了虽然比从左到右的模型收敛要慢一些,但是其带来的改进远超过了增加的训练成本。
3.3.2 任务二:下一句预测

为了训练一个理解句子关系的模型, 预训练了一个可以从任何单词语料库中轻松生成的二值化的下一句预测任务。具体来说,在为每个预训练例子选择句子A和B的时候,B有50%的几率是A的下一句,50%的几率是随机抽取的句子。例如:

Input1 :

[CLS] the man went to [MASK] store[SEP]

he bought a gallon [MASK] milk [SEP]

Label1 :

IsNext

Input2 :

[CLS] the man went to [MASK] store[SEP]

penguin [MASK] are flight ## less birds [SEP]

Label2 :

NotNext

最终预训练模型在这个任务中达到了97% - 98% 的准确率。在5.1中演示了针对该任务的预训练对 QA(问答系统) 和 NLI(自然语言推理) 都非常有益。

3.4 预训练步骤

为了生成每个训练输入序列,首先从语料库中抽取两端文本作为样本,称之为句子(尽管它们通常比句子长的多)。第一个句子接收A嵌入第二个接收B嵌入。50%的几率B是A的下一句50%的可能是是随机的。LM的掩码率是15%,在字词符号化之后使用。

使用GELU激活而不是RELU,遵循OpenAI GPT。训练损失是平均MLM似然和下一句预测似然之和。

3.5 微调(Fine-tuning)步骤

为了获得输入序列固定维度的池表示,作者取最后一层隐藏层(也就是Transformer的输出)在输入的第一个标记,也就是那个为了与[CLS]字嵌入而构造的标记。把这个向量标记为 C ∈ R H C \in \mathbb{R}^{H} CRH 。微调过程中唯一添加的新参数是用于分类层的 W ∈ R K × H W \in \mathbb{R}^{K \times H} WRK×H ,其中 K K K 是要分类的类数目。类的概率 P = R K P = \mathbb{R}^{K} P=RK 被用一个softmax函数计算, P = s o f t m a x ( C W T ) P = softmax\left( CW^{T} \right) P=softmax(CWT) 。BERT 和 W W W 的所有参数都进行微调来适应正确标签的最大对数概率。

对于微调过程中,除了批次大小、学习率和训练周期之外,其他的参数都和预训练相同。dropout 概率保持 0.1 。针对特定的任务会有不同的最优选择,但是作者发现下列的参数有很好的跨任务适应性:

  • batch size : 16,32
  • Learning rate : 5e-5,3e-5,2e-5
  • Number of epochs : 3,4

与小数据集相比,大数据集对超参数的选择要更不敏感。

3.6 BERT 和 OpenAI GPT 的比较

  • GPT在 BooksCorpus(800M words)上训练,BERT 在 BooksCorpus(800M words) 以及 Wikipedia (2500M words)上进行训练
  • GPT只在微调过程中使用分隔符[SEP]和分类标记[CLS],而BERT在预训练过程中使用。
  • GPT训练了1M步,训练批次大小是32000词;BERT训练了1M步,训练批次大小是128000词。
  • GPT对于所有的微调任务都使用 5e-5 的学习率,BERT则针对不同的任务选择表现最好的学习率。

4 实验

作者在11个NLP任务上执行了BERT微调模型,结果如下。

4.1 GLUE 数据集

  • MNLI 给定一对句子,需要预测第二句相对于第一句是蕴含的、矛盾的还是中立的。
  • QQP 确定Quora上的两个问题的语义是否相同
  • QNLI 问题自然语言推理。一个二元分类任务,正例是包含正确答案的句子对,错例则是在同一段内不包含正确答案的句子对。
  • SST-2 从电影评论中截取的带有人类感情标注的句子对。
  • CoLA 预测一个英语句子是否是语言学可接受的
  • STS-B 从新闻标题和其他来源得到的句子对,按1-5分来评价他的相似程度。
  • MRPC 由人工标注在语义上是否等价的句子对
  • RTE 与MNLI类似的任务
  • WNLI 一个小型的自然语言推理数据集。
4.1.1 GLUE 结果

Table 1

有趣的是, B E R T L A R G E BERT_{LARGE} BERTLARGE在所有任务中都显著优于 B E R T B A S E BERT_{BASE} BERTBASE,即使是那些训练数据很少的任务。

4.2 SQuAD v1.1

斯坦福问答数据集(SQuAD)是10万对众包问答对的集合。

Table

4.3 命名实体识别

略。

4.4 SWAG

给定视频字幕数据集中的一句话,任务是在四个选项中选择最合理的延续。

5 模型简化测试

对BERT的多个方面进行模型简化实验,以便更好地理解它们的相对重要性。

5.1 预训练任务的影响

作者认为BERT相对于之前的工作的一个最重要的改进是通过MLM预训练实现的深层双向性。因此,作者进行了如下的比较:

  • 1 No NSP :具有“masked LM”但是没有"next sentence prediction"(NSP)的模型。
  • 2 LTR & No NSP :模型采用从左向右的语言模型(LTRLM)而不是(MLM)。预测每个输入单词而不应用masked。

Table

结果发现取消NSP对 QNLI MNLI和SQuAD都有明显的影响。LTR模型在所有的任务上表现得都比MLM模型要差。

5.2 模型大小的影响

更大的模型导致所有四个数据集的精度都有严格的提高,即使对于只有3600个标记的训练示例的MRPC来说也是如此,而且与训练前的任务有很大的不同。多年来,人们已经知道,增加模型的大小将导致大规模任务的不断改进,如机器翻译和语言建模。然而,这是第一次证明,如果模型已经经过充分的预训练,向极端模型大小的扩展也会在非常小的规模任务上带来巨大的改进。

5.3 训练步数的影响

Figure 4

5.4 采用BERT的基于特征的方法

Table

6 结论

最近由语言模型转移学习带来的经验改进表明,丰富的、无监督的预训练是许多语言理解系统的组成部分。特别是,这些结果使得即使是低资源的任务也可以从非常深的单向体系结构中获益。主要贡献是进一步将这些发现推广到深层双向架构中,允许相同的预训练模型成功地处理广泛的NLP任务。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值