このリポジトリには、前提条件のRoBertaモデルのエンコーダー部分を長シーケンス変圧器に変換するためのさまざまな機能が含まれています。
バニラの自己関節を備えた言語モデルのメモリ消費とランタイムは、入力シーケンスの長さまで2次まで増加します。スパースまたはローカルな注意パターンを使用するか、分解方法を使用して完全な自己触媒マトリックスを近似することにより、この問題を緩和するためにさまざまなモデルが提案されました。このリポジトリには、これらのモデルのいくつかを初期化したRoBertaチェックポイントの重みで初期化する機能が含まれているため、長期間のタスクの新しいモデルを効率的に作成するのに役立ちます。
これらのモデルを前提条件で初期化することは、競争力があることは言うまでもなく、それらを直接使用することはできないことに注意してください。ほとんどの場合、ダウンストリームタスクで満足のいく結果を達成するには、少なくとも数千の「継続的な予定」ステップが必要です。
前処理されたRoBertaモデルをLongformerモデルに変換します
Longformerモデル(Beltagy、I.、Peters、Me、&Cohan、A。(2020))は、完全な関節メカニズムを局所的な注意パターンとタスク固有のグローバルな注意に置き換えます。それとは別に、 LongformerモデルはRoBerta (Liu、Y.、Ott、M.、Goyal、et。Al(2019))を使用しています。そのため、前処理されたRoBertaモデルの重量をLongformerにロードすることができます。
from roberta2longformer import convert_roberta_to_longformer
from transformers import RobertaModel , RobertaTokenizerFast
from transformers import LongformerModel , LongformerTokenizerFast
roberta_model = RobertaModel . from_pretrained ( "uklfr/gottbert-base" )
roberta_tokenizer = RobertaTokenizerFast . from_pretrained ( "uklfr/gottbert-base" )
longformer_model , longformer_tokenizer = convert_roberta_to_longformer (
roberta_model = roberta_model ,
roberta_tokenizer = roberta_tokenizer ,
longformer_max_length = 8192
)
print ( list ( longformer_model . encoder . state_dict (). items ())[ 0 ])
print ( list ( roberta_model . encoder . state_dict (). items ())[ 0 ])
inputs = longformer_tokenizer ( "Er sah eine irdische Zentralregierung, und er erblickte Frieden, Wohlstand und galaktische Anerkennung."
"Es war eine Vision, doch er nahm sie mit vollen Sinnen in sich auf."
"Im Laderaum der STARDUST begann eine rätselhafte Maschine zu summen."
"Die dritte Macht nahm die Arbeit auf."
"Da lächelte Perry Rhodan zum blauen Himmel empor."
"Langsam löste er die Rangabzeichen von dem Schulterstück seiner Kombination." ,
return_tensors = "pt" )
outputs = longformer_model ( ** inputs )
# Or to finetune the model on a task:
from transformers import LongformerForSequenceClassification
longformer_model . save_pretrained ( "tmp/longformer-gottbert" )
longformer_tokenizer . save_pretrained ( "tmp/longformer-gottbert" )
seqclass_model = LongformerForSequenceClassification . from_pretrained ( "tmp/longformer-gottbert/" )
... Nyströmformerアーキテクチャ(Xionget。Al(2021))は、NyströmMatrix-Decompositionを使用して自己関節メカニズムに近似しています。したがって、特別な注意パターンを扱う必要はありません。これらのモデルは、理論的には、より多様なタスクに適用できます。 Longformerモデルと比較して、 Nyströmformersより多くのメモリを消費するようです。
from roberta2nyströmformer import convert_roberta_to_nystromformer
from transformers import RobertaModel , RobertaTokenizerFast
from transformers import NystromformerTokenizerFast , NystromformerModel
roberta_model = RobertaModel . from_pretrained ( "uklfr/gottbert-base" )
roberta_tokenizer = RobertaTokenizerFast . from_pretrained ( "uklfr/gottbert-base" )
nystromformer_model , nystromformer_tokenizer = convert_roberta_to_nystromformer (
roberta_model = roberta_model ,
roberta_tokenizer = roberta_tokenizer ,
nystromformer_max_length = 8192
)
print ( list ( nystromformer_model . encoder . state_dict (). items ())[ 0 ])
print ( list ( roberta_model . encoder . state_dict (). items ())[ 0 ])
inputs = nystromformer_tokenizer ( "Er sah eine irdische Zentralregierung, und er erblickte Frieden, Wohlstand und galaktische Anerkennung."
"Es war eine Vision, doch er nahm sie mit vollen Sinnen in sich auf."
"Im Laderaum der STARDUST begann eine rätselhafte Maschine zu summen."
"Die dritte Macht nahm die Arbeit auf."
"Da lächelte Perry Rhodan zum blauen Himmel empor."
"Langsam löste er die Rangabzeichen von dem Schulterstück seiner Kombination." ,
return_tensors = "pt" )
outputs = nystromformer_model ( ** inputs )
# Or to finetune the model on a task:
from transformers import NystromformerForSequenceClassification
nystromformer_model . save_pretrained ( "tmp/nystromformer-gottbert" )
nystromformer_model . save_pretrained ( "tmp/nystromformer-gottbert" )
seqclass_model = NystromformerForSequenceClassification . from_pretrained ( "tmp/nystromformer-gottbert/" )
...