Repo ini berisi berbagai fungsi untuk mengonversi bagian enkoder dari RoBerta -Model pretrained menjadi transformator jangka panjang.
Konsumsi memori dan runtime model bahasa dengan perhatian vanilla tumbuh secara kuadratik ke panjang urutan input. Berbagai model diusulkan untuk melonggarkan masalah ini baik dengan menggunakan pola perhatian yang jarang atau lokal atau mendekati matriks perhatian penuh dengan metode dekomposisi. Repositori ini berisi beberapa fungsi untuk menginisialisasi beberapa model ini dengan bobot dari pos pemeriksaan RoBerta yang sudah diatur sebelumnya dan, oleh karena itu, dapat membantu membuat model baru untuk tugas-tugas dokumen panjang secara efisien.
Perhatikan bahwa menginisialisasi model -model ini dengan bobot pretraining tidak membuat mereka dapat digunakan secara langsung, apalagi kompetitif. Dalam kebanyakan kasus, setidaknya beberapa ribu langkah "pendahuluan lanjutan" diperlukan untuk mencapai hasil yang memuaskan pada tugas hilir apa pun.
Konversi model RoBerta pretrained menjadi model Longformer
Model Longformer (Beltagy, I., Peters, Me, & Cohan, A. (2020).) Menggantikan mekanisme perhatian penuh dengan pola perhatian lokal dan perhatian global khusus tugas. Selain itu, model Longformer menggunakan RoBerta (Liu, Y., Ott, M., Goyal, et. AL (2019).) Arsitektur. Jadi dengan mudah dimungkinkan untuk memuat bobot model RoBerta pretrained ke dalam 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 -architecture (Xiong et. Al (2021)) mendekati mekanisme perhatian diri menggunakan dekomposisi matriks Nyström. Dengan demikian tidak perlu berurusan dengan pola perhatian khusus, membuat model -model ini, secara teori, berlaku untuk berbagai tugas yang lebih luas. Dibandingkan dengan model Longformer , Nyströmformers tampaknya mengkonsumsi lebih banyak memori.
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/" )
...