RASA 2升级至3.6.20后NLU模型训练异常返回null求助
Rasa 2升级到3后训练异常问题排查
问题现象
- 执行
rasa train时,终端提示训练成功,但无epoch进度条,训练瞬间完成 - 用
rasa shell加载模型后,任何输入都返回null意图,置信度为0 - 生成的模型体积极小(仅2KB左右),远小于正常训练的模型
运行环境
- Rasa 3.6.20
- spaCy 3.7.6
- Python 3.9 虚拟环境
配置文件(config.yml)
version: "3.1" recipe: "default.v1" language: en pipeline: - name: SpacyNLP model: en_core_web_sm - name: SpacyTokenizer - name: SpacyFeaturizer - name: SpacyEntityExtractor - name: RegexFeaturizer analyzer: char_wb min_ngram: 1 max_ngram: 4 - name: DIETClassifier epochs: 100 constrain_similarities: true - name: EntitySynonymMapper policies: - name: MemoizationPolicy assistant_id: 20240813-193423-felt-modal
注:原配置中pipeline组件缺少
-前缀,属于格式错误,会导致组件无法被正确加载
训练日志片段
2024-08-29 17:45:41 INFO rasa.nlu.utils.spacy_utils - Trying to load SpaCy model with name ‘en_core_web_sm’. 2024-08-29 17:45:42 INFO rasa.nlu.utils.spacy_utils - Trying to load SpaCy model with name ‘en_core_web_sm’. 2024-08-29 17:45:43 INFO rasa.engine.training.hooks - Starting to train component ‘RegexFeaturizer’. 2024-08-29 17:45:43 INFO rasa.engine.training.hooks - Finished training component ‘RegexFeaturizer’. 2024-08-29 17:45:43 INFO rasa.engine.training.hooks - Starting to train component ‘DIETClassifier’. 2024-08-29 17:45:43 INFO rasa.engine.training.hooks - Finished training component ‘DIETClassifier’. 2024-08-29 17:45:43 INFO rasa.engine.training.hooks - Starting to train component ‘EntitySynonymMapper’. 2024-08-29 17:45:43 INFO rasa.engine.training.hooks - Finished training component ‘EntitySynonymMapper’. Your Rasa model is trained and saved at ‘models/nlu-20240829-174541-heartless-bayou.tar.gz’. Rasa model training completed successfully.
测试日志片段(rasa shell)
2024-08-29 18:05:26 INFO rasa.core.processor - Loading model models/nlu-20240829-174541-heartless-bayou.tar.gz… 2024-08-29 18:05:26 INFO rasa.nlu.utils.spacy_utils - Trying to load SpaCy model with name ‘en_core_web_sm’. 2024-08-29 18:05:28 INFO rasa.nlu.utils.spacy_utils - Trying to load SpaCy model with name ‘en_core_web_sm’. NLU model loaded. Type a message and press enter to parse it. Next message: Hello, this is a test message. { "text": "Hello, this is a test message.", "intent": { "name": null, "confidence": 0.0 }, "entities": [], "text_tokens": [ [ 0, 5 ], [ 5, 6 ], [ 7, 11 ], [ 12, 14 ], [ 15, 16 ], [ 17, 21 ], [ 22, 29 ], [ 29, 30 ] ], "intent_ranking": [] } Next message:
模型体积对比
RASA 3, 返回null的异常模型: 2456 Aug 30 14:20 nlu-20240830-142056-poky-turret.tar.gz RASA 3, 正常训练模型:19923109 Aug 13 16:08 nlu-20240730-180020-hot-event.tar.gz RASA 2, 正常模型: 37456829 Sep 3 18:24 nlu-20240903-182449.tar.gz
排查思路
- 修复配置文件格式:确保pipeline和policies下的每个组件前都有
-前缀,这是Rasa 3对配置文件的强制要求,缺少会导致组件无法被加载,训练流程异常。 - 检查训练数据有效性:确认
nlu.yml中是否有标注完整的意图、样本数据,若训练集无有效样本,DIETClassifier会跳过训练直接生成空模型。同时检查数据格式是否符合Rasa 3的规范,比如意图名称是否合法、样本是否未被意外注释。 - 查看详细训练日志:执行
rasa train --debug获取完整日志,重点关注数据加载、组件初始化阶段的报错信息,比如Spacy模型是否加载成功、训练数据是否被正确读取。 - 校验依赖兼容性:执行
pip check检查虚拟环境中是否有依赖冲突,尝试重新安装Rasa和Spacy:pip install --upgrade rasa spacy,并重新下载Spacy模型:python -m spacy download en_core_web_sm。 - 测试最小化项目:创建一个包含简单nlu数据(比如2-3个意图样本)和标准配置的测试项目,执行
rasa train验证是否能生成有效模型,逐步排查是否是原项目数据或配置的问题。 - 检查模型完整性:解压异常模型文件,确认是否包含训练后的权重文件,若仅存在空配置文件,说明训练过程未正常生成模型权重。
内容的提问来源于stack exchange,提问作者mysteriousfunicular
相关产品推荐
相关产品推荐

