加载spaCy训练模型时出现'nO维度未设置'错误求助
问题分析与解决方案
错误原因
你遇到的ValueError: Cannot get dimension 'nO' for model 'sparse_linear': value unset,核心问题是预测时使用了未加载训练权重的空白spaCy管道:
- 代码里的
nlp = spacy.blank("pl")仅创建了空白波兰语管道,后续手动添加textcat_multilabel组件并添加标签,但这个管道没有任何训练后的权重参数。 sparse_linear是多标签文本分类器的输出层,nO代表该层的输出维度(即你的类别数量),空白管道的这个维度未被训练过程初始化,因此调用nlp(text)时触发维度错误。- 你已成功训练并保存模型,但未在预测阶段加载该模型,而是继续使用最初的空白管道。
解决步骤
修正模型路径:训练命令指定输出路径为
./output,因此训练好的最优模型在./output/model-best/,先修正评估命令的路径错误:! python -m spacy evaluate ./output/model-best/ ./test.spacy修改预测函数:放弃使用最初的空白
nlp对象,改为加载训练好的模型进行预测:def predict_spaCy(text): # 加载训练完成的最优模型 nlp = spacy.load("./output/model-best/") doc = nlp(text) # 多标签场景下,若需取置信度最高的类别,保留此逻辑;若需提取所有高置信度标签,可调整为筛选阈值 label = max(doc.cats, key=doc.cats.get) return label(可选)清理冗余代码:最初的空白
nlp仅用于生成训练数据的DocBin,训练完成后无需保留其添加textcat_multilabel组件的代码(这部分代码对预测无意义,反而容易混淆)。
验证修改
运行修改后的预测函数,传入测试文本即可正常得到预测结果:
text_to_classify = "klient pytanie produkt ASIN połączenie dachówka wentylacyjny link zapytanie web_site pozdrawiać persName" predicted_label = predict_spaCy(text_to_classify) print("Predicted Label:", predicted_label)
内容的提问来源于stack exchange,提问作者Bartlomiej Rozanski
相关产品推荐
相关产品推荐

