BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 论文解读

2023-10-30

BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding

【写在前面】现有的预训练语言表示的方法主要有两种,一种是feature-based,另一种是fine-tuning。BERT则是由谷歌提出的一种基于fine-tuning方法的预训练模型,BERT一经提出便引起了巨大反响。本文主要是作者在阅读BERT论文原文所做的笔记,简单记录下来供大家参考。
本论文发表于NAACL2019,属于NLP方向的顶会,但是目前在CCF评级中为C类会议,还是希望广大华人冲进NAAClL,争取提高该会议的评级,Fighting~

论文地址:https://arxiv.org/pdf/1810.04805.pdf
论文源码:https://github.com/tensorflow/models/tree/master/official/nlp [Tensorflow版本]
https://github.com/huggingface/transformers [Pytroch版本]

1. BERT模型

BERT模型主要分为两步:pre-trainingfine-tuning。在pre-training阶段,模型在不同的预训练任务上的无标签数据进行训练;在fine-tuning阶段,BERT会首先初始化预训练参数,然后在各种下游任务中使用有标签任务进行微调。BERT的特点就是在不同的任务上使用统一的架构
在这里插入图片描述
Model Architecture

BERT的内部结构是一个多层双向Transformer encoder。在该部分,定义了Transformer blocks的数量为 L L L,hidden size 为 H H H,self-attention的头数量为 A A A。论文提出了两套模型,其大小不一样:

B E R T b a s e ( L = 12 , H = 768 , A = 12 , T o t a l p a r a m e t e r s = 110 M ) BERT_{base}(L=12, H=768, A=12, Total \quad parameters = 110M ) BERTbase(L=12,H=768,A=12,Totalparameters=110M)

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 \quad parameters=340M) BERTlarge(L=24,H=1024,A=16,Totalparameters=340M)
在这里插入图片描述
Input/Output Representations在这里插入图片描述
为了让BERT可以更好地处理各种下游任务,需要在一个token序列的输入表示上明确单个句子和句子对的区别 。在每一个序列的头部加入一个特别的classfication token (CLS),用来表示token的最终隐状态是用来进行分类还是进行聚合序列表示

句子对被打包成一个序列作为输入,可以用两种方法区分两个句子:

1.我们在每个句子后面增加了一个token (SEP) 用以区分两个句子;

2.我们增加了一个额外的学习嵌入(Segment Embeddings),用来表示每个token属于哪个句子。

整体的输入以下三个部分的,如上图所示:

1. Token Embeddings: 每个token的embedding,使用了WordPiece embeddings方式得到30000个词的vector

2. Segment Embeddings: 表明当前token所在哪个句子之中

3. Position Embeddings: 表明每个token在输入序列中的位置

1.1 Pre-training BERT

BERT并没有采用传统的从右向左或者从左向右的语言模型去预训练BERT,而是采用了两个无监督任务,该部分表示了图一中的左边的部分。

Task 1: Masked LM

现有的一些标准条件语言模型仅仅只能采用从左到右或者从右到左的方式进行训练,为了训练深度双向表示,作者以一定百分比(例如15%)随机mask掉一些输入的tokens,然后去预测这些被mask掉的tokens,作者将这种方式命名为“Masked Language Model (MLM)”。在预测的过程中,是将输出经过一个softmax层得到一个与词表长度相同的向量,用来预测masked掉的单词。

这种做法最大的一个缺点是造成pre-training和fine-tuning的不一致性(mismatch),因为[MASK] token是不会出现在fine-tuning阶段的。为了减缓这种不一致,实际上不会总是将masked的位置全部替换成[MASK],而是采用以下三种方式:

(1) 以80%的概率替换为[MASK]

e . g .   m y   d o g   i s   h a i r y   → m y   d o g   i s   [ M A S K ] e.g.\ my \ dog \ is \ hairy \ \rightarrow my \ dog \ is \ [MASK] e.g. my dog is hairy my dog is [MASK]

(2) 10%的概率随机替换字典里的随机字

e . g .   m y   d o g   i s   h a i r y   → m y   d o g   i s   a p p l e e.g.\ my \ dog \ is \ hairy \ \rightarrow my \ dog \ is \ apple e.g. my dog is hairy my dog is apple

(3) 10%的概率就保持不变(信息泄漏,被允许)

e . g .   m y   d o g   i s   h a i r y   → m y   d o g   i s   h a i r y e.g.\ my \ dog \ is \ hairy \ \rightarrow my \ dog \ is \ hairy e.g. my dog is hairy my dog is hairy

这个过程的优点是Transformer encoder不知道它将被要求预测哪些单词或哪些单词已被随机单词所取代,因此它被迫保持每个输入token的分布上下文表示。随机替换占有整个替换的1.5%(15% * 10%),所以不会损害模型的语言理解能力

Task 2: Next Sentence Prediction (NSP)

QA和自然语言推理(NLI)都是基于理解句子之间的关系的,这种关系不能直接从语言模型中提取。为了训练一个可以理解句子关系的模型,作者在单一语料库预训练了一个二值下一个句子预测任务。对于选定的句子A和B,

(1)50%概率中B是A的下一个句子(IsNext),

e.g.
Input = [CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]

Label = IsNext

(2)50%概率是从语料库中随机挑选的句子(NotNext)。

e.g.
Input = [CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]

Label = NotNext

NSP任务与表示学习的目标是非常相关的,但是在之前的工作中,只有句子嵌入被转移到下游任务,但是BERT将所有的参数转移到初始化最终任务模型的参数

Pre-training data

主要采用了现有的文献资料,其中 BooksCorpus(800M),英文维基百科(2500M)。对于维基百科,我们只提取文本段落,而忽略列表、表和标题。

注:Bert中输入句子的长度应该小于等于512 tokens

1.2 Fine-tuning BERT

这里fine-tuning之前对模型的修改非常简单,例如针对 sequence-level classification problem (例如情感分析),取第一个token的输出表示,喂给一个softmax 层得到分类结果输出;对于token-level classification(例如NER),取所有token的最后层transformer输出,喂给softmax层做分类。

总之不同类型的任务需要对模型做不同的修改,但是修改都是非常简单的,最多加一层神经网络即可。如下图所示:

在这里插入图片描述
相关的下游任务:

MNLI: 给定一个句子对,预测第二个句子和第一个句子的关系,entailment, contradiction or neutral

QQP: Quora Question Pairs是一个二分类任务,目标是确定在Quora上问的两个问题在语义上是否等价

QNLI: Question Natural Language Inference 是一个二分类任务,正例是(问题,句子)对,确实包含正确的答案,负例是(问题,句子)从同一段不包含答案。

SST-2: The Stanford Sentiment Treebank 是一个单句二分类任务,由从电影评论中提取的句子,并且人类对它们情感进行注释

CoLA: The Corpus of Linguistic Acceptability 是一个单句二分类任务,其目标是预测一个英语句子在语言上是否“可接受”

STS-B: The Semantic Textual Similarity Benchmark 是从新闻标题和其他来源提取的句子对的集合,它们被注释为1到5的分数,表明这两个句子在语义意义上是多么的相似

MRPC: Microsoft Research Paraphrase Corpus 的句子对会自动从在线新闻源中提取,人类会对这对组合中的句子在语义上是否相等进行标注

RTE: Recognizing Textual Entailment是一项二分类包含任务,与MNLI相似,但是训练数据更少

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

1.3 Comparison of BERT, ELMo ,OpenAI GPT

在这里插入图片描述
BERT、GPT和EMLos的区别:

  • BERT采用了双向的Transformer方式,即后面的词也可以作为前面词的输入;GPT则是采取的从左到右的Transformer形式进行,即后面的词无法作为前面的词作为输入;ELMO使用经过独立训练的从左到右和从右到左的LSTM的连接来生成下游任务的特征
  • BERT 和 Open AI是fine-tuning方法,ELMo是基于特征的方法

BERT和GPT的区别:

  • 训练数据集 GPT在BooksCorpus(800M words),BERT在BooksCorpus(800M words)和Wikipedia(2500M words)
  • 句子分隔方式 GPT只在fine-tuning的时候采用句子分隔符[SEP]和[CLS],BERT在预训练的过程中学习[SEP],[CLS]和句子的嵌入
  • 训练过程批处理大小 GPT训练1M步,批处理大小为32000个words,BERT训练1M步,批处理大小为128000个words
  • 学习率 GPT在fine-tuning的所有实验中使用相同的学习率5e-5,BERT则是选择与任务相关的学习率

1.4 Experiments

在文章中还将BERT在11个NLP任务上进行了实验,发现实验结果比较好,具体的实验结果参见论文原文。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 论文解读 的相关文章

随机推荐