You need to enable JavaScript to run this app. SpaCy 3更新fr_core_news_lg的NER模型报错无entity属性怎么解决?
优惠活动
大模型
产品
解决方案
定价
更多

SpaCy 3更新fr_core_news_lg的NER模型报错无entity属性怎么解决?

报错修复方案

错误根因

你更新到spaCy 3.x版本后,原spaCy 2.x的nlp.entity直接访问实体组件的API被废弃,所有管道组件必须通过nlp.get_pipe(组件名)的方式获取,同时nlp.update的入参格式也有同步调整。

修复步骤

  • 第一步:调整优化器创建逻辑,从获取到的ner组件实例调用创建方法
  • 第二步:适配spaCy 3.x的nlp.update入参要求,将原始文本和标注转换为Example对象

修改后的完整代码

首先新增依赖导入:

from spacy.training import Example

调整后的train方法:

def train(self, label, n_iter=10, batch_size=50):
    # 先获取ner管道组件,再创建优化器
    ner = self.nlp.get_pipe('ner')
    optimizer = ner.create_optimizer()
    other_pipes = [pipe for pipe in self.nlp.pipe_names if pipe != 'ner']

    # 新增实体标签
    ner.add_label(label)

    with self.nlp.disable_pipes(*other_pipes):
        for itn in range(n_iter):
            random.shuffle(self.train_data)
            losses = {}

            # 分批迭代训练数据
            for batch in spacy.util.minibatch(self.train_data, size=batch_size):
                # 适配3.x入参格式,转换为Example对象
                examples = []
                for text, annotations in batch:
                    doc = self.nlp.make_doc(text)
                    example = Example.from_dict(doc, annotations)
                    examples.append(example)

                # 更新模型
                self.nlp.update(examples, sgd=optimizer, losses=losses)
                print(losses)
    print("Final loss: ", losses)

额外验证点

你提供的训练样本格式符合要求,不需要调整,修改代码后即可正常运行训练逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 20:36:02