RoBERTa

RoBERTa模型是在RoBERTa中提出的:一種經過嚴格優化的BERT預訓練方法, 由Yinhan Liu,Myle Ott,Naman Goyal,Dujingfei,Mandar Joshi,Danqi Chen,Omer Levy,Mike Lewis,Luke Zettlemoyer,Veselin Stoyanov提出。它基於2018年發佈的Google BERT模型。

它建立在BERT的基礎上,並修改了關鍵的超參數,消除了下一句的預訓練目標,並以更大的迷你批次和學習率進行訓練。

論文摘要如下:

語言模型的預訓練已經帶來了顯着的性能提升,但是不同方法之間的仔細比較具有挑戰性。訓練在計算上很昂貴,通常是在不同大小的私人數據集上進行的,而且正如我們將顯示的那樣,超參數的選擇對最終結果有重大影響。我們提出了BERT預訓練的重複研究(Devlin等人,2019),該研究仔細衡量了許多關鍵超參數和訓練數據量的影響。我們發現BERT的訓練不足,並且可以匹配或超過它發佈後的每個模型的性能。我們最好的模型在GLUE,RACE和SQuAD上獲得了最先進的結果。這些結果突出了以前被忽略的設計選擇的重要性,並引起了人們對最近報告的改進來源的質疑。我們發佈我們的模型和代碼。

提示:

此實現BertModel與微小的嵌入調整以及Roberta預訓練模型的設置相同。

RoBERTa與BERT具有相同的體系結構,但是使用字節級BPE作爲令牌生成器(與GPT-2相同),並且使用不同的預訓練方案。

RoBERTa沒有token_type_ids,您不需要指示哪個令牌屬於哪個段。只需使用分隔令牌tokenizer.sep_token(或</ s>)分隔段即可

  • TFRobertaModel
import tensorflow as tf
from transformers import RobertaTokenizer, TFRobertaModel

tokenizer = RobertaTokenizer.from_pretrained('roberta-base')
model = TFRobertaModel.from_pretrained('roberta-base')
input_ids = tf.constant(tokenizer.encode("Hello, my dog is cute", add_special_tokens=True))[None, :]  # Batch size 1
outputs = model(input_ids)
last_hidden_states = outputs[0]  # The last hidden-state is the first element of the output tuple

#config = RobertaConfig.from_pretrained(PATH+'config-roberta-base.json')
#bert_model = TFRobertaModel.from_pretrained(PATH+'pretrained-roberta-base.h5',config=config)
  • TFRobertaForSequenceClassification
import tensorflow as tf
from transformers import RobertaTokenizer, TFRobertaForSequenceClassification

tokenizer = RobertaTokenizer.from_pretrained('roberta-base')
model = TFRobertaForSequenceClassification.from_pretrained('roberta-base')
input_ids = tf.constant(tokenizer.encode("Hello, my dog is cute", add_special_tokens=True))[None, :]  # Batch size 1
labels = tf.constant([1])[None, :]  # Batch size 1
outputs = model(input_ids)
logits = outputs[0]
  • TFRobertaForTokenClassification
import tensorflow as tf
from transformers import RobertaTokenizer, TFRobertaForTokenClassification

tokenizer = RobertaTokenizer.from_pretrained('roberta-base')
model = TFRobertaForTokenClassification.from_pretrained('roberta-base')
input_ids = tf.constant(tokenizer.encode("Hello, my dog is cute", add_special_tokens=True))[None, :]  # Batch size 1
outputs = model(input_ids)
scores = outputs[0]
  • 中文

清華大學開源了一個名爲 OpenCLaP 的項目,即多領域開源中文預訓練語言模型庫。它提供了幾種中文預訓練 BERT,並表示它們可以直接通過 huggingface 的 pytorch-transformers 項目調用。

OpenCLaP 項目地址:https://github.com/thunlp/OpenCLaP

百度也開源了預訓練語言模型 ERNIE,不過目前只有 ERNIE 1.0 Base 提供了中文預訓練模型,ERNIE 2.0 目前還只提供英文預訓練模型。當然,如果要使用 ERNIE,我們需要了解 PaddlePaddle 框架,並通過 ernie_encoder.py 抽取句子與 Token 的隱藏向量表示。

國內開發者 brightmart 開源了最新的 RoBERTa 中文預訓練語言模型
https://github.com/brightmart/roberta_zh
用TensorFlow實現了在大規模中文上RoBERTa的預訓練,也會提供PyTorch的預訓練模型和加載方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章