使用Anaconda3+Rasa+SpaCy+Sklearn训练聊天机器人遇DeprecationWarning的原因及解决方法
我之前在基于Rasa+Sklearn训练聊天机器人的时候也碰到过一模一样的警告,给你拆解下原因和解决办法:
问题原因分析
这个警告来自Scikit-learn的label.py模块,核心原因是代码里对空数组直接做了布尔值判断(比如if some_empty_array:)。在旧版本的Sklearn里这种写法会返回False,但官方已经明确这种判断逻辑有歧义,未来版本会直接抛出错误,所以提前给出了DeprecationWarning。
放到你的Rasa训练场景里,大概率是这两种情况:
- 你的聊天机器人数据集存在异常:比如某个意图没有对应的训练样本,或者部分样本的意图/实体标注为空,导致预处理阶段生成了空的特征/标签数组,触发了Sklearn的这个判断逻辑。
- 你使用的Sklearn版本和Rasa的兼容性问题:部分旧版本的Sklearn(比如0.22.x系列)会频繁弹出这个警告,而Rasa的某些版本对Sklearn有特定依赖,可能刚好匹配到了这个有警告的版本。
解决方案
1. 从数据集根源修复(最推荐)
先检查你的Rasa数据集文件:
- 打开
nlu.yml,确认所有意图都有至少一条有效训练样本,没有空的intent条目或者标注缺失的样本。 - 检查
stories.yml,确保对话流程里的意图引用都是存在的,没有拼写错误或者指向无样本的意图。
如果发现空样本或无效标注,补全或删除后重新训练,警告大概率会消失。
2. 调整Sklearn版本
如果数据集没问题,那可以尝试调整Sklearn的版本:
- 如果你用的是较旧的Sklearn,升级到0.23.2及以上版本(这个版本修复了空数组判断的警告逻辑,同时和多数稳定版Rasa兼容)。在Anaconda里执行命令:
conda install scikit-learn=0.23.2
- 注意:如果你的Rasa版本比较老,可能需要查看Rasa官方的依赖说明,选择兼容的Sklearn版本,避免版本冲突。
3. 临时屏蔽警告(应急方案)
如果暂时没时间调整数据集或版本,可以在训练脚本的开头添加以下代码,专门屏蔽Sklearn的这个DeprecationWarning:
import warnings warnings.filterwarnings("ignore", category=DeprecationWarning, module="sklearn")
不过这只是“治标”的方法,建议还是从根源解决问题,避免未来版本升级后真的触发错误。
4. 检查Rasa Pipeline配置
打开config.yml,查看你的NLU pipeline里是否有特征提取相关的组件(比如CountVectorizer)出现配置异常,导致生成了空的特征数组。比如是否开启了某些过滤规则,把所有特征都过滤掉了?调整pipeline配置后重新训练试试。
内容的提问来源于stack exchange,提问作者Antonblue16
相关产品推荐
相关产品推荐

