我是抱脸变形金刚RobertaForMaskedLM
的新手,在从头开始训练 LM 时面临以下问题:
首先,我训练并保存了一个ByteLevelBPETokenizer
如下:
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)
RobertaForMaskedLM
然后,通过创建一个使用这个标记器进行训练RobertaTokenizer
,如下所示:
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:在输入上找不到 mask_token ()
所以,我意识到,我加载的<mask>
标记器也在标记标记。但我不明白为什么会这样。请帮助我理解这一点。
在尝试了几件事之后,我以不同的方式加载了标记器,
roberta_tokenizer = RobertaTokenizer.from_pretrained(tokenizer_mdl)
而且,现在fill_mask_pipeline
运行没有错误。RobertaTokenizer()
那么,使用该方法加载分词器和使用该方法有什么区别.from_pretrained()
?