【深度学习】RoBERTa模型详解和实践
RoBERTa模型详解和实践
Robustly optimized BERT approach.
内容介绍:
- RoBERTa改进思路和原文详解
- bert4keras工具使用
- 基于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. 文章贡献:
- 提出了一套重要的 BERT 设计选择和训练策略,并引入了能够提高下游任务性能的备选方案;
- 使用一个新的数据集CCNEWS,并确认使用更多的数据进行预训练可以进一步提高下游任务的性能;
- 本文的训练改进表明,在正确的设计选择下,预训练的 masked language model 与其 他所有最近发表的方法相比都更具有竞争力。 同时发布了在 PyTorch 中实现的模型、预训 练和微调代码。
3. 模型细节
3.1 更多数据(More Data)
文章基于 BERT 提出了一种效果更好的预训练模型训练方式,其主要的区别如下: 训练数据上,RoBERTa 采用了 160G 的训练文本,而 BERT 仅使用 16G 的训练文本, 其中包括:
- Books Corpus + English Wikipedia (16GB):BERT原文使用的之数据
- CC-News(76GB): 自 CommonCrawl News 数据中筛选后得到数据,约含6300万篇新闻,2016年9月-2019年2月。
- OpenWebText(38GB):该数据是借鉴GPT2,从Reddit论坛中获取,karma取点赞数大于3的内容。
- Storie(31GB):同样从CommonCrawl获取,属于故事类数据,而非新闻类。
XLNet:
- BooksCorpus + English Wikipedia (13GB)
- Giga5 (16GB)
- ClueWeb 2012B (19GB)
- 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)
数据生成方式和任务改进:取消下一个句子预测,并且数据连续从一个文档中获得
作者进行了多组实验:
- 真实句子对 + NSP
- 成对句子段 + NSP ( BERT )
- 连续长句拼接,句子可跨文档 (无NSP)
- 同上,句子不可跨文档 (无 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. 模型评估
模型主要基于三个基准来评估:
- GLUE 通用语言理解评估(GLUE)
- SQuAD 斯坦福问题答疑数据集(SQuAD)
- 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包括如下改进
- 数据生成方式和任务改进:取消下一个句子预测,并且数据连续从一个文档中获得。
- 更大更多样性的数据:使用 30G 中文训练,包含 3 亿个句子,100 亿个字 (即 token)。由于新闻、社区讨论、多个百科,保罗万象,覆盖数十万个主题,共160+G数据。
- Byte-Pair Encoding(BPE)是字符级和词级别表征的混合。
- 训练更久:超过500k steps
- 更大批次:使用了超大(8k)的批次 batch size。
- 调整优化器的参数。
- 使用全词 mask(whole word mask)和动态的mask。
参考
- 中文任务基准测评
- RoBERTa:高级丹药炼制记录
- unicode编码简介
- RoBERTa中文预训练模型,你离中文任务的「SOTA」只差个它
欢迎关注 一起成长
【深度学习】RoBERTa模型详解和实践相关推荐
- 深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te
深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) 机器之心 2017-06-25 12:27 阅读:108 摘要:参与:李泽南.李亚洲本周一(6月19日)机器之心发表文章<我的深 ...
- 从未看过如此详细的深度学习推荐系统应用详解,读它!
作者丨gongyouliu 编辑丨zandy 来源 | 大数据与人工智能(ID:ai-big-data) [导读]2016年DeepMind开发的AlphaGo在围棋对决中战胜了韩国九段选手李世石,一 ...
- 深度学习 --- 玻尔兹曼分布详解
上一节我们从Hopfield神经网络存在伪吸引子的问题出发,为了解决伪吸引子带来的问题,详细介绍了模拟退火算法,本节也是基础性的讲解,为了解决伪吸引子还需要引入另外一个重要概念即:玻尔兹曼分布.本篇将 ...
- 深度学习 --- BP算法详解(BP算法的优化)
上一节我们详细分析了BP网络的权值调整空间的特点,深入分析了权值空间存在的两个问题即平坦区和局部最优值,也详细探讨了出现的原因,本节将根据上一节分析的原因进行改进BP算法,本节先对BP存在的缺点进行全 ...
- TensorFlow 学习指南:深度学习系统构建详解
内容简介 面向广泛的技术受众(从数据科学家.工程师到学生和研究人员),本书介绍了 TensorFlow 的基本原理和实践方法.从 TensorFlow 中的一些基本示例开始,深入探讨诸如神经网络体系结 ...
- 深度学习各种优化函数详解
深度学习中有众多有效的优化函数,比如应用最广泛的SGD,Adam等等,而它们有什么区别,各有什么特征呢?下面就来详细解读一下 一.先来看看有哪些优化函数 BGD 批量梯度下降 所谓的梯度下降方法是无约 ...
- 深度学习归一化算法详解(BN,LN,IN,GN)
目录 一.Batch Normalization(BN) 1.1为什么提出BN? 1.2BN的基本原理和公式 1.3BN在神经网络中的实现 1.4BN的优点和缺点 二.LN,IN,GN的原理和适用范围 ...
- 深度学习 --- BP算法详解(流程图、BP主要功能、BP算法的局限性)
上一节我们详细推倒了BP算法的来龙去脉,请把原理一定要搞懂,不懂的请好好理解BP算法详解,我们下面就直接把上一节推导出的权值调整公式拿过来,然后给出程序流程图,该流程图是严格按照上一节的权值更新过程写 ...
- 深度学习生态圈【详解深度学习工具Keras】
文章目录: 1 CNTK 2 Tensorflow2.1 介绍2.2 安装2.3 简单例子 3 Keras3.1 介绍3.2 安装Keras3.3 使用Keras构建深度学习模型3.4 一个例子 4 ...
最新文章
- jQuery图片轮播
- 【数理知识】《矩阵论》方保镕老师-第8章-矩阵在数学内外的应用
- linux中mpich的运行线程,贝叶斯法构建进化树:MrBayes
- java网络接口_java网络编程之识别示例 获取主机网络接口列表
- 【转】设计模式学习笔记之命令模式
- 没了IDE,你的Java项目还能Run起来吗~
- python+webdriver(二)
- sketch 52.2 中文破解版发布 附下载地址
- 坐标转换c语言,坐标转换代码实现及详细讲解
- Python print() 函数,在同一行打印
- 大数据hive篇--同比环比
- php获取七牛上传token失效,上传文件到七牛时,bad token了怎么处理?
- 【2020-8-9】APM,PX4,GAZEBO,MAVLINK,MAVROS,ROS之间的关系以及科研设备选型
- 期权都是废纸?——创业公司的期权、股票与回报
- 特斯拉设计师评苹果造车:痴人说梦,缺乏创新
- java 文件名排序_Java笔记:像win里一样文件名排序
- matlab ssd检测,基于SSD神经网络的违章停车车辆实时检测方法与流程
- 中国类脑计算先行者:在AI“无人区”探路
- 最小公倍数Java描述,甲每秒跑3米,乙每秒跑4米,丙每秒跑2米, 三人沿600米的环形跑道从同一地点同时同方向跑步, 经过多少时间三人又同时从出发点出发?
- 风火之旅 需要的信息保存
热门文章
- NFV和VNF的区别和联系
- Mybatis_第二节:CRUD(增删改查)
- Revit二次开发——读取cad中的文字信息
- Macfee打造自己的安全系统
- win7无法启动承载网络问题
- Promise方法 理解 封装
- 关于with open() as f读取文件时编码报错问题
- C语言写计算器(最多只可实现浮点型带一层括号的混合运算)
- 计算机专业新生表演,沙场秋点兵 学子展风采 ——计算机专业部在2020级新生军训汇报表演中喜获佳绩...
- idea报 @Override is not allowed when implementing interface method解决方法