[RoBERTa]论文实现:RoBERTa: A Robustly Optimized BERT Pretraining Approach

本文主要是介绍[RoBERTa]论文实现:RoBERTa: A Robustly Optimized BERT Pretraining Approach,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、完整代码
    • 二、论文解读
      • 2.1 模型架构
      • 2.2 参数设置
      • 2.3 数据
      • 2.4 评估
    • 三、对比
    • 四、整体总结

论文:RoBERTa:A Robustly Optimized BERT Pretraining Approach
作者:Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, Veselin Stoyanov
时间:2019
地址:https://github.com/pytorch/fairseq

一、完整代码

这里我们使用python代码进行实现

# 完整代码在这里
# 有时间再做

二、论文解读

RoBERTa,这个论文名字我刚听到的时候,我以为是加了旋转编码的BERT,没想到是A Robustly Optimized BERT Pretraining Approach,其只是对BERT的一种探索和优化,其主要探索在以下几个方面:

  1. 训练更长的时间,使用更大的批次,处理更多的数据可以显著提高性能;
  2. NSP任务效果并不显著,在训练的时候可以删除;
  3. 训练更长的sentence;
  4. 动态mask相较于静态mask其提升并不是很大,但是RoBERTa还是采用了这种做法;

2.1 模型架构

BERT完全一致,是transformerencoder层构成的;

2.2 参数设置

Adam: β 1 = 0.9 , β 2 = 0.999 , ϵ = 1 e − 6 \beta_1=0.9, \beta_2=0.999, \epsilon=1e-6 β1=0.9,β2=0.999,ϵ=1e6 L 2 = 0.01 L_2=0.01 L2=0.01
dropout: d r o p o u t − r a t e = 0.1 dropout-rate=0.1 dropoutrate=0.1
updates: 1000000 1000000 1000000
batch_size: 256 256 256
token_size: 512 512 512
attention_activation: G E L U GELU GELU

2.3 数据

为了扩大数据量,这里使用了下面这四个数据;

  • BOOKCORPUS (Zhu et al., 2015) plus English WIKIPEDIA. This is the original data used to train BERT. (16GB).
  • CC-NEWS, which we collected from the English portion of the CommonCrawl News dataset (Nagel, 2016). The data contains 63 million English news articles crawled between September 2016 and February 2019. (76GB after filtering).
  • OPENWEBTEXT (Gokaslan and Cohen, 2019), an open-source recreation of the WebText corpus described in Radford et al. (2019). The text is web content extracted from URLs shared on Reddit with at least three upvotes. (38GB).
  • STORIES, a dataset introduced in Trinh and Le(2018) containing a subset of CommonCrawl data filtered to match the story-like style of Winograd schemas. (31GB).

2.4 评估

这里介绍了三个benchmarks,分别是:GLUESQuADRACE

GLUE:通用语言理解评估(GLUE)基准测试(Wang et al.,2019b)是一个用于评估自然语言理解系统的9个数据集的集合。6个任务被定义为单个句子分类或句子对分类任务。GLUE的组织者提供了培训和开发数据的分割,以及一个提交服务器和排行榜,允许参与者在私人保留的测试数据上评估和比较他们的系统。

SQuAD:斯坦福问题回答数据集(SQuAD)提供了一段上下文和一个问题。任务是通过从上下文中提取相关的跨度来回答这个问题。有了两个版本的SQuAD: V1.1和V2.0(Rajpurkar等人,2016,2018)。在V1.1中,上下文总是包含一个答案,而在V2.0中的一些问题在所提供的上下文中没有设有回答,这使得任务更具挑战性。

RACE:从考试中获得的阅读理解(RACE)(Lai et al.,2017)任务是一个大规模的阅读理解数据集,有超过28000篇文章和近10万个问题。该数据集收集自专为中高中生设计的中国英语考试。在竞赛中,每一段都与多个问题相关联。对于每个问题,这个任务是从四个选项中选择一个正确的答案。种族比其他流行的阅读理解数据集的背景要长得多,需要推理的问题比例非常大

三、对比

Static Masking 和 Dynamic Masking

可以发现其实提升并不明显,有的还降了,但是作者硬是认为也没办法,transformer用静态怎么可能没考虑动态呢,硬是水;

Model Input Format, Next Sentence Prediction 和 TrainBatch

这里先解释一下:

SEGMENT-PAIR+NSP:这遵循了BERT(Devlin et al.,2019)中使用的原始输入格式,有NSP丢失。每个输入都有一对片段,每个片段可以包含多个自然句子,但总的组合长度必须小于512个标记。

SENTENCE-PAIR+NSP:每个输入包含一对自然句子,要么从一个文档的连续部分中采样,要么从单独的文档中采样。由于这些输入明显短于512个令牌,我们增加批大小,使令牌的总数保持与SEGMENT-PAIR+NSP相似。我们保留了NSP的损失。

FULL-SENTENCES:每个输入都包含了从一个或多个文档中连续采样的完整句子,因此总长度最多为512个标记。输入可以跨越文档边界。当我们到达一个文档的结尾时,我们就开始从下一个文档中采样句子,并在文档之间添加一个额外的分隔符标记。我们消除了NSP的损失。

DOC-SENTENCES:输入的构造类似于FULL-SENTENCES,只是它们可能不会跨越文档边界。在文档末尾附近采样的输入可能小于512个标记,因此我们在这些情况下动态地增加批处理大小,以实现与全句相似的总标记数量。我们消除了NSP的损失。

从这里我们可以发现:NSP影响不显著,使用DOC要比FULL要略好;

TrainBatch

从这里我们可以发现,batch越大,能力越强;这里lr不同也许造成了一点干扰;

分词编码方式采取的是BPE,原来是30k,这里变大了,变成50k;

效果

这也许表示了模型越大越好;

四、整体总结

RoBERTa只是对transformer的一种探索,结果是模型越大效果越好;

这篇关于[RoBERTa]论文实现:RoBERTa: A Robustly Optimized BERT Pretraining Approach的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/475416

相关文章

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

Pydantic中model_validator的实现

《Pydantic中model_validator的实现》本文主要介绍了Pydantic中model_validator的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录引言基础知识创建 Pydantic 模型使用 model_validator 装饰器高级用法mo

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Redis分片集群的实现

《Redis分片集群的实现》Redis分片集群是一种将Redis数据库分散到多个节点上的方式,以提供更高的性能和可伸缩性,本文主要介绍了Redis分片集群的实现,具有一定的参考价值,感兴趣的可以了解一... 目录1. Redis Cluster的核心概念哈希槽(Hash Slots)主从复制与故障转移2.

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N