爆款新模型全面碾压BERT?预训练语言模型井喷的2019

预训练语言模型简介

语言模型的任务是根据一个句子里的已知词预测句子里的未知词,在自动填充(如:在电子邮件书写过程当中的自动补全),机器翻译,语音识别等方向有着普遍的应用,传统的语言模型包括 n-gram,HMM 等。在 2003 年 Joshua Bengio 首次提出使用神经网络来建模语言模型,因为近期一系列有影响力的预训练语言模型的工做都是基于神经网络的,本章节将重点关注神经语言模型。算法

神经语言模型不只提供了强大的建模语言模型的工具,同时,也提供了词,句子以及文本的向量表示。2013 年诞生了被你们普遍使用的 Word2Vec,利用语言模型做为训练任务,获得词的向量表示,这里每一个词的向量表示是固定的,与上下文无关,例如:“bank”的词向量表示在“bank of China”和“river bank”这两个不一样的上下文里面都是同样的。2017 年 ELMo 利用双向 LSTM 获取了一个基于上下文的词向量表示(contextualized word embedding),使得每一个词的向量表示包含了上下文的语义信息,例如前面的例子里面,“bank”一词在使用 ELMo 获得的 embedding 在不一样的上下文是不同的。此后的一系列工做都采用了基于上下文的词向量表示。网络

一个革命性的工做是 2018 年诞生的 BERT,该工做将 Transformer 的架构引入了预训练语言模型,并开启了 Pretraining-Finetuning 的框架。该框架在预训练阶段基于大规模无监督语料进行两个预训练任务,分别是词级别和句子级别的,一个是 MLM(Masked Language Modeling),另一个是 NSP(Next Sentence Prediction),MLM 是从一个部分被 Mask 的句子恢复这些被 Mask 掉的确实词,NSP 是判断一个句对是否是上下句,从而获取基于上下文的词和句子的表示。在 Finetune 阶段,针对具体的下游任务,BERT 会微调中间层参数以调整词的 Embedding 以及调整预测层的参数,成功的将预训练学到的词和句子的表示迁移到下游任务中,实现了对低资源任务的有效支撑。架构

图片

预训练语言模型的发展示状app

因为 BERT 取得的巨大成功,2019 年在预训练语言模型方面涌现了一大批有效,实用而且带给人来启发的工做。因为篇幅有限,本文未能列举全部工做,只会挑选一些来阐述。下面在模型,预训练任务和算法三个维度进行总结。框架

模型方面ide

模型方面主要有如下几个方面的改进。函数

位置信息编码方式。BERT 的网络架构是一个多层的 Transformer 网络,因为 Transformer 并无直接考虑输入的 token 的位置信息,原始的 Transformer 模型和 BERT 分别采用了函数式和参数式的绝对位置编码方式,即每个位置上输入的 token 会叠加一个与位置信息相关的一个 embedding(这个 embedding 称为绝对位置编码:absolute position embedding,APE),前者的位置编码是一个与位置相关的函数,后者则是模型参数的一部分,在预训练过程当中学到的。此后,CMU 和 Google 提出的 Transformer-XL 和 XLNet 提出了相对位置编码方式,即在每一层计算隐状态的相互依赖的时候考虑它们之间的相对位置关系,这个相对位置信息表示为一个相对位置编码(relative position embedding,RPE),这两个工做均在相对位置编码中加入了可学习的参数。此后,华为发布的 NEZHA 模型使用了彻底函数式的相对位置编码(相对位置编码没有任何须要学习的参数),实验结果代表该位置编码方式使得模型在各个下游任务上的效果均获得明显提高。工具

词表 embedding 矩阵的分解与中间层的层共享。Google 发布的 ALBERT 针对词表 embedding 矩阵进行了矩阵分解,将原先的大小为 V*H 的词表 embedding 矩阵分解为两个大小分别为 V*E 和 E*H 的 low-rank 矩阵相乘的形式,其中 V,H 分别为词表大小以及模型隐状态维度,E 则是远小于 V 和 H 的值,于是这个方法有效的减小了词表 embedding 的参数。同时,该模型采用了层共享技术,并尝试了共享中间层多头注意力或者是 Feed Forward Network 的参数。实验证实该方法在显著少于原始 BERT 参数量的前提下在多个下游任务上大大超越了 BERT性能

预训练任务方面学习

在词级别的训练任务方面,一个为你们普遍使用且证实有效的方法是全词 Mask 技术。不一样于原始的 BERT 模型 Mask 单个 Token,该技术在 MLM 预训练任务中 Mask 整个词而不是单个 Token(以下图全词 Mask 方法 Mask 了一整个词“大兴”),进而提高了任务难度使得 BERT 学到更多语义信息。此任务在 Google 发布的英文 BERT 的训练以及哈工大和科大讯飞联合发布的中文 BERT 模型以及华为发布的 NEZHA 模型中获得了应用。

图片

百度发布的 ERNIE 模型在词法,句法以及语义方面分别引入了若干任务。词法方面,百度 ERNIE 采用了 Knowledge Masking 的方法,即 MLM 预训练任务中 Mask 若干实体。句法方面,其采用了句子重排序以及句子距离计算的任务。语义方面,百度 ERNIE 使用了大量来自搜索引擎的数据,采起了信息检索相关的任务。

CMU 和 Google 联合发布的 XLNet 框架统一了预训练语言模型的 Autoencoder 和 Auto-regressive 两种框架。预训练阶段,一改原始 BERT 经过引入 [MASK] 字符来恢复缺失词,XLNet 则是经过 Auto-regressive 的方式,逐个生成一个句子中的缺失词。这样的方式使得预训练和 Finetune 阶段都不须要引入 [MASK] 字符,解决了原始 BERT 的预训练和 Finetune 不一致(discrepancy)的问题(原始 BERT 的预训练语料中包含 [MASK] 字符而 Finetune 则不包含)。与此同时,Auto-regressive 的生成方式也使得生成词之间具备必定的依赖,后生成的词会依赖以前生成的词,解决了原始 BERT 中各个缺失词互相之间独立生成的问题。此外,训练过程当中,XLNet 还将一个句子的缺失词进行了屡次不一样顺序的生成,充分利用了语料的语义信息。

华盛顿大学和 Facebook 联合发布的 SpanBERT 模型还引入了 Span 预测任务,该任务 Mask 一个连续的 Span(例以下图中“场”,“很”,“不”三个字),利用 Span 先后的两个字的最上层表示(下图中的 x3 和 x7)以及待预测字的位置信息来预测该字,以下图中,待预测字为“不”,Span 预测任务会使用 x3,x7 和“不”这个字的位置信息(就是 x3 和 x6 还有 p7,即“不”这个字的绝对位置编码)来预测该字,“场”和“很”的预测也是一样的方法。该方法使得 Span 先后的字的表示会包含 Span 中字的语义信息,因为在训练过程当中,一个句子会被随机 Mask 不少次,因此句子中每一个字都有机会成为 Span 的先后字,进而使得各个字学到的表示都会包含周围 Span 的信息,Span 预测任务可以有效提升模型在下游的 Span 抽取任务(此任务的目标是获取一段文字中目标片断的开始和结束位置)的效果。

图片

斯坦福大学提出的 ELECTRA 模型采用了生成对抗式的方法训练模型。生成器采用了 BERT 模型,即一个 Denoising Autoencoder,恢复一个句子中被 Mask 的词,因为 BERT 不可能达到 100% 的复原,被恢复的词有一些是原句中的原词,有一些则被替换成了别的词。辨别器也是一个多层的 Transformer 网络,其训练任务是辨别生成器输出的句子中哪些词是原词,哪些是被替换的。在 ELECTRA 中,最终保留的是辨别器,因为预训练阶段,在生成器中,各个句子中的每个词的表示都被使用来进行一个二分类任务(便是否是原词),相比原始的 BERT(只有 15% 不到的词的表示被拿来作预测),ELECTRA 的 sample 的利用率很是之高,进而收敛很快,在相同的 FLOPS 的状况下,性能优于 BERT,ROBERTa 等一样规模的预训练语言模型。

训练算法

在训练算法方面,当前有两个普遍使用的方法。

第一个在训练过程当中变量的精度方面作了优化,此方法被称为混合精度训练(Mixed Precision Training),在传统的深度学习训练过程当中,全部的变量包括 weight,activation 和 gradient 都是用 FP32(单精度浮点数)来表示。而在混合精度训练过程当中,每个 step 会为模型的全部 weight 维护一个 FP32 的 copy,称为 Master  Weights,在作前向和后向传播过程当中,Master Weights 会转换成 FP16(半精度浮点数)格式,权重,激活函数和梯度都是用 FP16 进行表示,最后梯度会转换成 FP32 格式去更新 Master Weights。

第二个主要是优化算法方面的,此优化算法被称为LAMB 优化器,一般在深度神经网络训练的 Batch Size 很大的状况下(超过必定阈值)会给模型的泛化能力带来负面影响。而 LAMB 优化器经过一个自适应式的方式为每一个参数调整 learning rate,可以在 Batch Size 很大的状况下不损失模型的效果,使得模型训练可以采用很大的 Batch Size,进而极大提升训练速度。在训练 BERT 的研究中,使用 LAMB 优化器在不损失模型效果的前提下,Batch Size 达到了超过 30k,使得 BERT 的训练时间从 3 天降到了 76 分钟。

总结与展望

预训练语言模型在大规模无监督文本上进行预训练,将获得的词和句子的表示成功迁移到普遍的下游任务上,并取得了巨大成功,尤为对于低资源场景。2019 年涌现出的一大批在预训练语言模型的探索工做主要围绕在预训练任务方面,经过设计任务使模型学到更加丰富有效的语义信息。

在将来,笔者认为预训练语言模型还有着巨大的发展空间。

笔者认为模型方面的发展方向有两条线:1,模型效果方面,根据 XLNet 的实验,咱们看到当前即便 large 量级的模型还只能 underfit 海量的数据,所以,模型方面就效果而言还有很大的改进空间;2,训练效率方面,当前的训练各个预训练语言模型在几十块 GPU 的算力下仍是须要若干天,算力和资金消耗巨大,如何巧妙设计模型,下降冗余的计算也是一个重要问题。

此外,2019 年的大部分工做是基于 BERT 作了不少尝试性的工做,好比:函数式相对位置编码方面,通过尝试发现效果好,但彷佛缺乏针对性,笔者认为这是在模型的理论方面可解释性不够形成的,咱们很难理解 Transformer 架构到底有什么欠缺,到底哪里学很差,每一部分到底起到什么做用,于是很难有针对性的改进方案。现有的解释性工做大多集中在解释预训练语言模型的功能,如:学到的词表示是否可以作词法和句法分析等,原理性的解释比较少,北京大学提出的 MacaronNET 是一个很好的原理方面的解释性工做,用偏微分方程解释 Transformer 的工做原理,从数学的角度准肯定量地阐释了 Transformer 的机制,不过确实须要很强的数学功底才能吃透,2020 期待更多这方面的工做。

相关文章
相关标签/搜索