BERT-预训练的强大

2019 年 3 月 7 日 微信AI


背景

在图像研究领域,预训练技术早已经是屡见不鲜的事情;但在自然语言理解领域,预训练大部分还只停留在Embedding层面,比如Word2Vec,Glove等,更复杂些的还有Elmo等。


不同于图像领域,自然语言理解领域,预训练虽说表现出一定的优势,但优势却远远不如图像领域那么明显。直到本文介绍的方法出现前,预训练方法都表现的不愠不火;而本文中方法的出现,则直接将自然语言理解中的预训练问题直接提到普适性的高度,引爆了业界。


BERT,全称BERT: Pre-training of Deep Bidirectional Transformers for LanguageUnderstanding,通过预训练技术,刷新了十余个NLP任务的最优结果,更直接让所有NLPer认识到,预训练技术在NLP中潜在的巨大价值。


为什么需要预训练

人在认知领域的许多自然而然的学习过程,对于所有的机器学习算法来说,却往往如天埑般无法逾越。人总是通过极少次数的学习,就能够精准的识别某些东西。比如一个人,见过小猫后,第一次遇到老虎,有可能误识别成猫,但当有人告诉他,这其实是老虎,因为它更大,更强壮后,那他再次识别老虎的准确率就会突然变得非常非常高。

 

相信不少人都听说过Few Shot LearningTransfer Learning等,前者试图通过少量的训练样本,让模型在该类别的识别中,达到一个很高的水平;后者则试图使用知识的可迁移性,让模型在少量样本的支持下,快速在一个陌生领域达到很高的水平。

 

人的认知,往往基于数十年的生活积累,无论是Few Shot Learning还是Transfer Learning,都无法做到这一点,而与这一点最为相近的,便是预训练。

 

一般来说,预训练是指,模型通过大量的可用文本,图像等,最大化P(X),其中,X为训练样本,模型的目标是让所有样本出现的概率尽可能达到最大。该类算法中最出名的算法莫过于HintonWeak-Sleep算法,该算法简介掀起了深度学习在算法领域中的革命。

 

最后,用一句通俗易懂的词描述一下预训练的作用:强大的正则化技巧(笑)。


BERT

图1

1中,分别对比了与Bert相似的两种模型,分别是OpenAIGPT和刚刚提到的ELMo,前两种方法都预计Transformer,后一种方法则使用LSTM。不同于单向的GPT的单向,BERT更充分考虑词语与左右相关词的语义关系。


BERT的预训练过程将一段文章中,前两个句子AB放在一起,并通过图2的方式,将其表示为向量形式。


图2

2BERTEmbedding层,该层考虑了三种不同的Embedding,分别是图中的第二层Token Embedding,第三层Segment Embedding以及第四层Position Embedding。对于Token EmbeddingBERT与其他的深度模型并没有本质区别;Segment Embedding则是BERT独有的,它区分了两个句子ABPosition Embedding则更关注每个字词在句子中的实际位置,它最早提出与Transformer


文本表示成向量后,BERT通过连续多层的Transformer,深层次计算了词语之间的关联性,其Transformer结构如下图所示:

 

图3

3Transformer内部结构,将上层输出作为当前层输入,首先计算Multi Head Attention又称Self-Attention,通过全链接层后,作为Residual与输入相加,再通过一层Intermediate LayerIntermediate Layer类似一个两头尖,中间宽的网络,目的是散化特征后,再次聚集,有点像矩阵分解对于缺失值补全,最后通过一个激活函数输出当前层结果。

 

插播一句,最新ICLR2019中,有文章表示,更深层的网络可以降低类内的Variance,有兴趣的同学可以去查下文章“A CLOSER LOOK AT FEW-SHOT CLASSIFICATION”。


预训练

前面介绍了网络的基本网络结构,文中省去了很多复杂的公式。下面介绍一下BERT的预训练过程。


BERT文章中,提出了两种预训练方式,即Masked Language ModelNext Sentence Prediction


Masked Language Model:在训练过程中随机遮盖15%的词,在最终的输出层,预测这些被遮盖的词。作者在论文中提出,这15%的词中,有80%真正被覆盖,10%维持不变,10%被替换成其他词,其目的是为了让模型充分的利于双向语言模型来预测真正的被Mask掉的词。


Next Sentence Prediction:在训练过程中,作者选择了大量连续的句对,构成类别0;同时构造了大量非连续句对,构成类别1。预训练阶段,通过分类其来判断是两句话是否是连续的两句话。


需要指出的是,作者使用了图1CLS标记最终的Embedding来预测句子关系,使用Mask位置Token80%Mask10%Hold10%Replace)的Embedding来预测原Token


作者使用了16TPU训练了基准的BertBase,使用64TPU训练了更大的模型BertLarge,每组预训练都持续4天。同样的计算量放到当前的M40Nvidia显卡,大概要90天,Emmm….


还有,作者在10亿级别的语料上,预训练整个模型(不服就干--- 某某某)。


Fine-Tuning

论文中,作者一共提出4种不同的Fine-Tuning方法,如图4所示:

图4

四种方法中,分别对应:

a)句子间的逻辑关系推理;

b)单句话的分类任务;

c)阅读理解,QA问答;

d)实体识别。


Fine-Tuning过程中,需要注意的是,所有的分类任务都是用CLS标记对应的Embedding连接的分类器。


实验结果

在实验结果方面,BERT效果极为出色:

结果1

结果1BERT在句子推理及分类任务中的表现,表格中的对比模型都是当下真正意义上的State-Of-ArtModel,相比之下,更体现出BERT的出色效果。在所有数据集中都有非常明显的提升,平均提升超过6个百分点。

结果2

结果2,在SQuADBert的效果对比,结果中,BERT同样有非常出色的效果,相比之前最好的模型,单模型便达到了nlnetEnsemble的效果;Emsemble更是提升近2个百分点。


结果3

结果3,在命名实体识别任务中,Bert效果同样超过了当前的最好方法。


结果4

结果4,在SWAG数据集中,该数据集有点像英语四级中的阅读理解,回复的答案不再是简单的额词,而是复杂度的句子,BERT的结果在现有模型的基础上直接提升27个百分点,甚至超过了人类的表现。


总结

BERT的强大当然不止于此,本文中也只是简单的带大家简单的过一遍文章,在实际应用中,笔者已经充分感受到了Bert的出色之处。


在困扰笔者很久的一份数据集上,多层双向LSTM效果长期局限在0.94,其他模型低于0.94的前提下,BERT直接将结果提升到0.95(这让笔者看到了未来的曙光,括弧笑)。同时在冷启动任务上,收集了几千条包含几十个类的数据后,BERT直接做FineTuning,就可以训练出一个相当可以的分类模型(尖括号赞),这里没有尝试FewShot的强(装)大(**)能(效)力(果)是个遗憾。


就目前来看,遗憾的是Bert的耗时很难满足上线需求,而且自己预训练模型,很难自己训练出理想的预训练效果(耗时长,调参难度大,自己训练往往会降低模型规模)。对笔者来说,Bert的主要作用是:1、线上给你个希望;2、线下干啥都行。

 

 

最后,强行种草:

1、  预训练是正则化方法(不知真假,姑且信了)

2、  模型宽,泛化效果好(理由同上);模型深,学习能力强(低类内Variance);

 

 

参考文献

[1] Devlin J, ChangM W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers forlanguage understanding[J]. arXiv preprint arXiv:1810.04805, 2018.

[2] Vaswani A, Shazeer N, Parmar N, et al.Attention is all you need[C]//Advances in Neural Information ProcessingSystems. 2017: 5998-6008.

[3] Matthew Peters,Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee, andLuke Zettlemoyer. 2018. Deep

[4] Alec Radford, Karthik Narasimhan, TimSalimans, and Ilya Sutskever. 2018. Improving language understanding withunsupervised learning. Technical report, OpenAI




微信ID:WeChatAI

长按识别二维码关注我们




登录查看更多
60

相关内容

在搭建网络模型时,需要随机初始化参数,然后开始训练网络,不断调整直到网络的损失越来越小。在训练的过程中,一开始初始化的参数会不断变化。当参数训练到比较好的时候就可以将训练模型的参数保存下来,以便训练好的模型可以在下次执行类似任务时获得较好的结果。
BERT技术体系综述论文:40项分析探究BERT如何work
专知会员服务
139+阅读 · 2020年3月1日
BERT进展2019四篇必读论文
专知会员服务
67+阅读 · 2020年1月2日
【机器学习课程】Google机器学习速成课程
专知会员服务
164+阅读 · 2019年12月2日
基于知识蒸馏的BERT模型压缩
大数据文摘
18+阅读 · 2019年10月14日
3分钟看懂史上最强NLP模型BERT
机器学习算法与Python学习
7+阅读 · 2019年2月27日
详解谷歌最强NLP模型BERT(理论+实战)
AI100
11+阅读 · 2019年1月18日
图解2018年领先的两大NLP模型:BERT和ELMo
新智元
9+阅读 · 2018年12月14日
详细解读谷歌新模型 BERT 为什么嗨翻 AI 圈
人工智能头条
10+阅读 · 2018年10月25日
解读谷歌最强NLP模型BERT:模型、数据和训练
未来产业促进会
5+阅读 · 2018年10月20日
Arxiv
20+阅读 · 2019年9月7日
Arxiv
6+阅读 · 2019年8月22日
Arxiv
11+阅读 · 2019年6月19日
Universal Transformers
Arxiv
5+阅读 · 2019年3月5日
Conditional BERT Contextual Augmentation
Arxiv
8+阅读 · 2018年12月17日
VIP会员
相关资讯
基于知识蒸馏的BERT模型压缩
大数据文摘
18+阅读 · 2019年10月14日
3分钟看懂史上最强NLP模型BERT
机器学习算法与Python学习
7+阅读 · 2019年2月27日
详解谷歌最强NLP模型BERT(理论+实战)
AI100
11+阅读 · 2019年1月18日
图解2018年领先的两大NLP模型:BERT和ELMo
新智元
9+阅读 · 2018年12月14日
详细解读谷歌新模型 BERT 为什么嗨翻 AI 圈
人工智能头条
10+阅读 · 2018年10月25日
解读谷歌最强NLP模型BERT:模型、数据和训练
未来产业促进会
5+阅读 · 2018年10月20日
相关论文
Arxiv
20+阅读 · 2019年9月7日
Arxiv
6+阅读 · 2019年8月22日
Arxiv
11+阅读 · 2019年6月19日
Universal Transformers
Arxiv
5+阅读 · 2019年3月5日
Conditional BERT Contextual Augmentation
Arxiv
8+阅读 · 2018年12月17日
Top
微信扫码咨询专知VIP会员