飞道的博客

[深度学习] 自然语言处理 --- 从BERT, XLNet, RoBERTa, ERNIE2到ALBERT2

379人阅读  评论(0)

谷歌Lab发布了一个新的预训练模型"ALBERT"全面在SQuAD 2.0、GLUE、RACE等任务上超越了BERT、XLNet、RoBERTa再次刷新了排行榜!ALBERT是一种轻量版本的BERT,利用更好的参数来训练模型,但是效果却反而得到了很大提升!ALBERT的核心思想是采用了两种减少模型参数的方法,比BERT占用的内存空间小很多,同时极大提升了训练速度,更重要的是效果上也有很大的提升

首先来看ALBERT的性能,ALBERT模型全面刷新了几大任务的Leaderboard,SQuAD 2.0, RACE和GLUE。

 

ALBERT模型的核心是:训练出更小但效果更好的模型! 文章的标题为:"ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS"。一天前刚刚登陆arxiv。

 

最近几年自然语言处理领域取得了飞速的发展,基本几项重要的成果都集中在了预训练上包括18年火爆一时的BERT,19年上半年发布的XLNet,以及之后发布的RoBERTa都是以更好的预训练为目的的。

 

1. 什么是预训练

预训练也叫做Pre-training, 是迁移学习中很重要的一项技术。在自然语言处理中主要以词向量为主。单词我们一般可以用两种不同的方式来表示,一种方式为"one-hot encoding",另外一种方式为分布式表示(通常也叫作词向量/Word2Vec)。 由于单词是所有文本的基础,所以如何去更好地表示单词变得尤其重要。

那如何去理解预训练呢? 举个例子,比如我们用BERT训练了一套模型,而且已经得到了每个单词的词向量, 那这时候我们可以直接把这些词向量用在我们自己的任务上,不用自己重新训练,这就类似于迁移学习的概念。 或者通过BERT已经训练好的模型去动态地去得出上下文中的词向量。

预训练在通常情况下既可以提升训练效率也可以提高模型效果,因为使用预训练的结果本身其实就是去试图寻找最好的最优解。

 

2. 词向量技术

通过词向量技术我们可以把一个单词表示为向量的形式,然后接着应用在后续的模型当中。我们可以认为词向量表示的是单词的语义(semantic)。 我们可以按照不同的类别区分词向量技术。

常用的词向量模型比如SkipGram, CBOW, Glove 是不考虑上下文的,也就是一个单词有个固定(Fixed)的向量,不依赖于上下文的改变而改变。比如“I back my car"和 "I hurt my back"里,单词"back"在不同的语境下的含义是不一样的 。

近2,3年很多工作的重点放在了学习考虑上下文的词向量。在这个领域产生了诸多很有突破性的进展,从ELMo,BERT, XLNet到今日刚刚发布的ALBERT,无一不是以这个为重点。利用这些模型,我们可以动态地去学出一个单词在不同上下文之间的词向量。当然,这些向量在不同的语境下的表示肯定是不一样的。

 

3. 什么是BERT

BERT是一种基于Transformer Encoder来构建的一种模型,它整个的架构其实是基于DAE(Denoising Autoencoder)的,这部分在BERT文章里叫作Masked Lanauge Model(MLM)。MLM并不是严格意义上的语言模型,因为整个训练过程并不是利用语言模型方式来训练的。BERT随机把一些单词通过MASK标签来代替,并接着去预测被MASK的这个单词,过程其实就是DAE的过程。BERT有两种主要训练好的模型,分别是BERT-Small和BERT-Large, 其中BERT-Large使用了12层的Encoder结构。 整个的模型具有非常多的参数。

BERT在2018年提出,当时引起了爆炸式的反应,因为从效果上来讲刷新了非常多的记录,之后基本上开启了这个领域的飞速的发展。

 

 

 

4. 什么是XLNet

BERT之后的一个爆发节点发生在XLNet发布的时候,因为它刷新了BERT保留的很多记录。除了效果之外,那为什么要提出XLNet呢?这就需要从BERT的缺点说起。

虽然BERT有很好的表现,但本身也有一些问题。总结起来有以下几点:

1.训练数据和测试数据之间的不一致性,这也叫作Discrephancy。当我们训练BERT的时候,会随机的Mask掉一些单词的,但实际上在使用的过程当中,我们却没有MASK这类的标签,所以这个问题就导致训练的过程和使用(测试)的过程其实不太一样,这是一个主要的问题。

2. 并不能用来生成数据。由于BERT本身是依赖于DAE的结构来训练的,所以不像那些基于语言模型训练出来的模型具备很好地生成能力。之前的方法比如NNLM[12],ELMo是基于语言模型生成的,所以用训练好的模型可以生成出一些句子、文本等。但基于这类生成模型的方法论本身也存在一些问题,因为理解一个单词在上下文里的意思的时候,语言模型只考虑了它的上文,而没有考虑下文!

基于这些BERT的缺点,学者们提出了XLNet, 而且也借鉴了语言模型,还有BERT的优缺点。最后设计出来的模型既可以很好地用来执行生成工作,也可以学习出上下文的向量表示。那如何做的呢?

首先,生成模型是单向的,即便我们使用Bidirectional LSTM类模型,其实本质是使用了两套单向的模型。那又如何去解决呢?答案是他们使用了permutation language model, 也就是把所有可能的permutation全部考虑进来。这个想法源自于hugo之前的工作叫作NADE,感兴趣的读者可以去看一下。

另外,为了迎合这种改变,他们在原来的Transformer Encoder架构上做了改进,这不分叫作Two-stream attention, 而且为了更好地处理较长的文本,进而使用的是Transformer-XL。 这就是XLNet的几大核心!

 

5. 什么是RoBETRa

从模型上来说,RoBERTa基本没有什么太大创新,主要是在BERT基础上做了几点调整:

1)动态Masking,相比于静态,动态Masking是每次输入到序列的Masking都不一样;

2)移除next predict loss,相比于BERT,采用了连续的full-sentences和doc-sentences作为输入(长度最多为512);

3)更大batch size,batch size更大,training step减少,实验效果相当或者更好些;

4)text encoding,基于bytes的编码可以有效防止unknown问题。另外,预训练数据集从16G增加到了160G,训练轮数比BERT有所增加。

 

6 什么是ERNIE

ERNIE: Enhanced Representation through Knowledge Integration (19 April 2019)
ERNIE 2.0: A Continual Pre-training Framework for Language Understanding (29 July 2019)

ERNIE 沿袭了 BERT 中绝大多数的设计思路,包括 预训练 (Pretraining) 加 微调 (Fine-tuning) 的流程,去噪自编码 (DAE, abbr. denoising autoencoding) 的模型本质,以及 Masked Language Model 和 Next Sentence Prediction 的训练环节。主要的不同,在于 ERNIE 采用了更为复杂的 Masking 策略:Knowledge Masking Strategies,并针对对话型数据引入一套新的训练机制:对话语言模型 (Dialogue Language Model)。

ERNIE2是百度在ERNIE1基础上的一个升级版,不过这次升级幅度比较大. ERNIE 2.0 将 1.0 版本中的功能特性全部予以保留,并在此基础上做更为丰富的扩展和延伸。论文指出,近几年来基于未标注语料进行无监督编码的预训练模型,包括 Word2Vec、ELMo、GPT、BERT、XLNet、ERNIE 1.0, 存在一个共同缺陷:仅仅只是利用了 token 与 token 之间的 共现 (Co-occurance) 信息。当两个 token 拥有相似的上下文语境时,最终的编码必然具有极高的相似度。这使得模型无法在词向量中嵌入语料的 词汇 (lexical)、语法 (syntatic) 以及 语义 (semantic) 信息。为此,ERNIE 2.0 首次引入 连续预训练 (Continual Pre-training) 机制 —— 以串行的方式进行多任务学习,学习以上三类特征。设计的初衷在于模拟人类的学习行为:利用已经积累的知识,持续地进行新的学习。

 

6. 什么是ALBERT

过去几年深度学习圈子里一直出现了一些“怪象”,就是堆数据,让模型更复杂,训练出来的效果更好! 但真正的智能应该是用更简单的模型,用更少量的数据,得到更好的结果! 可以想一下人类是如何学习的?我们的学习不需要大量的样本,而且有举一反三的能力,这才叫作真正的智能! 我们的研究在这个道路上还有很长的路要走。

之前的BERT,XLNet为什么效果好? 这绝对离不开模型本身的复杂度,一个模型拥有上百亿的参数,效果不好就太对不起我们的资源了。我们要知道训练一套这类模型需要花费甚至几百万美金的成本。

所以这时候提出ALBERT也不奇怪的,就是试图解决上述的问题:

1. 让模型的参数更少 2. 使用更少的内存 3. 提升模型的效果。就是这么简单!

 

ALBERT的贡献

文章里提出一个有趣的现象:当我们让一个模型的参数变多的时候,一开始模型效果是提高的趋势,但一旦复杂到了一定的程度,接着再去增加参数反而会让效果降低,这个现象叫作“model degratation"。

基于上面所讲到的目的,ALBERT提出了三种优化策略,做到了比BERT模型小很多的模型,但效果反而超越了BERT, XLNet。

- Factorized Embedding Parameterization. 他们做的第一个改进是针对于Vocabulary Embedding。在BERT、XLNet中,词表的embedding size(E)和transformer层的hidden size(H)是等同的,所以E=H。但实际上词库的大小一般都很大,这就导致模型参数个数就会变得很大。为了解决这些问题他们提出了一个基于factorization的方法。

他们没有直接把one-hot映射到hidden layer, 而是先把one-hot映射到低维空间之后,再映射到hidden layer。这其实类似于做了矩阵的分解。

- Cross-layer parameter sharing. Zhenzhong博士提出每一层的layer可以共享参数,这样一来参数的个数不会以层数的增加而增加。所以最后得出来的模型相比BERT-large小18倍以上。

- Inter-sentence coherence loss. 在BERT的训练中提出了next sentence prediction loss, 也就是给定两个sentence segments, 然后让BERT去预测它俩之间的先后顺序,但在ALBERT文章里提出这种是有问题的,其实也说明这种训练方式用处不是很大。 所以他们做出了改进,他们使用的是setence-order prediction loss (SOP),其实是基于主题的关联去预测是否两个句子调换了顺序。

 

谷歌开源了中文版本和Version 2

 

 

参考文献:

  1. RoBERTa
  2. ERNIE2
  3. XLNet团队:只要公平对比,BERT毫无还手之力
  4. RoBERTa、ERNIE2和BERT-wwm-ext


转载:https://blog.csdn.net/zwqjoy/article/details/103933754
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场