模型概述
模型特點
模型能力
使用案例
🚀 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許可證。



