使用Predictor.from_path加载本地coref-spanbert模型仍自动下载如何解决
核心原因
AllenNLP的Predictor.from_path方法路径解析优先级为:优先匹配公开模型库的模型名称,再解析本地路径。如果你传入的是相对路径,或是路径字符串和公开模型名重名,就会优先触发下载逻辑。另外模型包内部依赖的SpanBERT基础预训练权重默认会从Hugging Face Hub拉取,本地缓存不存在时也会触发下载行为。
解决步骤
- 优先使用绝对路径加载本地模型,避免相对路径识别出错,可以先通过
os.getcwd()确认当前工作目录是否和模型存放目录一致,再调用方法:
import os from allennlp.predictors import Predictor # 转换为绝对路径 model_path = os.path.abspath("coref-spanbert-large-2021.03.10.tar.gz") coref_model = Predictor.from_path(model_path)
- 若仍有下载进度,说明当前下载的是模型依赖的SpanBERT基础权重,可手动指定本地缓存目录读取:
coref_model = Predictor.from_path( model_path, cache_dir="你的本地预训练权重存放目录路径" )
- 要验证是否真的读取本地模型,可临时开启Transformers离线模式,禁用网络拉取:
import os os.environ["TRANSFORMERS_OFFLINE"] = "1" from allennlp.predictors import Predictor model_path = os.path.abspath("coref-spanbert-large-2021.03.10.tar.gz") coref_model = Predictor.from_path(model_path)
如果离线模式下运行报错找不到对应权重,说明本地缺少对应的SpanBERT预训练文件,手动下载后放到指定缓存目录即可。
内容的提问来源于stack exchange,提问作者Irshad Bhat
相关产品推荐
相关产品推荐

