Pytorch RobertaTokenizer()和from_pretrained()初始化RobertaTokenizer的方法有什么区别?

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

我是《拥抱变形金刚》的新手,在从头开始训练《罗伯塔·福马斯凯德尔姆》的过程中面临以下问题:

首先,我通过TelevelbeTokenizer培训并保存了一个
,如下所示:

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
是从预训练令牌程序初始化令牌程序的推荐方法,因此应该使用。

感谢您指出这一点。这就解释了这两种方法之间的区别。我会等几天再接受这个帖子,看看是否有更好的答案。