说明文档
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
创建时间: 2022-03-02 23:29:04+00:00
更新时间: 2024-02-19 12:47:04+00:00
在 Hugging Face 上查看