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

spaCy SpanCat管道初始化标签时遇[E143]错误求助

spaCy SpanCategorizer多标签训练标签未初始化问题解决

我在搭建支持多标签的spaCy SpanCategorizer时,已用doc.spans[label]标注训练数据并保存为训练/开发集,但训练时触发错误:

ValueError: [E143] Labels for component 'spancat' not initialized. This can be fixed by calling add_label, or by providing a representative batch of examples to the component's initialize method.

我已在配置文件[components.spancat]的spans_key中添加标签,也生成了带标签的Example对象并调用spancat.initialize,但标签仍未被识别。


核心问题分析

  1. SpanGroup使用错误:SpanCategorizer要求所有目标标签的span存入同一个SpanGroup,而非每个标签单独创建SpanGroup。你的代码为每个标签独立创建doc.spans[label],不符合spaCy的预期格式。
  2. Example对象顺序颠倒:初始化时Example的正确顺序应为「无标注doc作为pred,带标注doc作为gold」,你的代码搞反了两者位置。
  3. 配置文件参数格式错误:spans_key应是字符串(指定存放所有span的SpanGroup名称),而非标签列表。

具体修正步骤

1. 修正标注代码

将所有标签的span存入统一的SpanGroup(比如命名为"sc",需和配置文件对应),每个span保留自身label:

for doc in docs:
    phrase_matches = phrase_matcher(doc)
    
    # 初始化统一的SpanGroup,替代原有的多标签独立SpanGroup
    doc.spans["sc"] = []
    
    for match_id, start, end in phrase_matches:
        match_label = nlp.vocab.strings[match_id]
        span = Span(doc, start, end, label=match_label)
        doc.spans["sc"].append(span)

2. 修正配置文件的spans_key

将标签列表改为统一的SpanGroup名称:

[components.spancat]
factory = "spancat"
max_positive = null
scorer = {"@scorers":"spacy.spancat_scorer.v1"}
# 改为统一的SpanGroup名称,此处为"sc"
spans_key = "sc"
threshold = 0.5

3. 修正Initialize代码

调整Example顺序,并显式添加所有标签确保组件识别:

def get_examples():
    # 正确顺序:pred为无标注doc,gold为带标注doc
    for gold, pred in zip(all_annotated_pre_shuffled_docs, docs_without_annotations):
        yield Example(pred, gold)

spancat = nlp.add_pipe("spancat", before="textcat")
# 显式添加所有标签,确保组件初始化时识别
for label in labels:
    spancat.add_label(label)
# 执行初始化
spancat.initialize(get_examples, nlp=nlp)

4. 验证数据格式

保存DocBin后,可加载训练集检查几个doc的doc.spans["sc"],确认其中包含所有带正确label的span,确保标注格式符合要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:25:29