少年一梦|BERT面向语言理解的深度双向变换预训练
BERT:Pre-trainingofDeepBidirectionalTransformersforLanguageUnderstanding
原文:
作者:GoogleAI团队
译者:Tony
时长:2K+字 , 约5分钟
说明:为了方便理解 , 未一对一翻译 , 仅翻译了主要内容 , 并进行了重新组织
摘要
Google提出了一种新型的语言表征模型BERT(BidirectionalEncoderRepresentationsfromTransformers) 。 ELMo只是在顶层连接左上下文和右上下文 , OpenAIGPT只考虑左上下文 , 而BERT在每一层都融合了左上下文和右上下文 , 是一个预训练的深度双向表征 。 只需要在BERT上以微调方式增加一个输出层 , 就可以在11个NLP任务上取得了最新水平 , 包括:GLUE达到80.4%(提高了7.6%);MultiNLI达到86.7%(提高了5.6%);SQuADv1.1F1达到93.2(提高了1.5) , 比人类还要高2.0 。
1引言
Google认为有两种方法可以将预训练的语言表征应用到下游NLP任务中:基于特征的方法和基于微调的方法 。 基于特征的方法是把语言表征作为下游特定任务模型的特征 , 例如ELMo;基于微调的方法是直接在语言表征模型的基础上微调 , 作为下游特定任务模型 , 例如OpenAIGPT 。 这两种方法都是使用无向语言模型来学习通用语言表征 , 这限制了预训练表征的能力 , 例如sentence-level任务中的局部最优 , 在token-level任务中微调是毁灭性的 , 需要双向上下文才能解决 。
为此 , Google提出了BERT 。 BERT引入两种新的机制:一是maskedlanguagemodel(MLM) , 它随机mask一些输入token , 根据上下文预测mask的token;二是nextsentenceprediction(NSP)任务 , 它可以联合训练文本对表征 。
Google认为他们有三点贡献:一是指出双向预训练语言表征的重要性;二是预训练表征不需要很重的特定任务架构 , 基于预训练表征架构微调即可应用到下游NLP任务中;三是BERT在11个NLP任务中取得最先进水平 , 并通过剥离实验证明双向表征起了最重要的作用 。
2相关工作
2.1基于特征的方法
相比从零开始学习的词表征 , 预训练词表征作为下游NLP任务模型的特征使用 , 虽然下游NLP任务模型的参数需要从零开始训练 , 但是模型的性能有显著地提升 。 这些方法泛化到粗粒度的句表征和段表征 。 ELMo也是基于特征的方法 , 不过相比传统的词表征 , ELMo是语境化的词表征 , 在一些NLP任务中取得了最先进水平 , 例如:问答、情感分析、命名实体识别等 。
2.2基于微调的方法
基于微调的方法也是一个趋势 , 它首先预训练语言模型架构 , 然后通过微调方式 , 将预训练的语言模型架构直接应用到下游NLP任务中 。 这样做的一个优点是:复用大多数参数 , 只有少量的参数需要从零开始训练 。 OpenAIGPT在GLUE基准的sentence-level任务中取得最先进水平 。
2.3监督数据迁移学习
一些研究表明 , 先在大型数据集上监督学习 , 然后迁移到其他任务上 , 也是有效的 , 例如自然语言推理、机器翻译 。
3BERT
3.1模型架构
BERT是一个多层双向Transformer编码器 , 其中 , 层数记为L、隐含单元个数记为H、自我注意力头数记为A , 前馈全连接单元个数记为4H 。 Google给出了两种模型:一是BERT_BASE:L=12 , H=768 , A=12 , 参数总个数为110M;二是BERT_LARGE:L=24 , H=1024 , A=16 , 参数总个数为340M 。 BERT_BASE大小同OpenAIGPT , 主要是为了比较 。 BERTTransformer使用双向自我注意力模型 , 记作Transformerencoder , GPTTransformer使用单向自我注意力模型 , 记作Transformerdecoder , EMLo在各层单独使用单向LSTM , 在顶层连接双向LSTM , 比较如图1所示 。
为了训练一个深度双向表征 , BERT模型会随机mask一定比例的输入token , 这个过程叫maskedLM(MLM) 。 在BERT中 , mask比例为15% , 相比auto-encoder , BERT只预测mask的token , 而不是重构整个输入token 。 mask过程如下:80%机会使用[MASK] , 10%机会使用随机词 , 10%机会使用原词 。
3.3.2Task#2:NSP
语言模型无法直接捕获两条语句之间的关系 , 例如:问答、自然语言推理 。 BERT构造语句对A和B , 其中B有50%概率是真实的 , 50%概率是假的 。 例如:
Input=[CLS]themanwentto[MASK]store[SEP]
heboughtagallon[MASK]milk[SEP]
Label=IsNext
Input=[CLS]theman[MASK]tothestore[SEP]
penguin[MASK]areflight##lessbirds[SEP]
Label=NotNext
通过NSP , QA和NLI的精确度达到97%-98% 。
3.4预训练过程
BERT联合使用了BooksCorpus(800Mwords)和EnglishWikipedia(2,500Mwords) 。 语料库共有3.3billion个词 , 使用40个epoch , 每个epoch有1,000,000个批次 , 每个批次256个语句 , 每个语句512个token , 即每批次128,000个token 。 使用Adam , 其中 , LR=1e-4 , β1=0.9 , β2=0.999 , L2权重衰减为0.01 , LR在前10,000步中逐渐上升 , 然后线性下降;所有层dropout概率为0.1;使用gelu激活函数;loss函数是平均maskedLM似然和平均nextsentenceprediction似然之和 。 BERT_BASE使用4个CloudTPU(16个TPUchips) , BERT_LARGE使用16个CloudTPU(64个TPUchips) , 训练需要4天 。
3.5微调过程
BERT微调和预训练的绝大多数超参是一样的 , 不一样的有:batchsize、LR和epoch数量 , dropout概率是依旧是0.1 , 批次大小为16、32 , Adam学习率为5e-5、3e-5、2e-5 , epoch数量为3、4 。
3.6BERT和OpenAIGPT比较
GPT的语料库是BooksCorpus(800M个单词) 。 BERT的语料库是BooksCorpus(800M个单词)和Wikipedia(2,500M个单词) 。
GPT在微调阶段使用[SEP]分割语句 , 使用[CLS]分类token 。 BERT在预训练阶段使用[SEP]、[CLS]、A/B语句嵌入 。
GPT使用1M个批次 , 每批次32,000个词 。 BERT使用1M个批次 , 每批次128,000个词 。
GPT在所有微调任务中使用相同的学习率5e-5 。 BERT在不同的微调任务中使用不同的学习率 。
4评估
BERT在11个任务中取得了最先进水平 , 11个任务分四类 , 如图3所示:
MaskedLM和NSP是性能提升的关键 , 见表5:
- 少年帮|纯国产“龙芯”即将来临,正式确认?中科院宣布决定
- 柠檬少年|一加8pro的使用开箱及初体验
- 光一样的少年|必须试试,受够了电脑弹窗广告的你
- 少年与时光|多吃此水果,改善口臭,每吃一口都高营养,要想口气清新平易近人
- 暖夏少年|联发科就华为做出行动,国内科技巨头态度明确,台积电已经放弃
- 暖夏少年|A13+双1200万相机,苹果紧急清仓了,全球最畅销的机型
- 暖夏少年|世界上最顶尖的技术都在哪些国家?
- 脑极体|华为的桨,少年的歌,物联网的银河
- 柠檬少年|英伟达这次直接把牙膏挤穿了……,没听小编买20显卡的都哭了
- 柠檬少年|Windows摇身一变成Mac,我的天