BERT解读(论文 + TensorFlow源码)

N个月前BERT就频繁出现在笔者的视野中,只知道是Google出品的神奇好用的pretrain模型,但一听到要用TPU去训练,就有种“拜拜了您嘞”了感觉。不过看到近期大家在谈论的,在研究的,无一不是围绕BERT等一系列的pretrain模型,不禁感叹大势所趋!近期终于有时间静下心来好好研读这篇论文和它的源码,并记录如下,但毕竟BERT已经出了很久了,各路大神都把它研究得很透彻了,所以如有不周详之处,还望指正~

一. 前言

BERT,全称Bidirectional Encoder Representations from Transformers,是Google在18年11月份推出的一个NLP预训练的模型,它一出现,就横扫各大NLP任务的SoTA,并且Google还良心的放出了源码和预训练模型,可以说是像ImageNet那种里程碑式的突破。

PS:不得不说,这篇BERT的论文,是笔者看过所有关于pretrain的论文里面,思路最清晰,章节安排最符合笔者思维的论文,简直是一口气读完,十分流畅!

那么,这个被神化已久的模型,到底是个啥?下面我们就来一起探索~

二. BERT原理

1. 模型结构

看BERT的全称,其实已经说的很清楚了,是双向Transformer的Encoder,果然还是用了自家提出的、也确实好用的Transformer作为base model。

这里比较新奇的其实是双向模型,笔者之前看的关于pretrain的论文里面,基本都是用单向的模型训练LM,即便是ELMo宣称也是双向,实际上还是独立训练了两个正向和反向的model。那么对于一般LM训练的套路来说,就应该是单向的才对,双向的话,比如将ELMo的双向输出进行拼接后再输入下一层,那么模型在这一层就看到了后面的内容,在训练下一层的时候,后面的不早就已经泄露了,还怎么训练?BERT是如何避免这个问题的?

实际上BERT的双向模型还要得益于它同时定义的MLM任务,是另外一种训练LM的思路,可以双向训练,这个后面会详细提到。

这里Google定义了两种size的BERT模型:

  • B E R T B A S E BERT_{BASE} BERTBASE L = 12 , H = 768 , A = 12 L=12, H=768, A=12 L=12,H=768,A=12,总参数量110M,对标GPT模型
  • B E R T L A R G E BERT_{LARGE} BERTLARGE L = 24 , H = 1024 , A = 16 L=24, H=1024, A=16 L=24,H=1024,A=16,总参数量340M

2. 模型输入

BERT的输入,可以是单句,也可以是两个句子pack在一起,实际上是为了应对不同的任务输入需求,比如有单句的情感分类,也有两句的关系判断等。但在预训练的时候,实际上都是用两个句子pack在一起送进去训练。

具体地,BERT使用BPE作为输入,词表大小30000,最长输入长度是512(为何要定义这个参数?后面在源码部分就可以看到,实际上输入的不是物理上的各个句子,而是长度尽可能达到这个长度的相邻句子组作为一整个句子,为了减少padding的计算浪费!)。

输入的构造方式可用下图来说明:

这里有几个有意思的点:

  1. 第一位放入的是[CLS]标识,用于吸收并作为这整个句子表示的一个特殊timestep,可后续用于分类任务,很机智啊有没有!
  2. 输入都是这种句子pair的形式,那么怎么区分两个句子呢?有两种方式:1)在两个句子的中间加入[SEP]分隔符;2)加上segment embeeding这种东西,明确标识两个句子的id,如果输入一个句子的话,就只使用同一个id即可。

3. 预训练任务

这里其实就是重头戏了,也是BERT整个预训练的精髓所在,它定义了两个任务用来进行预训练的学习,与以往的LM训练十分不同,一个是MLM,另一个是NSP。下面分别介绍:

  1. MLM任务(Maksed LM)

这是能让前面的Transformer模型能进行双向训练的一个重要支撑任务。可以看成是LM的另一种训练方式。

它的思路是:随机mask掉一句话中的某个词,然后让模型同时结合左边和右边的上下文,来预测这个词,其实有点儿像是完形填空。

论文提到每次mask掉一句话中大约15%的bpe token,但考虑到模型可能从来没见过这些mask掉的词,这与真实的finetune任务的输入分布可能会不太一致,所以作者提出了一个“骚”操作,在每次选定一个要mask的词之后:

  • 80%的概率:用[MASK]替换
  • 10%的概率:用随机token进行替换,这里感觉像是加噪声,让模型学习得更鲁棒,而且15%*10%=1.5%的噪声也不太会损伤LM模型的建模能力
  • 10%的概率:维持原样,为了能靠近finetune时的真实分布

论文还提到,这样每次只预测15%的词,会不会模型收敛的很慢?作者霸气的回应:确实会比训练单向的LM要慢,但相比起它的效果增长,慢根本不算什么,是值得的!不愧是Google啊,真·财大气粗!

  1. NSP任务(Next Sentence Prediction)

这是为了下游需要输入句子对,并分辨句子对之间联系的任务而设计的,比如QA、NLI等。作者认为LM里面学不到这样的知识,所以又单独设计了NSP预训练任务。

这个任务的insight也非常直接,就是预测两个句子中,后面一句是不是前面一句的下一句,是一个二分类问题。在构造输入的时候,以50%的概率选择真实是下一句的句子,以50%的概率选择不是真实下一句的句子。比如:

论文提到最终在这个任务上的acc大约能到97%~98%。

4. pretrain流程

用BooksCorpus(800M词)+ 英文Wikipedia(2500M词)作为语料,作者强调使用document-level的语料比随机shuffle句子的语料(比如Billion Word Benchmark)要好,因为这样才能抽取出连续的长句子,才好用于BERT的数据构造。

这里笔者特别注意了一下训练时间,BASE版本的BERT,用16块TPU,LARGE版本的BERT,用64块TPU,都是训练了4天!这算力,也是没谁了。。

5. finetune流程

基本都是针对任务要对模型顶层做一定的修改,但都遵循修改很少的原则,后面在实验阶段,会详细说明不同任务的改进是什么样子的。

三. 实验

1. 评估数据集

论文在11个任务上面评估了他们的方法,其中包含8个GLUE中的任务,还有SQuAD1.1、NER和SWAG,下面先来介绍一下:(前8个都是GLUE中的任务,GLUE是General Language Understanding Evaluation,一个包含了多种任务的标准集)

  1. MNLI:Multi-Genre Natural Language Inference,给定句子对,判断两个句子是蕴含、矛盾还是中立,三分类
  2. QQP:Quora Question Pairs,给定句子对,判断语义是否相似,二分类
  3. QNLI:Question Natural Language Inference,给定句子对,判断后者是否是前者的回答,二分类
  4. SST-2:Standford Sentiment Treebank,给定单句,判断情感,二分类
  5. CoLA:Corpus of Linguistic Acceptability,给定单句,判断是否是一句话?二分类
  6. STS-B:Semantic Textual Similarity,给定句子对,判断相似度程度,五分类
  7. MRPC:Microsoft Research Paraphrase Corpus,给定句子对,判断语义是否一致,二分类
  8. RTE:Recognizing Texual Entailment,给定句子对,判断蕴含性,二分类
  9. SQuAD1.1:Stanford Question Answering Dataset,经典阅读理解任务,给定(question,paragraph)对,预测answer在paragraph中的起止位置(span prediction)
  10. CoNLL-2003 NER:命名实体识别任务,输入单句,为每个词进行标注
  11. SWAG:Situations With Adversarial Generations,原任务是给定一句话,和4个选项,从选项里面找出它的下一句,这里转化为输入pair的分类问题,四分类

2. 模型及任务适配

下图是针对上面任务,使用BERT的一些图例:

上面的(a)和(b)是分类任务,输入可以是单句,可以是句子对,输出用[CLS]的表征即可,下面的(c)和(d)是针对token的标注,基本都只是在最后加入了一层分类层,可以说是最小的改动!

3. 实验结果

在GLUE的8个任务上的表现如下:

在SQuAD上的表现如下:

在CoNLL-2003 NER上的表现如下:

在SWAG上的表现如下:

4. 一些分析

作者验证了使用不同预训练任务组合的效果:

  • NO NSP:模型只用MLM进行预训练,没有NSP任务
  • LTR & No NSP:模型用LTR(left-to-right)训练LM,而不用MLM和NSP
  • + BiLSTM:在顶层又加入了一个随机初始化的BiLSTM用于finetune

结论就是,作者认为,MLM+双向训练是BERT里面唯一重要的提升点。其实笔者认为NSP也是比较重要的,虽然去掉NSP效果没有差的那么明显。

作者又分析了模型大小对效果的影响:

基本都是越大越好,不管是对于大小数据集,也不管是与预训练任务是否类似。

作者还分析了预训练步数对效果的影响:

结论就是MLM更有潜力,虽然收敛的慢,但最终效果好!

作者最后对比了用BERT提取那种offline特征的表现:

这里是在CoNLL-2003任务上验证,将这些提取出来的特征,接上两层BiLSTM,发现用最后4层的concat起来,效果是最好的。当然这从侧面证明了BERT不管是finetune还是提特征都很好的能力,但实际效果上还是得自己实践!

四. TensorFlow实现

笔者这里阅读的是原汁原味的TensorFlow源码,虽然笔者比较擅长的是PyTorch,也确实有Google官方推荐的PyTorch版本。但这里笔者还是想剖析Google官方的TensorFlow源码。

相比较于GPT和GPT-2,Google放出的BERT还是一点儿都不吝啬的,包括pretrain的模型结构、训练代码、预训练好的完整模型参数,以及在一些不同任务上的finetune代码,也是让笔者大饱眼福。同时,还有一些Tips和常见的errors等。重要的是,BERT也提供了像ELMo一样的接口,用于预先提取embedding到文件中。建议感兴趣的读者还是去这里看细节。

下面,笔者将分为pretrain和finetune两部分进行详细剖析,同时因笔者自身的TensorFlow水平有限,如若有解读不到位的地方,烦请告知~

1. 无监督pretrain

在预训练阶段,其实输入的构造和模型的训练两者都很重要。

  1. 输入数据的构造:

以bert源码中给的sample_text.txt为例,其内容如下:

This text is included to make sure Unicode is handled properly: 力加勝北区ᴵᴺᵀᵃছজটডণত
Text should be one-sentence-per-line, with empty lines between documents.
This sample text is public domain and was randomly selected from Project Guttenberg.

The rain had only ceased with the gray streaks of morning at Blazing Star, and the settlement awoke to a moral sense of cleanliness, and the finding of forgotten knives, tin cups, and smaller camp utensils, where the heavy showers had washed away the debris and dust heaps before the cabin doors.
Indeed, it was recorded in Blazing Star that a fortunate early riser had once picked up on the highway a solid chunk of gold quartz which the rain had freed from its incumbering soil, and washed into immediate and glittering popularity.
Possibly this may have been the reason why early risers in that locality, during the rainy season, adopted a thoughtful habit of body, and seldom lifted their eyes to the rifted or india-ink washed skies above them.
"Cass" Beard had risen early that morning, but not with a view to discovery.
A leak in his cabin roof,--quite consistent with his careless, improvident habits,--had roused him at 4 A. M., with a flooded "bunk" and wet blankets.
The chips from his wood pile refused to kindle a fire to dry his bed-clothes, and he had recourse to a more provident neighbor's to supply the deficiency.
This was nearly opposite.
Mr. Cassius crossed the highway, and stopped suddenly.
Something glittered in the nearest red pool before him.
Gold, surely!
But, wonderful to relate, not an irregular, shapeless fragment of crude ore, fresh from Nature's crucible, but a bit of jeweler's handicraft in the form of a plain gold ring.
Looking at it more attentively, he saw that it bore the inscription, "May to Cass."
Like most of his fellow gold-seekers, Cass was superstitious.

The fountain of classic wisdom, Hypatia herself.
As the ancient sage--the name is unimportant to a monk--pumped water nightly that he might study by day, so I, the guardian of cloaks and parasols, at the sacred doors of her lecture-room, imbibe celestial knowledge.
From my youth I felt in me a soul above the matter-entangled herd.
She revealed to me the glorious fact, that I am a spark of Divinity itself.
A fallen star, I am, sir!' continued he, pensively, stroking his lean stomach--'a fallen star!--fallen, if the dignity of philosophy will allow of the simile, among the hogs of the lower world--indeed, even into the hog-bucket itself. Well, after all, I will show you the way to the Archbishop's.
There is a philosophic pleasure in opening one's treasures to the modest young.
Perhaps you will assist me by carrying this basket of fruit?' And the little man jumped up, put his basket on Philammon's head, and trotted off up a neighbouring street.
Philammon followed, half contemptuous, half wondering at what this philosophy might be, which could feed the self-conceit of anything so abject as his ragged little apish guide;
but the novel roar and whirl of the street, the perpetual stream of busy faces, the line of curricles, palanquins, laden asses, camels, elephants, which met and passed him, and squeezed him up steps and into doorways, as they threaded their way through the great Moon-gate into the ample street beyond, drove everything from his mind but wondering curiosity, and a vague, helpless dread of that great living wilderness, more terrible than any dead wilderness of sand which he had left behind.
Already he longed for the repose, the silence of the Laura--for faces which knew him and smiled upon him; but it was too late to turn back now.
His guide held on for more than a mil
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值