Rasa模型加载推理时实体识别失效的问题排查求助
问题排查:Rasa NLU训练后即时推理正常,单独加载模型无实体识别结果
先揪出你推理代码里的核心错误:你在推理环节多余地初始化了Trainer并调用了persist()方法,这不仅完全没必要,甚至直接破坏了你之前训练好的有效模型!
关键错误分析
你的推理代码里这两行是问题根源:
trainer = Trainer(config.load("config_spacy.yaml")) model_directory = trainer.persist('/home/vz/goutham_Openseq/ner/rasa/projects/default/model_20190706-004103/')
这个新初始化的Trainer没有加载任何训练数据,调用persist()会在你指定的模型目录下生成一个空的、未训练的模型,直接覆盖了你之前辛苦训练好的实体识别模型。这就是为什么后续加载模型后识别不出实体——你加载的已经不是原来的有效模型了。
修正后的推理代码
删掉多余的Trainer相关代码,直接加载已训练好的模型即可:
from rasa_nlu.model import Interpreter # 直接指定训练完成的模型路径,无需Trainer和persist操作 model_directory = '/home/vz/goutham_Openseq/ner/rasa/projects/default/model_20190706-004103/' interpreter = Interpreter.load(model_directory) print(interpreter.parse(u"ji bilkul han ji bilkul isliye payment nahi kara tha humne kitne mein likha aapko this rupay discount de dia to phir aap jama kar dena"))
额外排查方向(若修正后仍有问题)
- 验证模型路径有效性:确认
model_directory指向的文件夹里包含metadata.json、nlu子文件夹等训练生成的完整文件,没有被误删或损坏。 - 检查环境版本一致性:训练和推理环境的Rasa NLU、spaCy版本必须完全匹配,版本差异可能导致模型加载异常。可以用
pip freeze导出两个环境的依赖列表对比验证。 - 确认配置文件匹配:确保推理时使用的
config_spacy.yaml和训练时完全一致(比如实体提取器的配置、语言模型选型等),不过Interpreter.load会自动读取模型内置的元数据,这一步通常无需额外操作。
内容的提问来源于stack exchange,提问作者user3398900
相关产品推荐
相关产品推荐

