roberta2longformer
1.0.0
该仓库包含各种功能,将验证的RoBerta模型的编码器部分转换为长期序列变压器。
具有香草自我注意力的语言模型的记忆消耗和运行时,双向增长到输入序列的长度。提出了通过使用稀疏或局部注意模式或使用分解方法近似完整的自我发项矩阵来放松此问题的各种模型。该存储库包含一些功能,可以用验证的RoBerta检查点的权重初始化其中一些模型,因此,可以有效地为长期文档任务创建新模型。
请注意,用预估计的重量初始化这些模型并不能直接使用它们,更不用说竞争力了。在大多数情况下,需要至少几千个“继续进行”步骤以在任何下游任务上取得令人满意的结果。
将验证的RoBerta模型转换为Longformer模型
Longformer模型(I. Beltagy,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 -Archittucter(Xionget。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/" )
...