ONNX 模型库
返回模型

说明文档


language: en tags:

  • exbert license: mit datasets:
  • bookcorpus
  • wikipedia

RoBERTa large 模型

在英语语料上使用掩码语言建模(MLM)目标进行预训练的模型。该模型在本文中首次提出,并于此仓库中首次发布。该模型大小写敏感:它会对 english 和 English 加以区分。

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

模型描述

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

更准确地说,它使用掩码语言建模(MLM)目标进行预训练。模型随机遮盖句子中 15% 的单词,然后将整个被遮盖的句子输入模型,预测被遮盖的单词。这与传统的循环神经网络(RNN,通常逐个查看单词)或类似 GPT 的自回归模型(内部遮盖未来 token)不同。这使得模型能够学习句子的双向表示。

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

预期用途与局限性

您可以使用原始模型进行掩码语言建模,但它主要用于在下游任务上进行微调。请参阅模型库查找对您感兴趣的任务进行微调的版本。

请注意,此模型主要面向在需要使用整个句子(可能带有掩码)进行决策的任务上进行微调,例如序列分类、token 分类或问答。对于文本生成等任务,您应该查看类似 GPT2 的模型。

如何使用

您可以直接使用管道进行掩码语言建模:

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

[{'sequence': "<s>Hello I'm a male model.</s>",
  'score': 0.3317350447177887,
  'token': 2943,
  'token_str': 'Ġmale'},
 {'sequence': "<s>Hello I'm a fashion model.</s>",
  'score': 0.14171843230724335,
  'token': 2734,
  'token_str': 'Ġfashion'},
 {'sequence': "<s>Hello I'm a professional model.</s>",
  'score': 0.04291723668575287,
  'token': 2038,
  'token_str': 'Ġprofessional'},
 {'sequence': "<s>Hello I'm a freelance model.</s>",
  'score': 0.02134818211197853,
  'token': 18150,
  'token_str': 'Ġfreelance'},
 {'sequence': "<s>Hello I'm a young model.</s>",
  '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 <mask>.")

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

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

[{'sequence': '<s>The woman worked as a nurse.</s>',
  'score': 0.2667474150657654,
  'token': 9008,
  'token_str': 'Ġnurse'},
 {'sequence': '<s>The woman worked as a waitress.</s>',
  'score': 0.12280137836933136,
  'token': 35698,
  'token_str': 'Ġwaitress'},
 {'sequence': '<s>The woman worked as a teacher.</s>',
  'score': 0.09747499972581863,
  'token': 3254,
  'token_str': 'Ġteacher'},
 {'sequence': '<s>The woman worked as a secretary.</s>',
  'score': 0.05783602222800255,
  'token': 2971,
  'token_str': 'Ġsecretary'},
 {'sequence': '<s>The woman worked as a cleaner.</s>',
  '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)进行分词,词汇表大小为 50,000。模型的输入是 512 个连续 token 的片段,可以跨越文档。新文档的开头用 <s> 标记,文档结尾用 </s> 标记。

每个句子的掩码程序细节如下:

  • 15% 的 token 被掩码。
  • 在 80% 的情况下,被掩码的 token 被替换为 <mask>
  • 在 10% 的情况下,被掩码的 token 被替换为(不同的)随机 token。
  • 在剩余的 10% 中,被掩码的 token 保持不变。

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

预训练

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

评估结果

在下游任务上进行微调时,此模型取得以下结果:

Glue 测试结果:

任务 MNLI QQP QNLI SST-2 CoLA STS-B MRPC RTE
90.2 92.2 94.7 96.4 68.0 96.4 90.9 86.6

BibTeX 条目和引用信息

@article{DBLP:journals/corr/abs-1907-11692,
  author    = {Yinhan Liu and
               Myle Ott and
               Naman Goyal and
               Jingfei Du and
               Mandar Joshi and
               Danqi Chen and
               Omer Levy and
               Mike Lewis and
               Luke Zettlemoyer and
               Veselin Stoyanov},
  title     = {RoBERTa: {A} Robustly Optimized {BERT} Pretraining Approach},
  journal   = {CoRR},
  volume    = {abs/1907.11692},
  year      = {2019},
  url       = {http://arxiv.org/abs/1907.11692},
  archivePrefix = {arXiv},
  eprint    = {1907.11692},
  timestamp = {Thu, 01 Aug 2019 08:59:33 +0200},
  biburl    = {https://dblp.org/rec/journals/corr/abs-1907-11692.bib},
  bibsource = {dblp computer science bibliography, https://dblp.org}
}

<a href="https://huggingface.co/exbert/?model=roberta-base"> <img width="300px" src="https://cdn-media.huggingface.co/exbert/button.png"> </a>

FacebookAI/roberta-large

作者 FacebookAI

fill-mask transformers
↓ 19.4M ♥ 268

创建时间: 2022-03-02 23:29:04+00:00

更新时间: 2024-02-19 12:47:04+00:00

在 Hugging Face 上查看

文件 (12)

.gitattributes
README.md
config.json
flax_model.msgpack
merges.txt
model.onnx ONNX
model.safetensors
pytorch_model.bin
tf_model.h5
tokenizer.json
tokenizer_config.json
vocab.json