NLP中的预训练语言模型(一)—— ERNIE们和BERT-wwm

  随着bert在NLP各类任务上取得骄人的战绩,预训练模型在这不到一年的时间内获得了很大的发展,本系列的文章主要是简单回顾下在bert以后有哪些比较有名的预训练模型,这一期先介绍几个国内开源的预训练模型。git

一,ERNIE(清华大学&华为诺亚)github

  论文:ERNIE: Enhanced Language Representation with Informative Entities 架构

  GitHub:https://github.com/thunlp/ERNIE测试

  清华大学和华为诺亚方舟实验室联合提出的引入知识图谱来加强预训练模型的语义表达能力,其实预训练时就是在原来bert的基础上增长了一个实体对齐的任务。咱们来看看这个新的任务是怎么作的,首先来看看整个预训练模型的架构ui

  

  这里有两个encoder,T-encoder和K-encoder,其实这里的K-encoder只有在预训练的时候有做用,在以后的fine-tuning阶段只要使用T-encoder就能够了,因此这里的重要就是引入了实体对齐这个任务而已。编码

  如上图中右边所示,给定一条序列由$w_1, w_2, ...w_n$组成,与及这条序列对齐的实体$e_1, e_2, ...e_m$,这些实体来自于知识图谱。由于一个实体会涉及到多个词,以上面图中为例$e_1 = Bob Dylan$,而在序列中与之对应的实体由两个token组成,即$w_1=bob, w_2=dylan$。所以对齐时咱们将知识图谱中的实体和序列中实体的首个词对应,即在位置上将$e_1$对应到$w_1$上。spa

  T-encoder的做用是对序列进行编码,结构和bert-base相似,可是层数是6层。K-encoder是对知识图谱实体和序列作聚合,知识图谱中的实体经过TransE作嵌入,具体表达式以下:3d

    

  先对序列和实体编码,而后作聚合,聚合完以后更新$w$ 和$e$的状态code

    

  对于非实体的token的处理,直接对序列中的token更新便可:orm

    

   了解了怎么将知识图谱中的实体引入到任务中,再来看看具体的任务是怎么构建的,本文提出了随机mask tokens-entity中的entity,而后去预测该位置对应的entity,本质上和MLM(mask language model)任务一致,都属于去噪自编码。具体mask的细节:

  1)5%的tokens-entity对采用随机用其余的entity来替换,这主要是引入噪声,由于在实际的任务中也存在这种状况。

  2)15%的tokens-entity对采用随机maskentity,而后来预测这个entity。

  3)80%保持正常。

  这篇论文主要的工做就是增长了这个任务,另外也提出了在实体类型和关系抽取两个任务上新的预训练方式,具体以下图:

    

  就是引入了一些特殊的token来代表另一些特殊token的身份。由于引入了实体对齐任务,所以该模型在一些和知识图谱相关的下游任务上要优于bert。

 

二,ERNIE(百度)

  论文:ERNIE: Enhanced Representation through Knowledge Integration

  GitHub:https://github.com/PaddlePaddle/ERNIE

  百度提出的这个模型名称和上面一致,并且也号称引入了知识信息,可是作法彻底不同,这里主要的改变是针对bert中的MLM任务作了一些改进。具体的以下图所示

    

     

   在bert中只是mask了单个token,可是在语言中,不少时候都是以短语或者实体存在的,若是不考虑短语或者实体中词之间的相关性,而将全部的词独立开来,不能很好的表达句法,语义等信息,所以本文引入了三种mask的方式,分别对token,entity,phrase进行mask。除此以外,本论文中还引入了对话语料,丰富语料的来源,并针对对话语料,给出了一个和NSP类似的任务。具体以下图:

    

   这里构建了一个DLM的任务,其实作法和NSP相似,随机生成一些假的多轮QR对,而后让模型去预测当前的多轮对话是真实的仍是假的。

  做者测试了在不少任务上较bert都有1-2%的提高,而且做者作了实验代表DLM任务在NLI任务上有提高。

 

三,ERNIE 2.0(百度)

  论文:ERNIE 2.0: A CONTINUAL PRE-TRAINING FRAMEWORK FORLANGUAGE UNDERSTANDING 

  GitHub:https://github.com/PaddlePaddle/ERNIE

  这是百度在以前的模型上作了新的改进,这篇论文主要是走多任务的思想,引入了多大7个任务来预训练模型,而且采用的是逐次增长任务的方式来预训练,具体的任务以下面图中所示:

    

  由于在这里不一样的任务输入不一样,所以做者引入了Task Embedding,来区别不一样的任务,训练的方法是先训练任务1,保存模型,而后加载刚保存的模型,再同时训练任务1和任务2,依次类推,到最后同时训练7个任务。我的猜想这样的作法多是由于直接同时训练7个模型的效果并很差,但如今这种训练方式,一开始在任务1上已经预训练过,至关于已经有了一个很好的初始化参数,而后再去训练任务1和任务2能保证模型更好的收敛。

   在效果上较ERNIE1.0版本基本上全面提高,而且在阅读理解的任务上有很大的提高。

 

四,BERT-wwm 

  论文:Pre-Training with Whole Word Maskingfor Chinese BERT 

  GitHub:https://github.com/ymcui/Chinese-BERT-wwm

  BERT-wwm是哈工大开源出来的,在原始bert-base的基础上引入whole word mask,其实就是分词后的词进行mask,以下图所示:

    

   由于是在bert-base的基础上训练的,所以无缝对接如今的bert的使用方法,直接替换预训练模型便可,都不须要更改任何文件。并且在不少中文任务上较bert都有一些提高,所以推荐使用。

相关文章
相关标签/搜索