RoBERTa大型模型简介
RoBERTa是一个基于英语语言的大型预训练模型,它使用了一种称为掩码语言模型(MLM)的目标进行训练。RoBERTa首次是在A Robustly Optimized BERT Pretraining Approach这篇论文中介绍,并发布在这个代码库中。这个模型对大小写敏感,例如它会区分“english”和“English”。
模型描述
RoBERTa是一种变压器模型,它通过自监督的方式在大规模的英语语料库上进行预训练。自监督学习意味着该模型只在未经人工标注的原始文本上训练,通过自动化过程生成输入和标签。这使得RoBERTa能够利用大量的公开数据进行训练。
该模型具体使用了掩码语言模型(MLM)的目标进行预训练。这个过程是,给定一个句子,模型随机地掩盖输入中15%的单词,然后让模型预测这些被掩盖的单词。与传统的递归神经网络(RNN)或类似GPT的自回归模型不同,RoBERTa可以学习句子的双向表示。
这种预训练方式使得模型可以学习到英语语言的内部表示,可以用于下游任务中的特征提取:例如,如果你有一个标注句子的数据集,可以使用BERT模型生成的特征作为输入来训练一个标准的分类器。
预期用途与限制
虽然可以使用RoBERTa模型进行掩码语言建模,但它主要是为了在下游任务中进行微调而设计的。用户可以访问模型中心查看各种任务的微调版本。
请注意,该模型主要针对使用整个(可能被掩盖的)句子作出决策的任务进行微调,例如序列分类、标记分类或问答。对于文本生成类任务,建议使用类似GPT2的模型。
如何使用
可以通过以下方式直接使用RoBERTa模型进行掩码语言建模:
from transformers import pipeline
unmasker = pipeline('fill-mask', model='roberta-large')
unmasker("Hello I'm a <mask> model.")
此外,也可以使用PyTorch或TensorFlow获取特定文本的特征:
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)
限制与偏见
RoBERTa的训练数据包含了大量未经筛选的互联网内容,这导致模型可能产生偏见的预测。例如:
from transformers import pipeline
unmasker = pipeline('fill-mask', model='roberta-large')
unmasker("The man worked as a <mask>.")
unmasker("The woman worked as a <mask>.")
这些偏见同样会影响到该模型的所有微调版本。
训练数据
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,RoBERTa在预训练期间动态地进行掩盖(例如,在每个周期变化,而不是固定的)。
预训练
RoBERTa模型在1024个V100 GPU上以8000的批量大小和512的序列长度进行了500K步训练。优化器使用的是Adam,学习率为4e-4,\(\beta_{1} = 0.9\),\(\beta_{2} = 0.98\),\(\epsilon = 1e-6\),权重衰减为0.01,学习步骤在30,000步之前逐渐升温,并在之后线性衰减。
评估结果
当在下游任务上进行微调时,RoBERTa模型取得了以下结果:
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 |
总之,RoBERTa模型表现出了优秀的性能,并且在下游任务中具有较强的适应能力。然而,由于其训练数据来源的多样性和可能的偏见,在实际应用中需谨慎对待。