预训练语言模型的一些笔记总结

ELMO

全称为 embedding from language model,顾名思义从语言模型中获取词向量。

之前的词向量方法的两个问题:

    1.复杂的词特性,语法(pos任务)和语义(消歧)。

    2.多义,不同上下文语境中词的语义不同。

ELMO方法:

使用大语料训练一个预训练语言模型;语言模型作为一个函数,不同句子输入时,输出不同的词向量表示,可以解决多义问题。语言模型使用多层的双向LSTM,输出的词向量是每一层的线性组合,捕捉复杂的词特性。

总结:

ELMO:每个词有一个表示,且是整个句子的函数(各个层的线性表示)。高层:上下文信息;底层:词性。

预训练语言表示的方法有两种:一种是基于特征的方法;一种是基于微调(fine-tuning)的方法。ELMO属于前者。

GPT  GPT2.0

全称为Generative Pre-Training模型

预训练语言模型的一些笔记总结_第1张图片

使用预训练语言模型+微调的策略。微调时目标函数糅合了语言模型和特定任务的损失。

在GPT之前,ELMO之后,ULMFiT论文提出了预训练+微调的思想,其中对于通用语言模型的微调方法值得借鉴,只是论文中的微调任务只限定在了文本分类。

GPT其实开创了基于fine-tuning的时代,但是可惜宣传没有做的很给力,相比较bert差了很多。

GPT使用的是transformer中的decoder部分,模型是单向的,所以GPT预训练模型适用于生成任务。

GPT2.0的改进点:

1.各种领域+更高质量+更多。2.模型更大。3.BPE编码,无监督做下游任务

GPT 和 ELMO两种模型属于自回归模型(单向的预测),ELMO虽然采用的是双向的LSTM,但是使用拼接的方向实现,本质上还是自回归的。而GPT2.0在BERT出现之后仍然使用单向的模型,可能是憋着一口气,和bert进行硬刚。

BERT

全称为Bidirectional Encoder Representations from Transformers。

与ELMO不同,bert是基于微调的方法。特征抽取使用的是transformer,比LSTM具有更强的特征抽取能力;而ELMO使用的拼接方式融合双向特征的能力较弱,bert使用的是一体化的融合方法。

bert的两个训练任务:

1.使用Mask Language Model的方式使得transformer的encoder实现了融合双向特征。

2.使用NSP,加入下一句子的预测任务有助于判断句子关系任务。

预训练语言模型的一些笔记总结_第2张图片

        BERT无疑是NLP有里程碑意义的工作,开启了NLP中的imageNet时代,从此出现了各种BERT变种。

BERT使用了更强的特征抽取器transformer,且融合了双向的特征,属于自编码语言模型。也因为使用了MLM实现的双向结构导致训练和微调两个阶段的不一致性(MASK),是自编码语言模型的一个缺点。

XLNet

        BERT属于自编码语言模型(AE),而GPT属于自回归的语言模型(AR),二者各有利弊。AR模型只能利用上文或者下文的信息,无法同时建模双向语境信息;也是因为这个原因,AR模型更加适合生成式的NLP任务。AE模型通过预测MASK掉一部分单词,这些单词可以认为是噪声,这个形式和降噪自编码器很相似。AE模型比较自然地融入了上下文语境,预测单词看到了上下文的信息,所以性能也优于自回归模型。这种MASK的机制也有一些问题:1.MASK单词的独立性问题,BERT假设mask的token是独立的,但实际并非如此;2.预训练和fine-tuning阶段的不一致性问题,fine-tuning阶段看不到mask标志。

        XLNet使用的Transformer-XL作为框架,所以命名也很相似;XLNet-large中虽然支持了针对长序列的分段机制,但是去除了BERT中的NSP任务。

预训练语言模型的一些笔记总结_第3张图片

        XLNet是一种通用的自回归模型,既结合了 AR 和 AE 方法的优势,又避免了二者的缺陷。XLNet提出排列语言建模(Permutation Language Modeling),使用双流自注意力的方法实现。

        XLNet的还有一个改动是针对长文本序列,引入transformer-XL中的方法,使用片段循环机制(segment-level recurrence) 和新的相对位置编码(Relative Positional Encodings)方法。片段循环机制将文本输入拆成固定长度的片段,在上下文片段之间进行信息的传输;transformer中的位置信息使用的是绝对位置信息,所以为了保证信息的连贯,引入偏置项对相对位置进行编码。

roBERTa

RoBERTa全称:A Robustly Optimized BERT Pretraining Approach

        RoBERTa认为BERT存在训练不足的问题,提出了RoBERTa,其效果可以匹配或者优于后BERT方法以及XLNet,改进如下:1.训练时间更长,batch更大,数据更多;2.删除了NSP任务;3.序列更长;4.动态MASK

        RoBERTa可以看作还是为mask 语言模型挽尊,Facebook与google的扰动自回归模型XLNet算是杠上了。对于训练时间,训练数据的增加对模型效果的增加当然不用多说,而机器翻译中的经验说明当学习率提高时增加batch的大小可以调高训练速度和性能,所以batch size也增大了;而NSP任务,在之后的很多论文中也对其进行了质疑,所以对roBERTa对该任务的损失函数进行了移除,且使用了full-length序列。动态的mask机制是一个比较特别的优化,原始BERT只在数据预处理的时候进行一个mask,所以称为静态的mask。RoBERTa使用重复数据的方式,使每个序列有不同的mask结果被模型学习,结果显示效果有但感觉不是特别明显。对于文本编码方法使用byte-level BPE取代character-level BPE,这个其实是有利有弊的;论文还发现Adam算法中的参数调整能提高效果及稳定性。所以其实归根结底数据上的改动是性能提升的最大原因

Span-BERT

Span-BERT是Facebook的另一个BERT预训练模型。

预训练语言模型的一些笔记总结_第4张图片

        Span-BERT使用跨度的mask代替之前单个token的mask,然后再引入了一个新的目标函数SBO(跨越边界目标)。Span-BERT也是丢弃了NSP任务,使用和RoBERTa一样的full-length序列。span-mask是指mask连续的多个词,其中每个词的预测除了该词的MLM损失,还会加上SBO损失,SBO损失的输入为span前后词的词向量和当前词的位置向量。其他的一些变动:adam优化器参数的变动;动态mask(和RoBERTa相同);BERT中会以一个小概率采样短序列,SpanBERT尽可能使用长序列。由于span mask这个创新,Span-BERT在问答、指代消解等分词选择任务中取得了较大的进展。

ALBERT

ALBERT全称:A LITE BERT

        BERT的参数很多,模型网络很大,但是会受到硬件和内存的影响而训练部署成本高,而且简单增加BERT-large的隐层大小会使效果变得更差。现有的解决方法是模型的并行化和内存管理,但是还是不能解决通信和模型退化(并不能简单增加模型大小而提高模型性能)的问题。本文通过设计一个LiteBert(Albert)体系结构,其参数明显少于传统的BERT体系结构。

        ALBERT使用了两种参数约简的方法:1.词嵌入参数的因式分解。将大词表的嵌入矩阵分解成两个小的矩阵。这使得隐藏层的大小和词嵌入向量的大小分开。2.跨层的参数共享。ALBERT与BERT-large相同配置情况下,参数量少了18倍,训练速度提升1.7倍,而性能并没有太大的损失。同时参数约简技术也是一种正则化形式,它稳定了训练,并有助于泛化。

        词嵌入参数因式分解:在原BERT中,要求词向量的维度和隐藏层大小是一样的。但是实际中不应该是这样的:词向量是上下文无关的表示,而隐层向量是上下文相关的,所以隐层维度大小是要比词向量的维度是要大一些的。所以当增加隐层大小时就要同时增加词向量维度大小,但是考虑到词表太大,那么词向量矩阵就会很大,ALBERT通过矩阵分解技术将这个大矩阵分解成两个小矩阵,大大减少参数量。

        跨层的权重共享:全连接层与attention层都进行参数共享,也就是说共享encoder内的所有参数。

        针对原BERT中NSP任务的无效性,ALBERT提出一种自监督损失SOP(sentence-order prediction)来提升性能。原BERT中NSP无效的原因在于任务难度不够,因为反例的句子是来自不同文档,主题预测就可以分辨这个任务。而SOP任务是预测句子的顺序,避免了句子的主题,而强调句子的连贯性。

ELECTRA

ELECTRA全称:Efficiently Learning an Encoder that Classifies Token Replacements Accurately

        ELECTRA通过一个MLM的预训练模型作为生成器,加入一个判别器判断被mask的token。虽然有判别器和生成器,训练目标和GAN很相似,但是两者有几个关键性的不同点。1.如果生成器将mask的token预测对了,那么判别器的输出还是true。2.生成器和判别器之间没有对抗性,由于token之间是不连续的,所以判别器的梯度无法传给生成器,这也是GAN不能运用于NLP中的一大挑战。

预训练语言模型的一些笔记总结_第5张图片

        实验验证:

            权重共享: 生成器更新的是所有的embedding,判别器只是更新输入的token embedding。本文只使用了embedding sharing。

            模型大小:权重只共享了embedding,所以不需要两个模型结构相同。实验证明生成器的大小在判别器的1/4到1/2效果最好。

            ELECTRA提出了RTD(replaced token detection)的方法,这是一种新的语言表示学习的自我监督任务,其关键思想是训练文本编码器,以区分原始输入的正样本和由生成器网络产生的高质量负样本。与掩蔽语言建模相比,本文的预训练目标是更高的计算效率,并在下游任务上获得更好的性能,即使在使用相对较少的计算量时,也能很好地工作。

huawei-BERT :TinyBERT,NEZHA

        BERT虽然效果好,但是由于算力和内存的原因,很难部署到线上。TinyBERT使用蒸馏的方法,速度快8倍,模型小7倍,且性能没有明显下降。TinyBERT提出专门用于Transformer框架的两段式蒸馏方法;1.通用蒸馏阶段学习通用的嵌入表示。2.特定任务蒸馏阶段进行特定任务的微调。关于蒸馏的损失函数包含了四个:嵌入层的损失,隐层损失和自注意力矩阵损失,输出层的损失。论文中还提到了一种基于BERT model和glove的数据增强的方法。

预训练语言模型的一些笔记总结_第6张图片

       

预训练语言模型的一些笔记总结_第7张图片

        除了TinyBERT,华为诺亚方舟实验室又提出了NEZHA预训练模型,在模型,预训练和训练算法三个维度进行改进。其实改进大多是之前创新的集成,包括训练任务优化中的全词MASK(BERT-WWM  哈工大)和span预测任务,以及训练算法中的混合精度和LAMB优化器,而模型改进中使用了不同于之前的位置编码,相对位置函数式编码

ERNIE-baidu

        百度也提出了自己的预训练模型ERNIE,更适合中文NLP任务。ERNIE1.0相对于BERT改进了mask的策略,英文的词大都为单个token,而中文的有意义词信息通常为多个字符,BERT的mask方法会使词法信息丢失。所以ERNIE使用基于短语(phrase)和实体(entity)的mask,使模型更加适合中文任务。

预训练语言模型的一些笔记总结_第8张图片

        ERNIE通过对训练数据中的词法结构,语法结构,语义信息进行统一建模,增强通用语义表示能力。ERNIE2.0提出持续学习(任务增量训练),模型顺序训练不同的任务(逐渐增加任务,最终所有任务同时训练),分别构建了词法,语法,语义级别的预训练任务。词法任务:1.0中的mask;大小写预测;词和文档关系预测(关键词)。语法任务:句子重排;句子距离预测。语义任务:句子关系;句子相关性。

预训练语言模型的一些笔记总结_第9张图片

BERT-WWM    哈工大

        对于词的mask,ERNIE1.0使用的是mask短语和实体,而BERT之后也发布了全词的mask版本,哈工大技术报告对中文的全词mask策略和之前的mask策略进行了实验对比。TinyBERT中使用的就是哈工大的中文全词mask方法,就是根据中文分词的结果进行全词的mask,但还是对每个词的每个token进行mask,预测的还是每个token。

MTDNN  MASS微软

        MTDNN是多任务学习和预训练语言模型相结合。在某领域标注数据量不大的时候,多任务学习可以使用其他领域标注数据进行学习,且有正则化的效果。MTDNN使用BERT作为共享编码层,在顶部是特定的NLU任务,如单句分类、成对文本分类、文本相似性和相关性排序。针对不同的任务,最后的输出层的编码表示(词表示和[CLS]句子表示)和损失函数(softmax,sigmoid,similarity score)也会不同。训练过程分为预训练(与BERT的预训练相同)和多任务训练两个阶段。多任务训练不同于交替训练,也不同于ERNIE2.0的增量训练,而是使用联合训练:将所有task的batch训练数据混合成数据集D,每次从D中拿出一个任务的batch进行训练。

预训练语言模型的一些笔记总结_第10张图片

        MASS全称 Masked Sequence to Sequence Pre-training,主要针对的是序列到序列的自然语言生成任务。序列到序列任务需要同时使用编码器和解码器。

预训练语言模型的一些笔记总结_第11张图片

        与普通语言模型不同,MASS模型mask了编码器输入中连续的k个字符,而不是所有字符。该mask的方法的优点在于强制编码器区通过学习未被mask词的语义,而预测连续字符串也可以提升解码器的语言建模能力,使得编码器解码器联合训练。BERT和GPT只使用了编码器和解码器中的一个,两者可以看作是MASS的特例,当k=1时MASS可以看作是BERT,而k=序列长度m时可以看作是GPT。

ERNIE-thu

        ERNIE全称Enhanced Language Representation with Informative Entities,来自清华和诺亚方舟,与百度的模型同名,纯属巧合。

        ERNIE将知识图谱融入预训练语言模型中,使模型可以同时充分利用词汇、句法和知识信息。将外部知识结合到语言模型中的两个挑战:1.怎么进行知识的表征;2.怎么将字符信息和知识信息两个不同向量空间的信息进行融合。该模型对于知识谱图的实体使用知识嵌入算法整合到模型隐层中进行表征对齐;对于文本和知识的空间表示融合,在训练目标中加入了实体识别任务。模型分为了文本编码器和知识编码器两部分。

预训练语言模型的一些笔记总结_第12张图片

k-bert

         k-bert将知识图谱融入了语言模型中,而不仅仅是实体的知识表征,是将实体关系的三元组信息融入了预训练模型。k-bert使用的方法也是很巧妙,利用了掩码技术,引入了一个可见矩阵知识图谱融入模型要处理的问题:1.异构信息表示,清华的ERNIE使用了实体编码层处理这个问题,而k-bert直接以文本的形式将三元组实体关系加入模型中;2.知识噪声问题,将知识融入时,可能会因为加入的序列局部实体的知识信息会影响到全文序列的表示。k-bert通过一个可见矩阵,局部实体的知识信息只对局部可见。k-bert的融合方法简单可行(只需要修改位置编码,加入可见矩阵),可兼容bert类模型参数,直接加载已训练好的模型,无需重新进行预训练。

预训练语言模型的一些笔记总结_第13张图片

        以上。


参考阅读:

放弃幻想,全面拥抱Transformer:https://blog.csdn.net/malefactor/article/details/86500387

自然语言处理中的预训练技术发展史:https://blog.csdn.net/malefactor/article/details/83961886

NLP的巨人肩膀:https://www.jianshu.com/p/922b2c12705b

效果惊人的GPT 2.0模型:https://zhuanlan.zhihu.com/p/56865533

transformer和transformer-xl的解读:https://blog.csdn.net/qqywm/article/details/100091331

XLNet:运行机制及和Bert的异同比较:https://zhuanlan.zhihu.com/p/70257427

XLNet原理解读:https://blog.csdn.net/weixin_37947156/article/details/93035607

XLNet 理解:https://zhuanlan.zhihu.com/p/72902299

一文揭开ALBERT的神秘面纱:https://blog.csdn.net/u012526436/article/details/101924049

ELECTRA: 超越BERT, 19年最佳NLP预训练模型:https://new.qq.com/omn/20191106/20191106A0AQSU00.html

MT-DNN详解:https://zhuanlan.zhihu.com/p/56868716

超越BERT、GPT,微软提出通用预训练模型MASS:https://baijiahao.baidu.com/s?id=1633121924176585375&wfr=spider&for=pc

ERNIE:知识图谱结合BERT才是「有文化」的语言模型:https://blog.csdn.net/weixin_30834783/article/details/94833102

你可能感兴趣的:(自然语言处理)