🚀 RoBERTa baseモデル
RoBERTa baseモデルは、マスク言語モデリング(MLM)を目的として英語で事前学習されたモデルです。このモデルは、文全体の双方向的な表現を学習することができ、下流タスクの特徴抽出に利用できます。
🚀 クイックスタート
このモデルは、マスク言語モデリングに使用できますが、主に下流タスクでのファインチューニングを目的としています。詳細については、以下のセクションを参照してください。
✨ 主な機能
- マスク言語モデリングによる事前学習
- 双方向的な文の表現学習
- 下流タスクでのファインチューニングが可能
📚 ドキュメント
モデルの説明
RoBERTaは、自己教師付き学習により大量の英語データで事前学習されたトランスフォーマーモデルです。具体的には、マスク言語モデリング(MLM)を目的として学習されています。これにより、文の双方向的な表現を学習することができます。
想定される用途と制限
このモデルは、マスク言語モデリングに使用できますが、主に下流タスクでのファインチューニングを目的としています。ただし、このモデルは主に文全体を使用して決定を行うタスクでのファインチューニングを目的としており、テキスト生成などのタスクには適していません。
使い方
以下は、このモデルをマスク言語モデリングに使用する例です。
基本的な使用法
>>> 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'}]
高度な使用法
以下は、このモデルを使用してテキストの特徴を抽出する例です。
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)
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)
制限とバイアス
このモデルの学習データには、中立的ではない多くの未フィルターのインターネット上のコンテンツが含まれています。そのため、モデルの予測にバイアスが生じる可能性があります。
>>> 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モデルは、以下の5つのデータセットを合わせたもので事前学習されています。
これらのデータセットを合わせると、160GBのテキストになります。
学習手順
前処理
テキストは、Byte-Pair Encoding(BPE)のバイトバージョンを使用してトークン化され、語彙サイズは50,000です。モデルの入力は、文書をまたがる可能性のある512個の連続したトークンのピースを取ります。新しい文書の始まりは<s>
で、終わりは</s>
でマークされます。
各文のマスキング手順の詳細は以下の通りです。
- 15%のトークンがマスクされます。
- 80%のケースでは、マスクされたトークンは
<mask>
に置き換えられます。
- 10%のケースでは、マスクされたトークンは、置き換えるトークンとは異なるランダムなトークンに置き換えられます。
- 残りの10%のケースでは、マスクされたトークンはそのまま残されます。
BERTとは異なり、マスキングは事前学習中に動的に行われます(つまり、各エポックで変化し、固定されていません)。
事前学習
このモデルは、1024台のV100 GPUで500Kステップ、バッチサイズ8K、シーケンス長512で学習されました。使用されたオプティマイザはAdamで、学習率は6e-4、\(\beta_{1} = 0.9\)、\(\beta_{2} = 0.98\)、\(\epsilon = 1e-6\)、重み減衰は0.01、学習率のウォームアップは24,000ステップ、その後は学習率の線形減衰が行われました。
評価結果
下流タスクでファインチューニングされた場合、このモデルは以下の結果を達成します。
Glueテスト結果:
タスク |
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ライセンスの下で提供されています。