RoBERTa模型详解和实践

Robustly optimized BERT approach.

内容介绍:

  1. RoBERTa改进思路和原文详解
  2. bert4keras工具使用
  3. 基于RoBERTa的2020语言与智能技术竞赛-阅读理解任务实战

代码:基于RoBERTa的2020语言与智能技术竞赛-阅读理解任务实战(Colab)
工具:bert4keras
论文:https://arxiv.org/pdf/1907.11692.pdf
CLUE阅读理解排行榜:https://www.cluebenchmarks.com/rc.html

1. 介绍

文章由Facebook和华盛顿大学于2019年7月发表,发表于arxiv。 文章简介:BERT 模型在各个自然语言处理任务中展现出 SOTA 的效果,文章在 BERT模型的基础上提出了 BERT 模型的改进版 RoBERTa,使其获得了更好的自然语言任务处理 效果,并在 GLUE,SQuAD,RACE 三个榜上取得最好的SOTA。

2. 文章贡献:

  1. 提出了一套重要的 BERT 设计选择和训练策略,并引入了能够提高下游任务性能的备选方案;
  2. 使用一个新的数据集CCNEWS,并确认使用更多的数据进行预训练可以进一步提高下游任务的性能;
  3. 本文的训练改进表明,在正确的设计选择下,预训练的 masked language model 与其 他所有最近发表的方法相比都更具有竞争力。 同时发布了在 PyTorch 中实现的模型、预训 练和微调代码。

3. 模型细节

3.1 更多数据(More Data)

文章基于 BERT 提出了一种效果更好的预训练模型训练方式,其主要的区别如下: 训练数据上,RoBERTa 采用了 160G 的训练文本,而 BERT 仅使用 16G 的训练文本, 其中包括:

  1. Books Corpus + English Wikipedia (16GB):BERT原文使用的之数据
  2. CC-News(76GB): 自 CommonCrawl News 数据中筛选后得到数据,约含6300万篇新闻,2016年9月-2019年2月。
  3. OpenWebText(38GB):该数据是借鉴GPT2,从Reddit论坛中获取,karma取点赞数大于3的内容。
  4. Storie(31GB):同样从CommonCrawl获取,属于故事类数据,而非新闻类。

XLNet:

  1. BooksCorpus + English Wikipedia (13GB)
  2. Giga5 (16GB)
  3. ClueWeb 2012B (19GB)
  4. Common Crawl (78GB)
    数据量更大,RoBERTa有160+GB,而 XLNet却只有126GB。

3.2 更多训练(More Steps)

最多达 500 K 500K 500K步

3.3 更大批次(Large Batch)

批量(batch),常规设置128,256等等便可,如 BERT则是256,RoBERTa 在训练过程中使用了更大的批数量。研究人员尝试过从 256 到 8000 不等的批数量。

3.4 Adam优化

Adam借鉴了Kingma等人的改进,使用 β 1 = 0.9 \beta_{1}=0.9 β1​=0.9、 β 2 = 0.999 \beta_{2}=0.999 β2​=0.999、 ϵ = 1 e − 6 \epsilon=1 \mathrm{e}-6 ϵ=1e−6 并且 L 2 L_2 L2​的衰减权重设置为0.01,在前 10000 steps 是warmed up学习率是 1 e − 4 1e-4 1e−4,并且是线性的衰减。

所有层和Attention权重的dropout=0.1,预训练模型训练1,000,000 steps,最小batch 256 最大batch 512

此操作类似于Transformer训练时候的学习率变化,下图是训练时候的优化器代码。

3.5 Next Sentence Prediction

Next Sentence Prediction (NSP)
数据生成方式和任务改进:取消下一个句子预测,并且数据连续从一个文档中获得

作者进行了多组实验:

  1. 真实句子对 + NSP
  2. 成对句子段 + NSP ( BERT )
  3. 连续长句拼接,句子可跨文档 (无NSP)
  4. 同上,句子不可跨文档 (无 NSP)

总体效果就是 1<2<3<4

  • 真实句子过短,不如拼接成句子段
  • 无NSP任务,略好过有NSP
  • 不跨文档好过跨文档

3.6 Text Encoding

Byte-Pair Encoding(BPE)是字符级和词级别表征的混合,支持处理自然语言语料库中的众多常见词汇。

原版的 BERT 实现使用字符级别的 BPE 词汇,大小为30K,是在利用启发式分词规则对输入进行预处理之后学得的。Facebook 研究者没有采用这种方式,而是考虑用更大的byte级别BPE词汇表来训练BERT。roberta使用unicode的bytes进行编码,用于学习高频字节的组合,添加到原有词表中。词表总50M大小,比 b e r t b a s e bert_{base} bertbase​增加了15M, B e r t l a r g e Bert_{large} Bertlarge​增加了20M。且没有对输入作任何额外的预处理或分词。

因为Unicode其实不是一种编码, 而是定义了一个表, 表中为世界上每种语言中的每个字符设定了统一并且唯一的码位 (code point),以满足跨语言、跨平台进行文本转换的要求。在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符



详情可以阅读unicode编码简介

3.7 Masking

3.7.1 全词Masking(Whole Word Masking)

Whole Word Masking (wwm),暂翻译为全词Mask整词Mask,是谷歌在2019年5月31日发布的一项BERT的升级版本,主要更改了原预训练阶段的训练样本生成策略。
简单来说,原有基于WordPiece的分词方式会把一个完整的词切分成若干个子词,在生成训练样本时,这些被分开的子词会随机被mask。
全词Mask中,如果一个完整的词的部分WordPiece子词被mask,则同属该词的其他部分也会被mask,即全词Mask

需要注意的是,这里的mask指的是广义的mask(替换成[MASK];保持原词汇;随机替换成另外一个词),并非只局限于单词替换成[MASK]标签的情况。
更详细的说明及样例请参考:#4

同理,由于谷歌官方发布的BERT-base, Chinese中,中文是以为粒度进行切分,没有考虑到传统NLP中的中文分词(CWS)。
我们将全词Mask的方法应用在了中文中,使用了中文维基百科(包括简体和繁体)进行训练,并且使用了哈工大LTP作为分词工具,即对组成同一个的汉字全部进行Mask。

下述文本展示了全词Mask的生成样例。
注意:为了方便理解,下述例子中只考虑替换成[MASK]标签的情况。

3.7.2 动态 Mask(dynamic masking)

听起来似乎很是厉害,然而却只是一个很简单改进。

BERT依赖随机掩码和预测token。原版的BERT实现在数据预处理期间执行一次掩码,得到一个静态掩码。而RoBERTa使用了动态掩码:每次向模型输入一个序列时都会生成新的掩码模式。这样,在大量数据不断输入的过程中,模型会逐渐适应不同的掩码策略,学习不同的语言表征。

4. 模型评估

模型主要基于三个基准来评估:

  1. GLUE 通用语言理解评估(GLUE)
  2. SQuAD 斯坦福问题答疑数据集(SQuAD)
  3. RACE 考试的重新理解(RACE)

4.1 训练时间

GPU(原文)

L = 24 L=24 L=24, H = 1024 H=1024 H=1024,参数 A = 16 , 355 M A=16, 355M A=16,355M, 100 K 100K 100K Steps

TPU(复现)

总共训练了近 20 万,总共见过近 16 亿个训练数据 (instance); 在 Cloud TPU v3-256 上训练了 24 小时,相当于在 TPU v3-8(128G 显存) 上需要训练一个月

4.2 实验

最后的 GLUE 的实验结果如下图所示:

SQuAD 的结果如下图所示:

RACE 的结果如下图所示:

实验汇总

RoBERTa (Robustly optimized BERT approach)

首先看RoBERTa,BERT,XLNet 对比,三个模型均在Books + Wiki 数据集上进行训练,通过对比可以发现,改进后的RoBERTa相比于BERT有很大的提升,想必是larger batch,dynamic masking,与 no next sentence prediction等带来的增益。并且与XLNet模型相比,也有一定的提升,但是个人认为XLNet用相同数据和方法训练,效果应该更好。横向看XLNet与RoBERTa大批量与多步数对比,由于训练条件不同,效果很难比较。纵向看, 训练越多,性能越好。

总结

RoBERTa包括如下改进

  1. 数据生成方式和任务改进:取消下一个句子预测,并且数据连续从一个文档中获得。
  2. 更大更多样性的数据:使用 30G 中文训练,包含 3 亿个句子,100 亿个字 (即 token)。由于新闻、社区讨论、多个百科,保罗万象,覆盖数十万个主题,共160+G数据。
  3. Byte-Pair Encoding(BPE)是字符级和词级别表征的混合。
  4. 训练更久:超过500k steps
  5. 更大批次:使用了超大(8k)的批次 batch size。
  6. 调整优化器的参数。
  7. 使用全词 mask(whole word mask)和动态的mask。

参考

  1. 中文任务基准测评
  2. RoBERTa:高级丹药炼制记录
  3. unicode编码简介
  4. RoBERTa中文预训练模型,你离中文任务的「SOTA」只差个它

欢迎关注 一起成长

【深度学习】RoBERTa模型详解和实践相关推荐

  1. 深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te

    深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) 机器之心 2017-06-25 12:27 阅读:108 摘要:参与:李泽南.李亚洲本周一(6月19日)机器之心发表文章<我的深 ...

  2. 从未看过如此详细的深度学习推荐系统应用详解,读它!

    作者丨gongyouliu 编辑丨zandy 来源 | 大数据与人工智能(ID:ai-big-data) [导读]2016年DeepMind开发的AlphaGo在围棋对决中战胜了韩国九段选手李世石,一 ...

  3. 深度学习 --- 玻尔兹曼分布详解

    上一节我们从Hopfield神经网络存在伪吸引子的问题出发,为了解决伪吸引子带来的问题,详细介绍了模拟退火算法,本节也是基础性的讲解,为了解决伪吸引子还需要引入另外一个重要概念即:玻尔兹曼分布.本篇将 ...

  4. 深度学习 --- BP算法详解(BP算法的优化)

    上一节我们详细分析了BP网络的权值调整空间的特点,深入分析了权值空间存在的两个问题即平坦区和局部最优值,也详细探讨了出现的原因,本节将根据上一节分析的原因进行改进BP算法,本节先对BP存在的缺点进行全 ...

  5. TensorFlow 学习指南:深度学习系统构建详解

    内容简介 面向广泛的技术受众(从数据科学家.工程师到学生和研究人员),本书介绍了 TensorFlow 的基本原理和实践方法.从 TensorFlow 中的一些基本示例开始,深入探讨诸如神经网络体系结 ...

  6. 深度学习各种优化函数详解

    深度学习中有众多有效的优化函数,比如应用最广泛的SGD,Adam等等,而它们有什么区别,各有什么特征呢?下面就来详细解读一下 一.先来看看有哪些优化函数 BGD 批量梯度下降 所谓的梯度下降方法是无约 ...

  7. 深度学习归一化算法详解(BN,LN,IN,GN)

    目录 一.Batch Normalization(BN) 1.1为什么提出BN? 1.2BN的基本原理和公式 1.3BN在神经网络中的实现 1.4BN的优点和缺点 二.LN,IN,GN的原理和适用范围 ...

  8. 深度学习 --- BP算法详解(流程图、BP主要功能、BP算法的局限性)

    上一节我们详细推倒了BP算法的来龙去脉,请把原理一定要搞懂,不懂的请好好理解BP算法详解,我们下面就直接把上一节推导出的权值调整公式拿过来,然后给出程序流程图,该流程图是严格按照上一节的权值更新过程写 ...

  9. 深度学习生态圈【详解深度学习工具Keras】

    文章目录: 1 CNTK 2 Tensorflow2.1 介绍2.2 安装2.3 简单例子 3 Keras3.1 介绍3.2 安装Keras3.3 使用Keras构建深度学习模型3.4 一个例子 4 ...

最新文章

  1. jQuery图片轮播
  2. 【数理知识】《矩阵论》方保镕老师-第8章-矩阵在数学内外的应用
  3. linux中mpich的运行线程,贝叶斯法构建进化树:MrBayes
  4. java网络接口_java网络编程之识别示例 获取主机网络接口列表
  5. 【转】设计模式学习笔记之命令模式
  6. 没了IDE,你的Java项目还能Run起来吗~
  7. python+webdriver(二)
  8. sketch 52.2 中文破解版发布 附下载地址
  9. 坐标转换c语言,坐标转换代码实现及详细讲解
  10. Python print() 函数,在同一行打印
  11. 大数据hive篇--同比环比
  12. php获取七牛上传token失效,上传文件到七牛时,bad token了怎么处理?
  13. 【2020-8-9】APM,PX4,GAZEBO,MAVLINK,MAVROS,ROS之间的关系以及科研设备选型
  14. 期权都是废纸?——创业公司的期权、股票与回报
  15. 特斯拉设计师评苹果造车:痴人说梦,缺乏创新
  16. java 文件名排序_Java笔记:像win里一样文件名排序
  17. matlab ssd检测,基于SSD神经网络的违章停车车辆实时检测方法与流程
  18. 中国类脑计算先行者:在AI“无人区”探路
  19. 最小公倍数Java描述,甲每秒跑3米,乙每秒跑4米,丙每秒跑2米, 三人沿600米的环形跑道从同一地点同时同方向跑步, 经过多少时间三人又同时从出发点出发?
  20. 风火之旅 需要的信息保存

热门文章

  1. NFV和VNF的区别和联系
  2. Mybatis_第二节:CRUD(增删改查)
  3. Revit二次开发——读取cad中的文字信息
  4. Macfee打造自己的安全系统
  5. win7无法启动承载网络问题
  6. Promise方法 理解 封装
  7. 关于with open() as f读取文件时编码报错问题
  8. C语言写计算器(最多只可实现浮点型带一层括号的混合运算)
  9. 计算机专业新生表演,沙场秋点兵 学子展风采 ——计算机专业部在2020级新生军训汇报表演中喜获佳绩...
  10. idea报 @Override is not allowed when implementing interface method解决方法