作者:猥琐发育的
公众号:【DarkMythAI】
大模型必读系列01:BERT精读笔记
背景介绍
论文简介
- 论文标题: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- **论文作者:**Jacob Devlin,Ming-Wei Chang,Kenton Lee,Kristina Toutanova,Google AI Language
- 发表时间: 2018.11.11
- 发表平台: NAACL
- **论文链接:**https://arxiv.org/pdf/1810.04805
- **源码链接:**https://github.com/google-research/bert
- **阅读时间:**2024.09.06
论文摘要
文章介绍了一种新型的语言表示模型BERT(Bidirectional Encoder Representations from Transformers,基于Transformer的双向编码器表示)。BERT旨在通过在所有层中同时考虑左右两侧的上下文信息,对未标记的文本进行深度双向预训练表示。因此,预训练的BERT模型可以通过一个额外的输出层对特定的任务进行微调,无需对架构进行大量修改就能提高模型性能。结果显示,BERT在11个NLP任务上都获得了最先进的结果。
论文引言
文章描述了预训练模型应用于下游任务有两种方法,分别是基于特征(ELMo)和微调(OpenAI GPT Model)的方法,并明确目前已有的方法都是使用单向语言模型来学习语言的表示。文章认为单向的语言学习限制了预训练模型的应用能力,特别是基于微调的方法,而BERT模型则是基于微调的方法进行改进的。如下图所示,OpenAI GPT使用的是从左到右(left to right,LTR)架构的Transformer;ELMo使用的是独立训练LSTM,并从左到右和从右到左进行连接,来生成下游任务的特征;而BERT是使用深度双向的Transformer。
论文方法
模型架构
BERT中有两个步骤:预训练和微调。在预训练过程中,模型在不同的预训练任务上对未标记数据进行训练。对于微调,首先使用预训练的参数初始化BERT模型,然后使用来自下游任务的标记数据对所有参数进行微调。另外,BERT采用的是多层双向Transformer Encoder。
预训练任务
BERT使用两种无监督任务进行预训练:
- 掩码语言模型(MLM):随机掩盖输入中的一些token,然后根据上下文预测被掩盖的单词。具体来说,每个序列中随机掩盖15%的WordPiece token,掩盖方式包括80%的时间替换为[MASK] token,10%的时间替换为随机token,10%的时间保持不变。
- 下一个句子预测(NSP):从语料库中随机选择两个句子,50%的时间第二个句子是实际接下来的句子,50%的时间是随机选择的句子。该任务用于训练模型理解句子关系。
输入输出表示
输入表示通过将对应的token Embeddings、分段Embeddings和位置Embeddings相加得到。对于分类任务,使用特殊标记**[CLS]的最终隐藏状态作为聚合序列表示。句子对打包成一个序列,使用特殊标记[SEP]**分隔句子,并为每个token添加一个学习嵌入以指示其属于哪个句子。
实验设置
文章中使用了两种不同尺度的BERT,并在11个NLP任务进行了微调实验,分别为BERTBASE(L=12, H=768, A=12, Total Parameters=110M)和BERTLARGE(L=24,H=1024,A=16, Total Parameters=340M),其中L、H和A分别为Transformer Encoder的层数、隐藏层大小和self-attention头的数量,两者参数量分别为110M和340M。
对比试验
GLUE基准数据集
文章先使用GLUE基准的8个数据集(下载地址:https://github.com/nyu-mll/GLUE-baselines)进行了对比试验,包括:
- MNLI,Multi-Genre Natural Language Inference:一个大规模的、蕴涵分类任务的数据集。即给定一对句子,目标是预测第二个句子相对于第一个句子是蕴涵、矛盾还是中立。
- QQP,Quora Question Pairs:一个二元分类任务的数据集,其目标是确定QQP上提出的两个问题在语义上是否等效。
- 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的二元蕴涵任务。
从下表的结果来看,BERT在所有任务上的表现都大大超过了所有的预训练模型。
SQuAD v1.1数据集
SQuAD v1.1为斯坦福问答数据集数据集(https://huggingface.co/datasets/rajpurkar/squad)是10万个众包问题/答案对的集合,给定一个问题和一段维基百科中包含答案的文章,任务是预测文章中答案的文本跨度。这里文章微调了3个epoch,学习率为5e-5,批大小为32。从下表可以看出,BERT在SQuAD v1.1任务上取得了93.2的F1分数,比现有最佳系统高出1.5 F1分数。
SQuAD v2.0数据集
SQuAD v2.0数据集(https://huggingface.co/datasets/rajpurkar/squad_v2)扩展了SQuAD v1.1问题定义,允许在所提供的段落中不存在简短答案的可能性,从而使问题更加现实。这里文章微调了2个epoch,学习率为5e-5,批大小为48。从下表可知,BERT在SQuAD v2.0任务上取得了83.1的F1分数,比之前最佳系统高出5.1 F1分数。
SWAG数据集
SWAG,对抗世代情境数据集(https://huggingface.co/datasets/allenai/swag)包含113k个句子对补全示例,用于评估基于常识的推理。给定一个句子,任务是从四个选项中选出最合理的延续。这里文章对模型进行了3次微调,学习率为25 -5,批量大小为16。从下表可以看出,BERT在SWAG数据集上取得了86.3的F1分数,比基线ESIM+ELMo系统高出27.1,比OpenAI GPT高出8.3。
消融实验
文章通过使用完全相同的预训练数据、微调方案和超参数来评估两个预训练目标,从而证明了BERT深度双向性的重要性。
模块消融
从下表可以看出,BERT在四项消融实验中的效果都达到了第一,使用MLM架构的BERT在5个NLP任务上都要优于使用LTR架构的BERT。
- 在上面论文方法中就可以知道NSP为BERT两种预训练方法之一,即**“下一个句子的预测”,No NSP即只有MLM**一种预训练方法。
- 在上面论文引言中已经提到了LTR,即OpenAI GPT,从左到右的训练架构。在这里LTR替代了MLM。
- 第四项实验是为了提高仅使用LTR架构的BERT的性能,为其添加了一个随机初始化的BiLSTM,虽然在SQuAD上任务有提高,但是却损害了GLUE任务的性能。
超参数消融
在这组消融实验中,文章通过调整不同的超参数以获取最佳的超参数组合,其中L为Transformer Encoder的层数、H为隐藏层大小和A为Attention的头数量。下表中的LM指的是被遮挡的训练数据的LM困惑,笔者理解为模型参数越多,预测能力就越强,LM越小则是模型对被遮挡的数据预测难度就更小。
基于特征的BERT方法
在这组实验中,文章使用了 CoNLL-2003(https://huggingface.co/datasets/eriktks/conll2003)命名实体识别数据集进行实验。这里文章是这样说的,性能最好的方法将来自预训练的Transformer的前四个隐藏层的token表示连接起来,这只比微调整个模型落后0.3 F1。这表明BERT对于微调和基于特征的方法都是有效的。
结论
本文提出的BERT模型通过深度双向预训练显著提升了多种自然语言处理任务的性能。BERT的核心贡献在于进一步推广了迁移学习的发现,使得相同的预训练模型能够成功应对广泛的NLP任务。BERT的成功表明,深度双向预训练在语言表示方面具有显著优势,并且可以有效地应用于各种下游任务。