モデル概要
モデル特徴
モデル能力
使用事例
🚀 RoBERTa largeモデル
このモデルは、マスク言語モデリング(MLM)の目的で英語で事前学習されたモデルです。この論文で紹介され、このリポジトリで最初に公開されました。このモデルは大文字と小文字を区別します。例えば、「english」と「English」は異なるものとして認識されます。
なお、RoBERTaをリリースしたチームはこのモデルのモデルカードを作成していないため、このモデルカードはHugging Faceチームによって作成されています。
🚀 クイックスタート
このモデルは、マスク言語モデリングに使用できますが、主に下流タスクでのファインチューニングを目的としています。詳細な使用方法やファインチューニングについては、以下のセクションを参照してください。
✨ 主な機能
- マスク言語モデリング(MLM)による事前学習を行い、英語の双方向表現を学習します。
- 下流タスクでのファインチューニングに適しており、シーケンス分類、トークン分類、質問応答などのタスクに使用できます。
💻 使用例
基本的な使用法
>>> 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)
📚 ドキュメント
モデルの説明
RoBERTaは、自己教師付き学習方式で大量の英語データセットで事前学習されたトランスフォーマーモデルです。つまり、人間によるラベル付けを一切行わず、生のテキストのみを使用して、自動的に入力とラベルを生成して学習します。
具体的には、マスク言語モデリング(MLM)の目的で事前学習されています。文章を入力として、モデルは入力中の15%の単語をランダムにマスクし、そのマスクされた文章全体をモデルに通して、マスクされた単語を予測します。これは、通常は単語を順番に見る従来の再帰型ニューラルネットワーク(RNN)や、内部的に未来のトークンをマスクするGPTのような自己回帰モデルとは異なり、文章の双方向的な表現を学習することができます。
このようにして、モデルは英語の内部表現を学習し、下流タスクに有用な特徴を抽出するために使用できます。例えば、ラベル付きの文章のデータセットがある場合、BERTモデルが生成する特徴を入力として、標準的な分類器を学習させることができます。
想定される用途と制限
このモデルは、マスク言語モデリングに生のモデルを使用することもできますが、主に下流タスクでのファインチューニングを目的としています。関心のあるタスクでファインチューニングされたバージョンを探すには、モデルハブを参照してください。
なお、このモデルは主に、文章全体(場合によってはマスクされたもの)を使用して決定を行うタスク、例えばシーケンス分類、トークン分類、質問応答などでのファインチューニングを目的としています。テキスト生成などのタスクには、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モデルは、以下の5つのデータセットを統合したもので事前学習されています。
- BookCorpus:11,038冊の未公開の本から構成されるデータセット。
- English Wikipedia:リスト、テーブル、ヘッダーを除いた英語版ウィキペディア。
- CC-News:2016年9月から2019年2月までにクロールされた6300万件の英語のニュース記事を含むデータセット。
- OpenWebText:GPT - 2の学習に使用されたWebTextデータセットをオープンソースで再現したもの。
- Stories:Winogradスキーマのストーリー風のスタイルに合うようにフィルタリングされたCommonCrawlデータのサブセットを含むデータセット。
これらのデータセットを合わせると、160GBのテキストが含まれています。
学習手順
前処理
テキストは、Byte - Pair Encoding(BPE)のバイトバージョンを使用してトークン化され、語彙サイズは50,000です。モデルの入力は、ドキュメントをまたがる可能性のある512個の連続したトークンの断片を取ります。新しいドキュメントの開始は<s>
で、終了は</s>
でマークされます。
各文章のマスク手順の詳細は以下の通りです。
- 15%のトークンがマスクされます。
- 80%の場合、マスクされたトークンは
<mask>
に置き換えられます。 - 10%の場合、マスクされたトークンは、置き換えるトークンとは異なるランダムなトークンに置き換えられます。
- 残りの10%の場合、マスクされたトークンはそのまま残されます。
BERTとは異なり、マスクは事前学習中に動的に行われます(例えば、各エポックで変化し、固定されていません)。
事前学習
このモデルは、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ライセンスの下で提供されています。



