模型简介
模型特点
模型能力
使用案例
🚀 RoBERTa基础模型
RoBERTa基础模型是一个基于掩码语言建模(MLM)目标在英文语料上预训练的模型。它能够学习英文句子的双向表示,其内部表示可用于提取对下游任务有用的特征。
🚀 快速开始
你可以直接使用该模型进行掩码语言建模,但它主要用于在下游任务上进行微调。你可以访问模型中心查找感兴趣任务的微调版本。
✨ 主要特性
- 双向表示学习:通过掩码语言建模目标,模型能够学习句子的双向表示,这与传统的循环神经网络(RNN)或自回归模型(如GPT)不同。
- 特征提取:学习到的英文语言内部表示可用于提取对下游任务有用的特征。
- 多任务适用性:适用于需要使用整个句子(可能是掩码句子)进行决策的任务,如序列分类、标记分类或问答。
💻 使用示例
基础用法
你可以使用管道直接进行掩码语言建模:
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='roberta-base')
>>> unmasker("Hello I'm a <mask> model.")
[{'sequence': "<s>Hello I'm a male model.</s>",
'score': 0.3306540250778198,
'token': 2943,
'token_str': 'Ġmale'},
{'sequence': "<s>Hello I'm a female model.</s>",
'score': 0.04655390977859497,
'token': 2182,
'token_str': 'Ġfemale'},
{'sequence': "<s>Hello I'm a professional model.</s>",
'score': 0.04232972860336304,
'token': 2038,
'token_str': 'Ġprofessional'},
{'sequence': "<s>Hello I'm a fashion model.</s>",
'score': 0.037216778844594955,
'token': 2734,
'token_str': 'Ġfashion'},
{'sequence': "<s>Hello I'm a Russian model.</s>",
'score': 0.03253649175167084,
'token': 1083,
'token_str': 'ĠRussian'}]
高级用法
以下是如何在PyTorch中使用该模型获取给定文本的特征:
from transformers import RobertaTokenizer, RobertaModel
tokenizer = RobertaTokenizer.from_pretrained('roberta-base')
model = RobertaModel.from_pretrained('roberta-base')
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-base')
model = TFRobertaModel.from_pretrained('roberta-base')
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)
📚 详细文档
模型描述
RoBERTa是一个基于自监督方式在大量英文数据语料上预训练的Transformer模型。它仅在原始文本上进行预训练,无需人工标注,通过自动过程从这些文本中生成输入和标签。具体来说,它使用掩码语言建模(MLM)目标进行预训练。模型会随机掩码输入句子中15%的单词,然后将整个掩码句子输入模型,预测被掩码的单词。这使得模型能够学习句子的双向表示。
预期用途和局限性
该模型可用于掩码语言建模,但主要用于在下游任务上进行微调。需要注意的是,该模型主要针对使用整个句子(可能是掩码句子)进行决策的任务进行微调,如序列分类、标记分类或问答。对于文本生成等任务,建议使用GPT2等模型。
局限性和偏差
由于该模型的训练数据包含大量来自互联网的未过滤内容,因此模型可能存在有偏差的预测。这种偏差也会影响该模型的所有微调版本。以下是一些示例:
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='roberta-base')
>>> unmasker("The man worked as a <mask>.")
[{'sequence': '<s>The man worked as a mechanic.</s>',
'score': 0.08702439814805984,
'token': 25682,
'token_str': 'Ġmechanic'},
{'sequence': '<s>The man worked as a waiter.</s>',
'score': 0.0819653645157814,
'token': 38233,
'token_str': 'Ġwaiter'},
{'sequence': '<s>The man worked as a butcher.</s>',
'score': 0.073323555290699,
'token': 32364,
'token_str': 'Ġbutcher'},
{'sequence': '<s>The man worked as a miner.</s>',
'score': 0.046322137117385864,
'token': 18678,
'token_str': 'Ġminer'},
{'sequence': '<s>The man worked as a guard.</s>',
'score': 0.040150221437215805,
'token': 2510,
'token_str': 'Ġguard'}]
>>> unmasker("The Black woman worked as a <mask>.")
[{'sequence': '<s>The Black woman worked as a waitress.</s>',
'score': 0.22177888453006744,
'token': 35698,
'token_str': 'Ġwaitress'},
{'sequence': '<s>The Black woman worked as a prostitute.</s>',
'score': 0.19288744032382965,
'token': 36289,
'token_str': 'Ġprostitute'},
{'sequence': '<s>The Black woman worked as a maid.</s>',
'score': 0.06498628109693527,
'token': 29754,
'token_str': 'Ġmaid'},
{'sequence': '<s>The Black woman worked as a secretary.</s>',
'score': 0.05375480651855469,
'token': 2971,
'token_str': 'Ġsecretary'},
{'sequence': '<s>The Black woman worked as a nurse.</s>',
'score': 0.05245552211999893,
'token': 9008,
'token_str': 'Ġnurse'}]
训练数据
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,学习率为6e - 4,\(\beta_{1} = 0.9\),\(\beta_{2} = 0.98\),\(\epsilon = 1e - 6\),权重衰减为0.01,学习率在24,000步内进行热身,之后线性衰减。
评估结果
在下游任务上进行微调时,该模型取得了以下结果:
任务 | MNLI | QQP | QNLI | SST - 2 | CoLA | STS - B | MRPC | RTE |
---|---|---|---|---|---|---|---|---|
87.6 | 91.9 | 92.8 | 94.8 | 63.6 | 91.2 | 90.2 | 78.7 |
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许可证。



