spaCy v3.3使用CLI训练模型时损失及各项指标均为0
spaCy v3.3训练时损失、评估指标全为0排查方案
你的流程里存在几个容易踩的坑,按优先级逐一排查即可:
基础配置选错,未启用NER训练组件
这是该问题最高发的原因。如果你生成base_config.cfg时没有指定任务为命名实体识别,配置文件里不会包含可训练的ner组件,也不会识别你自定义的FOOD实体标签,模型本质上没有执行NER任务训练,所有损失、指标自然全为0。
重新生成NER专属基础配置即可:python -m spacy init config -p ner base_config.cfg填充配置后打开
config.cfg检查,确认nlp.pipeline列表里包含ner组件,且存在[components.ner]配置块。生成的DocBin文件无有效标注实体
两种情况会导致这个问题:- 标注的字符偏移量和spaCy分词结果不匹配,
char_span返回None触发了你的Skipping entity逻辑,所有实体都被过滤,最终生成的.spacy文件里没有任何标注。 - 你加载
en_core_web_sm初始化nlp对象时,预训练模型自带的分词/标签集和你的自定义标注冲突,导致实体挂载失败。
执行以下代码验证DocBin有效性,如果输出实体为空,先修复标注偏移、换用空白模型nlp = spacy.blank("en")调用make_doc生成doc对象,再重新转换数据:
import spacy from spacy.tokens import DocBin nlp = spacy.blank("en") db = DocBin().from_disk("./train.spacy") docs = list(db.get_docs(nlp.vocab)) for doc in docs: # 正常情况这里会输出[('Pizza', 'FOOD'), ('Pasta', 'FOOD')] print([(ent.text, ent.label_) for ent in doc.ents])- 标注的字符偏移量和spaCy分词结果不匹配,
训练时未读取到有效数据
部分v3.3小版本存在路径错误静默失败的问题:如果传入的train.spacy/dev.spacy路径错误,程序不会抛出报错,会直接读取空数据集训练,所有指标输出0。
训练启动时注意看控制台第一部分日志,会打印加载的训练集、验证集样本数量,确认样本数和你实际构造的数据集大小一致。配置参数错误
检查config.cfg里的components.ner配置,如果设置了source参数指向其他不包含FOOD标签的模型,会导致自定义标签被覆盖;如果学习率、训练轮次被误设为0,也会出现全0输出。
注:你示例里的训练样本仅2条,样本量远低于训练最低要求,就算流程正确,模型泛化效果也会极差,但不会出现所有指标全0的现象,全0问题一定是上面提到的配置/数据读取错误导致的。
内容的提问来源于stack exchange,提问作者Vic13
相关产品推荐
相关产品推荐

