Pytorch RobertaTokenizer()和from_pretrained()初始化RobertaTokenizer的方法有什么区别?
我是《拥抱变形金刚》的新手,在从头开始训练《罗伯塔·福马斯凯德尔姆》的过程中面临以下问题: 首先,我通过TelevelbeTokenizer培训并保存了一个Pytorch RobertaTokenizer()和from_pretrained()初始化RobertaTokenizer的方法有什么区别?,pytorch,huggingface-transformers,huggingface-tokenizers,Pytorch,Huggingface Transformers,Huggingface Tokenizers,我是《拥抱变形金刚》的新手,在从头开始训练《罗伯塔·福马斯凯德尔姆》的过程中面临以下问题: 首先,我通过TelevelbeTokenizer培训并保存了一个,如下所示: tokenizer = ByteLevelBPETokenizer() print('Saving tokenizer at:', training_file) tokenizer.train(files=training_file, vocab_size=VOCAB_SIZE, min_frequency=2, specia
,如下所示:
tokenizer = ByteLevelBPETokenizer()
print('Saving tokenizer at:', training_file)
tokenizer.train(files=training_file, vocab_size=VOCAB_SIZE, min_frequency=2,
special_tokens=["<s>","<pad>","</s>","<unk>","<mask>"])
tokenizer.save_model(tokenizer_mdl_dir)
roberta_tokenizer = RobertaTokenizer(tokenizer_mdl + "/vocab.json", tokenizer_mdl + "/merges.txt")
但是现在,当我尝试使用填充掩模管道测试经过训练的LM时
fill_mask_pipeline = pipeline("fill-mask", model=roberta_model, tokenizer=roberta_tokenizer)
我得到以下错误:
PipelineException:在输入上找不到掩码\u标记()
因此,我意识到,我加载的标记器也在标记
标记。但我不明白它为什么这么做。请帮助我理解这一点
在尝试了几件事情之后,我加载了不同的标记器
roberta_tokenizer = RobertaTokenizer.from_pretrained(tokenizer_mdl)
现在,fill\u mask\u管道
运行时没有错误。那么,使用RobertTokenizer()
加载标记器与使用.from\u pretrained()
方法加载标记器之间的区别是什么?当您比较属性unique\u no\u split\u标记器时,您将看到这是为from\u pretrained
标记器初始化的,而不是为另一个标记器初始化的
#来自预训练
t1.唯一\u无\u分割\u令牌
['', '', '', '', '']
#__初始化__
t2.唯一\u无\u分割\u令牌
[]
此属性由从\u pretrained
调用的填充,但不是由\uuuu init\uuuu
调用。实际上我不确定这是一个bug还是一个特性from_pretrained
是从预训练令牌程序初始化令牌程序的推荐方法,因此应该使用。感谢您指出这一点。这就解释了这两种方法之间的区别。我会等几天再接受这个帖子,看看是否有更好的答案。