You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

spaCy模型from_disk加载后丢失EntityRuler添加实体问题求助

问题原因与解决方案

核心原因

当你通过nlp.add_pipe添加entity_ruler并调用add_patterns时,这些规则模式仅存储在内存中的EntityRuler实例里。spaCy 默认执行nlp.to_disk()时,只会序列化流水线的组件结构和基础配置,不会自动将你添加的规则模式写入磁盘。因此重新加载模型时,entity_ruler组件虽然存在,但内部没有任何规则,导致你之前添加的实体无法被识别。

解决方案

方案一:单独保存规则模式,加载时重新添加

这是最直接的处理方式,将规则模式单独存储为文件,加载模型后重新注入到entity_ruler中:

保存阶段代码:

import json

# 保存spaCy模型到磁盘
nlp.to_disk("path/to/model")

# 将规则模式单独保存为JSON文件
with open("path/to/model/patterns.json", "w", encoding="utf-8") as f:
    json.dump(patterns, f)

加载阶段代码:

import json

# 加载保存的模型
nlp = spacy.from_disk("path/to/model")

# 获取流水线中的entity_ruler组件
ruler = nlp.get_pipe("entity_ruler")

# 读取规则模式并添加到组件中
with open("path/to/model/patterns.json", "r", encoding="utf-8") as f:
    saved_patterns = json.load(f)
ruler.add_patterns(saved_patterns)

方案二:通过配置让spaCy自动管理规则模式

这种方式更符合spaCy的规范,通过修改模型配置,让entity_ruler加载时自动读取规则文件:

保存阶段代码:

import json
from spacy.util import save_config

# 先将规则模式保存为JSON文件
with open("path/to/model/patterns.json", "w", encoding="utf-8") as f:
    json.dump(patterns, f)

# 修改模型配置,指定entity_ruler的规则文件路径
nlp.config["components"]["entity_ruler"]["patterns"] = "patterns.json"

# 保存修改后的配置
save_config("path/to/model/config.cfg", nlp.config)

# 保存模型到磁盘
nlp.to_disk("path/to/model")

加载阶段代码:

# 直接加载模型,spaCy会自动读取配置中指定的规则文件
nlp = spacy.from_disk("path/to/model")

或者你也可以在添加entity_ruler时就直接指定规则文件路径,避免后续修改配置:

import json

# 先保存规则模式到文件
with open("patterns.json", "w", encoding="utf-8") as f:
    json.dump(patterns, f)

# 加载基础模型并添加entity_ruler,同时指定规则文件
nlp = spacy.load("nl_core_news_md")
ruler = nlp.add_pipe("entity_ruler", before="ner", config={"patterns": "patterns.json"})

# 保存模型
nlp.to_disk("path/to/model")

# 加载时自动加载规则
nlp = spacy.from_disk("path/to/model")

内容的提问来源于stack exchange,提问作者IneG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:01:18