roberta-large
简介
--- language: en tags: - exbert license: mit datasets: - bookcorpus - wikipedia --- RoBERTa 大型模型 基于掩码语言建模(MLM)目标在英语上预训练的模型。该模型首次在 此论文中提出,并在此仓库中首次发布。此模型区分大小写。
模型卡片
模型配置
模型详情
已翻译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 步,之后线性衰减。
评估结果
当微调后
正在翻译中,请稍候...