You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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文件无有效标注实体
    两种情况会导致这个问题:

    1. 标注的字符偏移量和spaCy分词结果不匹配,char_span返回None触发了你的Skipping entity逻辑,所有实体都被过滤,最终生成的.spacy文件里没有任何标注。
    2. 你加载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])
    
  • 训练时未读取到有效数据
    部分v3.3小版本存在路径错误静默失败的问题:如果传入的train.spacy/dev.spacy路径错误,程序不会抛出报错,会直接读取空数据集训练,所有指标输出0。
    训练启动时注意看控制台第一部分日志,会打印加载的训练集、验证集样本数量,确认样本数和你实际构造的数据集大小一致。

  • 配置参数错误
    检查config.cfg里的components.ner配置,如果设置了source参数指向其他不包含FOOD标签的模型,会导致自定义标签被覆盖;如果学习率、训练轮次被误设为0,也会出现全0输出。

注:你示例里的训练样本仅2条,样本量远低于训练最低要求,就算流程正确,模型泛化效果也会极差,但不会出现所有指标全0的现象,全0问题一定是上面提到的配置/数据读取错误导致的。


内容的提问来源于stack exchange,提问作者Vic13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 11:27:21