12个NLP预训练模型的学习笔记https://mp.weixin.qq.com/s/IndeECchmX_GC8MzuWSVfg
1 引言 17年transformer被提出,18年迎来了ELMo和BERT的横空出世,19年预训练模型不出意外地开始了全面的爆发。 所以,预训练模型也成为了NLPer绕不过去的一个技术栈,这篇文章将会梳理一下我学习过的12个预训练模型。这是一篇review性质的文章,跳过了一些基础的知识,可能会对一些没用过预训练模型的读者不大友好。
预训练模型,在我看来,相对传统模型做的革新,主要体现在以下三个方面: (1)通用的特征提取器 早期NLP模型设计的一个重要步骤,就是考虑如何提取语料特征。这个环节会占用算法工程师大量的精力,也是影响模型效果的关键因素。 在预训练模型中,我们只需要简单粗暴地使用transformer,不需要太多地关注具体任务,就能够达到SOTA级的特征提取器的效果。 除此之外,transformer的设计思想由于其通用性,还可以拓展应用到其它领域,例如CV领域。 (2)动态化的词向量 在词向量方法刚出现的时候,例如NNLM,word2vec,Glove模型,他们针对每个特定字词所生成的词向量是一成不变的。对于存在一词多义现象的字词,这种静态的词向量很难在所有的场景下,都准确完整地表示出字词的信息。 所以,我们需要一种能够根据上下文语境进行动态调整,准确表示字词意思的词向量。预训练模型借助attention机制,就能够动态生成这种基于上下文的词向量。 (3)针对不同下游任务的强泛化性 传统的构建模型的思路,就是根据任务的具体类型,选择相应的模型。这样因地制宜、对症下药是没有问题的,但是我们要考虑到,在工业界工程落地,存在着各种各样的特殊情况和限制条件,比如说训练语料不足、算法工程师水平不够。 所以我们有时候需要一个“傻瓜式”的即插即用的模型,不需要太多的训练工作、不需要太多的调参工作、不需要太多的模型选型和优化工作。预训练模型就是这样一个强泛化性的模型,它只需要少量的训练数据和模型优化工作,就能够在新的下游任务中获得不错的效果,有时候甚至不需要训练和优化就能够直接拿来使用。
介绍完了预训练模型最显著的创新点,我们先对下文将要介绍的12个预训练模型做个一句话概览,先有个简单直观的印象: (1)transformer是主流预训练模型的基本单元,是一个强大的特征提取器,后续的模型大多是基于transformer的优化和改进。 (2)ELMo基于传统的RNN模型框架,是一个双向模型。它会根据上下文语境,动态地生成词向量。 (3)BERT可以理解为集合了transformer优点(特征提取)和ELMo优点(双向)的模型,是最经典的预训练模型,是预训练模型的里程碑。 (4)transformer-XL将transformer作为基本单元应用于RNN模型,改善了transformer输入序列长度受限(长文本)的问题。 (5)XLNet是基于transformer-XL的模型,论文的主要创新点是双流机制和序列乱序方法。XLNet同时也使用了大量的语料,构建了更大的模型,也取得了比BERT更好的效果。但是通过大语料、大模型这种类似军备竞赛的方式刷新SOTA的方法,也逐渐开始泛滥。 (6)ERNIE是百度提出的模型,它基于BERT,百度利用其强大的语料库优势进行训练,把ERNIE推到了中文NLP任务SOTA的地位,并保持了很长一段时间。 (7)ERNIE2.0在ERNIE的基础上,使用多任务学习的方法,进一步提升了模型的泛化性和通用性。 (8)GPT是一个早期模型,可以理解为将RNN的基本单元替换为transformer,是一个单向模型。 (9)GPT-2也是一个使用大语料训练的大模型,它在文本生成任务上的表现让人惊艳了一把,也因为不肯开源被学术界工业界口诛笔伐(现在已经开源了)。 (10)RoBERTa在BERT的基础上,致力于将调参发挥到极致。 (11)ALBERT使用词向量因式分解和层间参数共享两个方法,在降低模型规模方向上,做了显著有效的尝试。 (12)TinyBERT利用知识蒸馏技术降低模型规模,也获得了很好的效果。
|