Этот репо содержит различные функции, чтобы преобразовать часть энкодера, предварительно проведенную RoBerta -Модель в трансформаторы с длинной последовательности.
Потребление памяти и время выполнения языковых моделей с ванильным самоубийством растут квадратично к длине входной последовательности. Были предложены различные модели, чтобы расслабить эту проблему либо с использованием разреженных, либо локальных моделей внимания, либо аппроксимирования полной матрицы самосознания с помощью методов разложения. Этот репозиторий содержит некоторые функции для инициализации некоторых из этих моделей с весами с предварительно проведенной контрольной точки 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 -Architecture (Xiong et. Al (2021)) приближается к механизму самосознания с использованием декорации матрицы Nyström. Таким образом, нет необходимости в том, чтобы справляться со особыми моделями внимания, что теоретически делает эти модели, применимых к более широкому разнообразию задач. По сравнению с моделями 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/" )
...