微调波斯语T5改写模型时保存词汇遇ValueError问题求助
问题解决:波斯语T5模型微调时保存Tokenizer报错
问题原因
你遇到的报错是因为erfan226/persian-t5-paraphraser使用的是Fast Tokenizer(基于SentencePiece的快速实现),而save_vocabulary()方法是针对传统Slow Tokenizer设计的,Fast Tokenizer没有对应的词汇表保存所需的完整信息,因此触发该错误。而t5-base的tokenizer在加载时默认使用Slow Tokenizer,所以能正常调用save_vocabulary。
解决方案
修改SaveCallback类中的保存逻辑,替换tokenizer.save_vocabulary()为tokenizer.save_pretrained(),该方法会自动保存Fast Tokenizer所需的所有文件(包括词汇表、配置文件等),同时和模型的保存逻辑保持一致:
class SaveCallback(Callback): def on_epoch_start(self, trainer, pl_module): if pl_module.current_epoch > 0: current_epoch = str(pl_module.current_epoch) fn = f'epoch_{current_epoch}' new_path = f"{save_path}/{fn}/" if fn not in os.listdir(save_path): os.mkdir(new_path) # 替换原有的save_vocabulary为save_pretrained pl_module.tokenizer.save_pretrained(new_path) pl_module.model.save_pretrained(new_path)
额外说明
save_pretrained()是Transformers库中推荐的保存模型和Tokenizer的标准方法,它会将所有必要的文件(模型权重、配置、Tokenizer词汇/配置)统一保存到指定路径,后续可以直接用AutoTokenizer.from_pretrained()和AutoModelForSeq2SeqLM.from_pretrained()加载。- 不需要单独调用
save_vocabulary(),因为save_pretrained()已经包含了词汇表的保存逻辑,且适配Fast/Slow Tokenizer。
内容的提问来源于stack exchange,提问作者Ali Ghasemi
相关产品推荐
相关产品推荐

