[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

相关文章

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

Java CompletableFuture如何实现超时功能

《JavaCompletableFuture如何实现超时功能》:本文主要介绍实现超时功能的基本思路以及CompletableFuture(之后简称CF)是如何通过代码实现超时功能的,需要的... 目录基本思路CompletableFuture 的实现1. 基本实现流程2. 静态条件分析3. 内存泄露 bug