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

Spacy训练NER模型时遇AssertionError: [E923]错误求助

解决spaCy NER训练时[E923]错误的方案

问题根源

这个错误不是单纯删除配置标签就能解决的——tok2vec是NER模型提取词特征的核心组件,它需要足够的训练样本完成初始化,要么你的数据量太少,要么格式存在问题,要么你删除了配置标签但NER组件依然默认依赖它的输出。

具体解决办法

  • 检查训练数据规模:train.spacy里至少要有10-20个标注完整的样本,样本量太少的话tok2vec根本无法学到有效特征。样本不足的话优先补充标注数据。
  • 验证数据格式正确性:执行spacy validate ./train.spacy命令,检查数据是否存在格式错误,比如实体标注不完整、token拆分异常等,有问题先修复再训练。
  • 正确配置tok2vec(不要直接删除标签):
    1. 有预训练词向量的话,在配置文件中指定向量路径,让tok2vec用预训练向量初始化,无需从少量样本中提取特征:
      [components.tok2vec]
      factory = "tok2vec"
      [components.tok2vec.model]
      @architectures = "spacy.Tok2Vec.v2"
      [components.tok2vec.model.embed]
      @architectures = "spacy.MultiHashEmbed.v2"
      width = ${components.tok2vec.model.encode.width}
      attrs = ["ORTH", "SHAPE"]
      rows = [5000, 2500]
      include_static_vectors = true
      [components.tok2vec.model.encode]
      @architectures = "spacy.MaxoutWindowEncoder.v2"
      width = 96
      depth = 4
      window_size = 1
      maxout_pieces = 3
      
    2. 没有预训练向量的话,强制tok2vec随机初始化,不依赖训练数据完成初始化:
      [components.tok2vec.model.embed]
      @architectures = "spacy.MultiHashEmbed.v2"
      width = ${components.tok2vec.model.encode.width}
      attrs = ["ORTH", "SHAPE"]
      rows = [5000, 2500]
      include_static_vectors = false
      initialize_with_vectors = false
      
  • 临时测试方案(不推荐长期使用):训练命令添加--disable tok2vec参数,但会导致NER模型特征提取能力大幅下降,仅适合临时调试:
    python -m spacy train config.cfg --output ./output --paths.train ./train.spacy --paths.dev ./train.spacy --disable tok2vec
    

额外提醒

不要用同一个文件同时作为训练集和验证集,这会导致模型评估完全失效,建议拆分出独立的验证数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:30:44