模型简介
模型特点
模型能力
使用案例
🚀 RoBERTa大模型
RoBERTa大模型是一个使用掩码语言建模(MLM)目标在英文语料上预训练的模型。它能学习到英文的双向表示,其特征可用于下游任务。该模型区分大小写,对“english”和“English”会有不同处理。
🚀 快速开始
你可以直接使用此模型进行掩码语言建模,不过它主要用于在下游任务中进行微调。可查看模型中心,寻找针对你感兴趣任务的微调版本。
✨ 主要特性
- 双向表示学习:通过掩码语言建模(MLM)目标,模型能学习到句子的双向表示,这与传统的循环神经网络(RNNs)和自回归模型(如GPT)不同。
- 可用于下游任务:学习到的英文内部表示可提取特征,用于下游任务,如使用BERT模型生成的特征作为输入来训练标准分类器。
📦 安装指南
文档未提及安装步骤,故跳过此章节。
💻 使用示例
基础用法
你可以使用管道进行掩码语言建模:
>>> 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)
📚 详细文档
预期用途和局限性
此模型可用于掩码语言建模,但主要用于下游任务的微调。该模型主要针对使用整个句子(可能是掩码后的句子)进行决策的任务进行微调,如序列分类、标记分类或问答任务。对于文本生成等任务,你应该考虑像GPT2这样的模型。
局限性和偏差
该模型的训练数据包含大量来自互联网的未过滤内容,因此模型可能存在有偏差的预测,这种偏差也会影响该模型的所有微调版本。示例如下:
>>> 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个连续标记的片段,这些片段可能跨越多个文档。新文档的开头用<s>
标记,结尾用</s>
标记。
每个句子的掩码过程细节如下:
- 15%的标记被掩码。
- 80%的情况下,被掩码的标记被
<mask>
替换。 - 10%的情况下,被掩码的标记被一个与它们所替换的标记不同的随机标记替换。
- 10%的情况下,被掩码的标记保持不变。
与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}
}
可视化工具

📄 许可证
本项目采用MIT许可证。



