模型库 / FacebookAI/roberta-large

roberta-large

FacebookAI fill-mask transformers en
FacebookAI/roberta-large
19,837,112
下载量
486
收藏数
31
浏览量
mit
许可

简介

--- language: en tags: - exbert license: mit datasets: - bookcorpus - wikipedia --- RoBERTa 大型模型 基于掩码语言建模(MLM)目标在英语上预训练的模型。该模型首次在 此论文中提出,并在此仓库中首次发布。此模型区分大小写。

模型卡片

许可协议 mit
语言
en
数据集
bookcorpus wikipedia
exbert

模型配置

模型类型 roberta
架构 RobertaForMaskedLM

模型详情

已翻译

language: zh
tags:
- exbert
license: mit
datasets:
- bookcorpus
- wikipedia


RoBERTa large 模型

该模型使用掩码语言建模(MLM)目标在英语上进行预训练。它在这篇论文中被提出,并首次发布在这个仓库中。该模型区分大小写:它能够区分"english"和"English"。

免责声明:发布 RoBERTa 的团队并未为该模型编写模型卡片,因此本模型卡片由 Hugging Face 团队编写。

模型描述

RoBERTa 是一个 transformer 模型,以自监督方式在大量英语数据上进行了预训练。这意味着它仅基于原始文本进行预训练,没有任何人工标注(因此可以使用大量公开数据),并通过自动过程从这些文本中生成输入和标签。

更准确地说,它使用掩码语言建模(MLM)目标进行预训练。给定一个句子,模型会随机掩盖输入中 15% 的单词,然后将整个被掩盖的句子输入模型,并预测被掩盖的单词。这与传统的循环神经网络(RNN)不同,后者通常逐个处理单词;也与 GPT 等自回归模型不同,后者在内部掩盖未来的 token。这种方法使模型能够学习句子的双向表示。

通过这种方式,模型学习到了英语语言的内在表示,可用于提取对下游任务有用的特征:例如,如果你有一个带标签的句子数据集,你可以使用 BERT 模型产生的特征作为输入来训练一个标准分类器。

预期用途与局限性

你可以直接使用原始模型进行掩码语言建模,但它主要用于在下游任务上进行微调。请查看模型中心以寻找你感兴趣任务的微调版本。

请注意,该模型主要面向需要基于整个句子(可能被掩盖)进行决策的任务进行微调,例如序列分类、token 分类或问答。对于文本生成等任务,你应该考虑使用 GPT2 等模型。

如何使用

你可以直接使用 pipeline 进行掩码语言建模:

>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='roberta-large')
>>> unmasker("Hello I'm a  model.")

[{'sequence': "Hello I'm a male model.",
  'score': 0.3317350447177887,
  'token': 2943,
  'token_str': 'Ġmale'},
 {'sequence': "Hello I'm a fashion model.",
  'score': 0.14171843230724335,
  'token': 2734,
  'token_str': 'Ġfashion'},
 {'sequence': "Hello I'm a professional model.",
  'score': 0.04291723668575287,
  'token': 2038,
  'token_str': 'Ġprofessional'},
 {'sequence': "Hello I'm a freelance model.",
  'score': 0.02134818211197853,
  'token': 18150,
  'token_str': 'Ġfreelance'},
 {'sequence': "Hello I'm a young model.",
  'score': 0.021098261699080467,
  'token': 664,
  'token_str': 'Ġyoung'}]

以下是如何在 PyTorch 中使用该模型获取给定文本的特征:

from transformers import RobertaTokenizer, RobertaModel
tokenizer = RobertaTokenizer.from_pretrained('roberta-large')
model = RobertaModel.from_pretrained('roberta-large')
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)

以及在 TensorFlow 中:

from transformers import RobertaTokenizer, TFRobertaModel
tokenizer = RobertaTokenizer.from_pretrained('roberta-large')
model = TFRobertaModel.from_pretrained('roberta-large')
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)

局限性与偏见

该模型使用的训练数据包含大量来自互联网的未经过滤的内容,远非中立。因此,模型可能产生有偏见的预测:

>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='roberta-large')
>>> unmasker("The man worked as a .")

[{'sequence': 'The man worked as a mechanic.',
  'score': 0.08260300755500793,
  'token': 25682,
  'token_str': 'Ġmechanic'},
 {'sequence': 'The man worked as a driver.',
  'score': 0.05736079439520836,
  'token': 1393,
  'token_str': 'Ġdriver'},
 {'sequence': 'The man worked as a teacher.',
  'score': 0.04709019884467125,
  'token': 3254,
  'token_str': 'Ġteacher'},
 {'sequence': 'The man worked as a bartender.',
  'score': 0.04641604796051979,
  'token': 33080,
  'token_str': 'Ġbartender'},
 {'sequence': 'The man worked as a waiter.',
  'score': 0.04239227622747421,
  'token': 38233,
  'token_str': 'Ġwaiter'}]

>>> unmasker("The woman worked as a .")

[{'sequence': 'The woman worked as a nurse.',
  'score': 0.2667474150657654,
  'token': 9008,
  'token_str': 'Ġnurse'},
 {'sequence': 'The woman worked as a waitress.',
  'score': 0.12280137836933136,
  'token': 35698,
  'token_str': 'Ġwaitress'},
 {'sequence': 'The woman worked as a teacher.',
  'score': 0.09747499972581863,
  'token': 3254,
  'token_str': 'Ġteacher'},
 {'sequence': 'The woman worked as a secretary.',
  'score': 0.05783602222800255,
  'token': 2971,
  'token_str': 'Ġsecretary'},
 {'sequence': 'The woman worked as a cleaner.',
  'score': 0.05576248839497566,
  'token': 16126,
  'token_str': 'Ġcleaner'}]

这种偏见也会影响该模型的所有微调版本。

训练数据

RoBERTa 模型在以下五个数据集的联合集上进行了预训练:
- BookCorpus,包含 11,038 本未出版书籍的数据集;
- 英语维基百科(排除列表、表格和标题);
- CC-News,包含 2016 年 9 月至 2019 年 2 月间爬取的 6300 万篇英文新闻文章的数据集;
- OpenWebText,用于训练 GPT-2 的 WebText 数据集的开源复现版本;
- Stories,包含 CommonCrawl 数据的子集,经过过滤以匹配 Winograd 模式的叙事风格。

这些数据集合计包含 160GB 的文本。

训练过程

预处理

文本使用字节对编码(BPE)的字节版本进行 tokenize,词汇表大小为 50,000。模型的输入采用 512 个连续 token 的片段,这些片段可能跨越文档。新文档的开始用 标记,结束用 标记。

每个句子的掩码过程细节如下:
- 15% 的 token 被掩盖。
- 在 80% 的情况下,被掩盖的 token 被替换为 ``。
- 在 10% 的情况下,被掩盖的 token 被替换为一个随机 token(不同于原 token)。
- 在剩余的 10% 情况下,被掩盖的 token 保持不变。

与 BERT 不同,掩码在预训练过程中是动态进行的(例如,每个 epoch 都会变化,而非固定不变)。

预训练

该模型在 1024 块 V100 GPU 上训练了 500K 步,batch size 为 8K,序列长度为 512。使用的优化器是 Adam,学习率为 4e-4,\(\beta_{1} = 0.9\),\(\beta_{2} = 0.98\),\(\epsilon = 1e-6\),权重衰减为 0.01,学习率预热 30,000 步,之后线性衰减。

评估结果

当微调后

标签

tf jax onnx roberta exbert en dataset:bookcorpus dataset:wikipedia

操作


详细信息

厂商
FacebookAI
任务
fill-mask
框架
transformers
模型类型
roberta
许可(HF)
mit
语言
en