如何重新下载Hugging Face tokenizer,解决加载cardiffnlp模型分词器报错问题
问题原因
- 调用
model.save_pretrained(model_name)后,本地生成了与Hugging Face模型ID同名的目录,目录内仅包含模型权重、模型配置文件,无tokenizer所需的词汇表、合并规则等文件 - 后续调用
AutoTokenizer.from_pretrained(model_name)时,transformers库会优先读取本地同名路径的内容,检测到路径存在但缺少tokenizer相关文件,就会抛出OSError - 最初终端可正常运行是因为当时还未生成本地同名目录,库直接从远程拉取tokenizer;本地目录生成后,所有环境都会优先读本地残缺文件,因此后续终端也会报错
解决方法
临时解决(可联网场景)
强制让库从远程拉取tokenizer,忽略本地残缺目录,执行以下代码即可:
tokenizer = AutoTokenizer.from_pretrained(model_name, force_download=True)
如果不需要保留本地已保存的模型,也可以直接删除本地生成的cardiffnlp/twitter-roberta-base-emotion目录,再正常调用加载tokenizer的代码即可。
正确本地存储方案
后续如果需要将模型和tokenizer都保存在本地离线使用,按照以下流程操作:
- 加载时同时拉取模型和tokenizer
- 保存时两者都执行保存操作,建议单独指定存储路径,不要和Hugging Face的公共模型ID同名,避免冲突
示例代码:
from transformers import AutoModelForSequenceClassification, AutoTokenizer model_name = "cardiffnlp/twitter-roberta-base-emotion" # 同时加载模型和分词器 model = AutoModelForSequenceClassification.from_pretrained(model_name) tokenizer = AutoTokenizer.from_pretrained(model_name) # 指定本地存储路径 local_save_path = "./twitter-roberta-base-emotion-local" # 两者都执行保存 model.save_pretrained(local_save_path) tokenizer.save_pretrained(local_save_path) # 后续离线加载时直接使用本地路径即可 loaded_model = AutoModelForSequenceClassification.from_pretrained(local_save_path) loaded_tokenizer = AutoTokenizer.from_pretrained(local_save_path)
内容的提问来源于stack exchange,提问作者mer
相关产品推荐
相关产品推荐

