如何unpickle加载训练好的SpaCy空白NER NLP模型并解决EOFError问题
问题原因及解决方案
EOFError: Ran out of input报错本质是读取的pickle文件不完整或为空,按以下步骤排查解决即可:
- 优先确认路径匹配:你保存模型时用的是相对路径
"nlp.p",加载时用的是绝对路径/content/nlp.p,先核对nlp.p文件确实存放在/content目录下,且文件大小大于0字节,排除文件保存失败、路径写错的问题。 - 修正pickle读写写法:你原有保存代码没有手动关闭文件,可能出现缓冲区未刷新、内容未完全写入磁盘的问题,推荐用上下文管理器保证文件操作正常收尾:
# 正确pickle保存代码 import pickle with open("nlp.p", "wb") as f: pickle.dump(nlp, f)
# 对应pickle加载代码 import pickle with open("/content/nlp.p", "rb") as f: nlp_model = pickle.load(f)
更稳定的方案:使用SpaCy自带序列化方法
pickle序列化存在版本兼容问题,不同SpaCy、依赖库版本可能出现加载失败,更推荐用SpaCy官方提供的模型读写接口:
# 保存模型 nlp.to_disk("./spacy_ner_model")
# 加载模型 import spacy nlp_model = spacy.load("./spacy_ner_model")
模型效果测试代码
加载完成后用以下代码即可测试实体识别效果:
test_text = "替换为你要测试的文本内容" doc = nlp_model(test_text) # 输出所有识别到的实体 for ent in doc.ents: print(f"实体文本:{ent.text},实体类型:{ent.label_},位置区间:{ent.start_char}-{ent.end_char}")
内容的提问来源于stack exchange,提问作者youta
相关产品推荐
相关产品推荐

