【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

解读预训练语言模型的 2019:爆款新模型井喷,BERT 要被全面碾压了吗?

  • 2019-12-31
  • 本文字数:4531 字

    阅读完需:约 15 分钟

解读预训练语言模型的2019:爆款新模型井喷,BERT要被全面碾压了吗?

本文是 InfoQ“解读 2019”年终技术盘点系列文章之一。


自 Google 在 2018 年推出预训练语言模型 BERT,在 11 项 NLP 任务上达到最高水平,预训练语言模型的研究与应用成为学术界和工业界广泛关注的重点,被认为开启了自然语言处理的新篇章。在 2019 年各大公司和高校陆续发布了自己的预训练语言模型,如:Facebook 发布的 RoBERTa,CMU 发布的 XLNet,Stanford 发布的 ELECTRA,还有百度的 ERNIE 模型等,不断刷新自然语言理解任务的最高表现,并且在细粒度舆情分析,序列化推荐等不同场景下展现了巨大的应用价值。本文着重对预训练语言模型的重要意义,当前的发展,包括模型,训练方法等进行了总结、回顾与探讨,也欢迎同行业的学者,专家交流指正。

预训练语言模型简介

语言模型的任务是根据一个句子里的已知词预测句子里的未知词,在自动填充(如:在电子邮件书写过程中的自动补全),机器翻译,语音识别等方向有着广泛的应用,传统的语言模型包括 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 以及调整预测层的参数,成功的将预训练学到的词和句子的表示迁移到下游任务中,实现了对低资源任务的有效支撑。


预训练语言模型的发展现状

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

模型方面

模型方面主要有以下几个方面的改进。


位置信息编码方式。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 矩阵进行了矩阵分解,将原先的大小为 VH 的词表 embedding 矩阵分解为两个大小分别为 VE 和 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 期待更多这方面的工作。


作者介绍


魏俊秋博士,华为高级技术专家,华为诺亚方舟实验室语音语义组的研究员,博士毕业于香港科技大学计算机系,本科毕业于南京大学。长期从事时空数据分析、主题模型、预训练语言模型的研究,在国际顶级会议和期刊,如:SIGMOD、TKDE、ICDM、TKDD 发表论文数篇,并曾在国际知名会议,如:COLING、BIG DATA、BiGComp、PAKDD 担任程序委员会委员。


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-12-31 14:134094
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 493.1 次阅读, 收获喜欢 1966 次。

关注

评论

发布
暂无评论
发现更多内容

SwitchResX for mac自定义分辨率时遇到的问题汇总

魔仙苹果mac堡

Mac软件 电脑分辨率 SwitchResX下载 SwitchResX常见问题

优秀的录屏软件:Record It Pro 直装激活版

真大的脸盆

Mac Mac 软件 录屏 屏幕录制 录屏软件

Stepn跑鞋GMT系统开发(NFT链游)

薇電13242772558

NFT链游

Final Cut Pro资源库占用内存太大如何释放磁盘空间?

魔仙苹果mac堡

FCPX下载 fcpx Final Cut Pro空间不足 fcpx中文版

学完阿里P8面试官推荐的Java高并发核心编程文档后终拿蚂蚁offer

程序知音

Java 并发编程 编程语言 高并发 java架构

PostgreSQL:psql 介绍

天翼云开发者社区

AI笔刷怎样导入?adobe ai笔刷安装教程

Rose

AI画笔 AI教程 Illustrator 2023 下载 AI中文版

大语言模型(LLMs)和新兴机器学习技术栈

Baihai IDP

人工智能 自然语言处理 NLP 大模型 大模型 白海科技

使用 Pixelmator Pro,打印出最完美的照片效果

魔仙苹果mac堡

Mac修图软件 Pixelmator Pro破解 Pixelmator Pro中文 Pixelmator Pro下载

HTML5智慧农业大棚Web3D可视化系统

2D3D前端可视化开发

智慧大棚 智慧农业 数字农业 大棚三维可视化 数字孪生智慧大棚

Linux进程学习【进程地址】

Yohifo

Linux 学习 运维 后端 进程

ChatGPT4 高分通过数据库系统工程师(DBA)认证

NineData

数据库 dba GPT ChatGPT4 数据库系统工程师

云计算搭上“双碳”,天翼云在绿色算力赛道加速跑

天翼云开发者社区

听说火山引擎推出的DataLeap,已经可以支持万级表的数据血缘图谱了!

字节跳动数据平台

大数据 数据治理 数据研发 企业号 3 月 PK 榜

解决苹果无线鼠标、键盘或触控板无法被 Mac 识别的方法

魔仙苹果mac堡

mac系统 苹果无线鼠标 触控板 无法被mac识别

共铸国云智领未来| 以数字林草之“笔” 绘就塞上江南新图景

天翼云开发者社区

全球掀起AI热,天翼云智算能力已就绪!

天翼云开发者社区

第四朵“云”!全托管的时序数据云平台 TDengine Cloud 正式支持阿里云

TDengine

大数据 tdengine 阿里云 时序数据库 云服务

专场直播预约 | 邀您探讨KaiwuDB 离散制造业场景解决方案

墨天轮

数据库 解决方案 制造业 国产数据库 KaiwuDB

Ascend CL两种数据预处理的方式:AIPP和DVPP

华为云开发者联盟

人工智能 华为云 昇腾CANN 华为云开发者联盟 企业号 3 月 PK 榜

通通透透看无服务器计算:由来、场景和问题

天翼云开发者社区

代码质量与安全 | 免费的静态分析工具好吗?

龙智—DevSecOps解决方案

SAST 静态代码扫描 DAST

AntDB-M数据库锁分析,不要错过!

亚信AntDB数据库

数据库 AntDB 国产数据库 AntDB数据库 企业号 3 月 PK 榜

盘活存储资源,天翼云HBlock助力企业绿色高效发展!

天翼云开发者社区

开启一个A/B实验到底有多简单?

字节跳动数据平台

云服务 AB testing实战 ab测试 企业号 3 月 PK 榜

Neural Filters神经滤镜插件如何安装?PS神经滤镜插件安装教程

Rose

mac系统 Neural Filters PS滤镜插件 PS20221下载

大语言模型必将取代一切?暂时不会!

深数

人工智能 科技 AGI GPT LLM

深入理解关键字volatile

小小怪下士

Java 程序员 volatile 关键字

Perforce研讨会回顾 | Helix Core在芯片行业的应用实例:芯片项目的版本控制、持续集成及自动化

龙智—DevSecOps解决方案

ci cicd 版本控制 持续集成 芯片开发

简单小巧的右键助手:MouseBoost for Mac让您的工作效率大幅度提高

Rose

mac效率工具 右键助手 MouseBoost激活版

Atlassian Server用户新选择 | 迁移到数据中心版前,您需要做这些准备(1)

龙智—DevSecOps解决方案

Atlassian Atlassian迁移 数据中心版 server版

解读预训练语言模型的2019:爆款新模型井喷,BERT要被全面碾压了吗?_AI&大模型_魏俊秋_InfoQ精选文章