이 repo에는 사전에 간주 된 RoBerta -Model의 인코더 부분을 긴 시퀀스 변압기로 변환하는 다양한 기능이 포함되어 있습니다.
바닐라 자체 소지가있는 언어 모델의 메모리 소비 및 런타임은 입력 시퀀스의 길이까지 차단됩니다. 희소 또는 로컬주의 패턴을 사용하거나 분해 방법으로 전체 자체 변환 매트릭스를 근사화 하여이 문제를 완화하기 위해 다양한 모델이 제안되었습니다. 이 리포지토리에는 사전에 사기가 된 RoBerta Checkpoint의 가중치로 이러한 모델 중 일부를 초기화하는 일부 기능이 포함되어 있으므로 장기 문서 작업을위한 새로운 모델을 효율적으로 만들 수 있습니다.
이 모델을 사전에 사기로 만든 무게로 초기화한다고해서 경쟁력은 물론 직접 사용할 수있는 것은 아닙니다. 대부분의 경우 다운 스트림 작업에서 만족스러운 결과를 얻으려면 적어도 수천 개의 "지속적인 예약"단계가 필요합니다.
사전 전파 된 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/" )
...