从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史
https://zhuanlan.zhihu.com/p/49271699
Bert的优势在于:
1.效果好,基本刷新了很多NLP的任务的最好性能
2.具备广泛的通用性。
绝大部分NLP任务都可以采用类似的两阶段模式直接去提升效果
实际需求:我们需要通过Bert来做文本分类任务:兴趣标签预测
一、预训练在图像领域的应用
1.为什么要进行预训练?
自从深度学习火起来后,预训练过程就是做图像或者视频领域的一种比较常规的做法,
有比较长的历史了,而且这种做法很有效,能明显促进应用的效果。
(1)当我们数据集比较少的时候,不足以训练复杂网络
(2)当我们数据集比较大的时候,这样可以加快训练速度,参数初始化,找到好的初始点,有利于优化
对于图像任务来说,设计好网络结构以后,一般是CNN的多层叠加网络结构。
如果没有预训练,一般情况下这些网络的参数是进行初始化的,一般是随机值或者其他初始化方法。
但是现在我们可以先使用训练集合对这个网络进行预先训练,然后将网络参数存起来。
当我们面对一个新的任务时,采用相同的网络结构,在比较浅的几层CNN使用前面训练好的参数,
其他高层的CNN随机初始化。
后面是两种方法:
一种是Frozen:使用数据集C的时候前面几层固定使用之前保存的网络参数
另外一种是Fine-Tuning:使用数据集C训练第一次使用之前保存的网络参数,后面不断发生变化。
2.预训练可行性的原因是什么?
主要原因是底层特征的可复用性
对于层级的CNN结构来说,不同层级的神经元学到不同类型的图像特征。
由底向上形成层级结构。比如图上面的例子,如果现在有个人脸识别的任务,
训练好网络好,通过可视化可以发现每一层网络中学习到了什么特征。
第一层的神经元学到了线段等特征;
第二层学到了人脸的五官轮廓;
第三层形成了特征的层级结构。
可以这么理解:越是底层的网络学到的是基础的特征,具有明显的可复用性;
而越往上的网络抽取到的特征越和我们最终需要完成的任务相关。
举例来说:比如我们可以使用ImageNet预先训练好浅层的网络,后面再用C任务的数据集去训练
ImageNet是图像领域里有超多事先标注好训练数据的数据集合。
ImageNet有1000类,类别多,算是通用的图像数据,跟领域没太大关系,所以通用性好
从图像的预训练到自然语言。
二、从word embedding到ELMO
word embedding是NLP里的早期预训练技术。
word embedding把词映射到向量空间。语义相似的词在向量空间中位置越近。
word2vec是谷歌提出一种word embedding的工具或者算法集合
2013年最火的用语言模型做Word Embedding的工具是Word2Vec
Word2Vec有两种训练方法,
一种叫CBOW,核心思想是从一个句子里面把一个词抠掉,用这个词的上文和下文去预测被抠掉的这个词;
有点类似于小时候做的英语完形填空。
第二种叫做Skip-gram,和CBOW正好反过来,输入某个单词,要求网络预测它的上下文单词。
这里可以使用前面的word2vec的例子图
这里举一个例子。
18年之前NLP中经典的预训练方式。
第一层将词进行embedding之后获取词向量,
句子中的每个词以onehot形式输入,然后和学好的 word embedding矩阵Q相乘,得到该句子的word embedding了。
所以word embedding等价于onehot层到embedding层的网络用预训练好的参数初始化了。
word embedding存在的问题:
无法解决多义词问题了,原因是word embedding是静态的。
举例来说:因为word embedding之后每个词对应word embedding矩阵中的一行,可以简单理解word embedding
向量空间是一张很大的表,每个词占一行。
拿苹果来说,这个词占一行。
但是两句话 我喜欢吃苹果。 我喜欢用苹果手机。
针对word embedding无法解决多义词的问题,ELMO提出了一个简洁有效的解决方案。
EMLO是 Embedding from Language Models 的简称。
ELMO的本质思想是:本身是个根据当前上下文对Word Embedding动态调整
我事先用语言模型学好一个单词的Word Embedding,此时多义词无法区分,不过这没关系。
在我实际使用Word Embedding的时候,单词已经具备了特定的上下文了,这个时候我可以根据
上下文单词的语义去调整单词的Word Embedding表示,这样经过调整后的Word Embedding更能
表达在这个上下文中的具体含义,自然也就解决了多义词的问题了。所以ELMO本身是个根据当前
上下文对Word Embedding动态调整的思路。
基于上下文的word embedding:ELMO 加图
ELMO采用了典型的两阶段过程。
第一阶段是利用语言模型进行预训练。获取对应单词的word embedding
第二阶段是做下游任务时将预训练获得word embedding作为新特征补充到下游任务中。
网络采用双层双向LSTM
长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,
主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。
比如我们目前的任务上面讲的CBOW完形填空任务,根据上下文取预测单词Wi。
这个Wi之前的是上文,之后的是下文。
图中左端的前向双层LSTM代表正向编码器,输入的是从左到右的单词Wi的上文;
右端的逆向双层LSTM代表反向编码器,输入的是从右到左的逆序的单词Wi的下文。
每个编码器的深度都是两层LSTM叠加。
使用大量语料训练好这个网络后,输入一个新句子,句子中的每个词对应三个embedding,
最底层的是单词的word embedding,
往上一层是第一层双向LSTM中单词位置对应的embedding,句法信息更多
在往上走一层是第二层双向LSTM中对应单词位置的embedding,语义信息更多。
通过将这三个embedding整合成一个,更能区分多义词的效果。
结果:
ELMO预训练过程不仅学会了单词的word embedding,还学会了一个双层双向的LSTM网络结构。
EMLO优点:
1.在6个NLP任务中,有较大幅度的提升;
2.适用范围是非常广的,普适性强
EMLO的缺点:
1.ELMO使用了LSTM作为特征提取器,LSTM抽取特征能力远弱于 Transformer
2.拼接方式双向融合特征融合能力偏弱
在特征抽取器选择方面,ELMO使用了LSTM而不是新贵Transformer
Transformer:
Transformer是谷歌在17年做机器翻译任务的"Attention is all you need"的论文中提出的。
Transformer是个叠加的“自注意力机制(Self Attention)”构成的深度网络,是目前NLP里最强的特征提取器
Transformer在未来会逐渐替代掉RNN成为主流的NLP工具
Transformer同时具备并行性好,又适合捕获长距离特征
CNN的最大优点是易于做并行计算,所以速度快,但是在捕获NLP的序列关系尤其是长距离特征方面天然有缺陷
RNN一直受困于其并行计算能力,这是因为它本身结构的序列性依赖导致的
ELMO是基于特征融合的预训练方法
三、从word embedding到GPT
基于"Fine-tuning的模式",而GPT就是这一模式的典型开创者。
GPT是"Generative Pre-Training"的简称,从名字看指生成式的预训练
GPT也采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过Fine-tuning的模式解决下游任务。
GPT的预训练过程和ELMO是类似,区别在于:
1.特征抽取器使用的Transformer,ELMO采用的是LSTM;
2.GPT的预训练采用的是单向的语言模型,只使用了单词的上文来预测单词Wi
GPT优点:
1.效果是非常令人惊艳的,在12个任务里,9个达到了最好的效果,有些任务性能提升非常明显
2.适用范围广
GPT的缺点:
1.使用单向语言模型,不能很好的理解下文。
四、BERT诞生
超新星诞生 bert
Bert采用和GPT完全相同的两阶段模型,
首先是语言模型预训练;
其次是使用Fine-Tuning模式解决下游任务
和GPT的最主要不同在于在预训练阶段采用了类似ELMO的双向语言模型,
当然另外一点是语言模型的数据规模要比GPT大。
从word2vec、GPT和ELMO到最终的BERT,四者的关系。
NER:命名体识别
SQuAD:阅读理解
SNLI:Stanford自然语言推理
SRL:语义角色标注(Semantic Role Labelling)
Coref:共指消解(Coreference Resolution):确定不同实体的等价描述,包括代词消解和名词消解
SST-5:情感分析任务
这里引入了一个新问题:对于NLP各种花样的不同任务,怎么改造才能靠近GPT的网络结构呢?
论文中有给出解决办法。
从GPT何ELMO及WE到BERT:新星的诞生
1.采用Transformer作为特征抽取器
2.采用双向语言模型作为预训练任务
Bert采用和GPT完全相同的两阶段模型,首先是语言模型预训练;其次是使用Fine-Tuning模式解决下游任务。
和GPT的最主要不同在于在预训练阶段采用了类似ELMO的双向语言模型,当然另外一点是语言模型的数据规模要比GPT大
NLP四大类任务:
序列标注:分词、POS Tag、NERT、语义标注...
分类任务:文本分类、情感计算..
句子关系判断:Entailment/QA/自然语言推理..
生成式任务:机器翻译、文本摘要
强调Bert的普适性有多强。
一类是序列标注,这是最典型的NLP任务,比如中文分词,词性标注,命名实体识别,
语义角色标注等都可以归入这一类问题,它的特点是句子中每个单词要求模型根据上下文都要给出一个分类类别。
第二类是分类任务,比如我们常见的文本分类,情感计算等都可以归入这一类。
它的特点是不管文章有多长,总体给出一个分类类别即可。
第三类任务是句子关系判断,比如Entailment,QA,语义改写,自然语言推理等任务都是这个模式,
它的特点是给定两个句子,模型判断出两个句子是否具备某种语义关系;
第四类是生成式任务,比如机器翻译,文本摘要,写诗造句,看图说话等都属于这一类。
它的特点是输入文本内容后,需要自主生成另外一段文字。
NLP四大类任务都可以比较方便地改造成Bert能够接受的方式。这其实是Bert的非常大的优点,
这意味着它几乎可以做任何NLP的下游任务,具备普适性,这是很强的。
Bert最关键两点,一点是特征抽取器采用Transformer;第二点是预训练的时候采用双向语言模型。
Bert作者说是受到完形填空任务的启发
Bert本身的效果好和普适性强才是最大的亮点。
Bert本身在模型和方法角度的创新指Masked语言模型和Next Sentence Prediction。
Masked语言模型上面讲了,本质思想其实是CBOW,但是细节方面有改进。