返回

如何在 spaCy v3 中训练自定义 NER 模型并避免预训练实体丢失?

python

## spaCy v3 自定义 NER 模型的训练与集成

## 问题陈述

在 spaCy v3 中训练自定义 NER 模型时,将它们添加到现有模型(如 "en_core_web_sm")可能会导致预训练实体的丢失,只保留自定义实体。

## 解决方案

1. 创建自定义配置文件

创建 my_config.cfg 配置文件,包含以下内容:

[nlp]
lang = "en"
pipeline = "ner"
components = {
    "ner": {
        "model": "en_core_web_sm",
        "config": {
            "model": {
                "exclusive_classes": true
            }
        }
    }
}

2. 排除预训练实体

my_config.cfg 文件的 exclusive_classes 设置中,将你的自定义实体添加到 excluded_classes 列表中,以排除预训练模型的实体:

[nlp]
lang = "en"
pipeline = "ner"
components = {
    "ner": {
        "model": "en_core_web_sm",
        "config": {
            "model": {
                "exclusive_classes": true,
                "excluded_classes": ["PERSON", "ORG"]
            }
        }
    }
}

替换 PERSONORG 为你的自定义实体。

3. 训练自定义 NER 模型

使用以下命令训练模型:

spacy train my_model my_config.cfg --output my_model

4. 加载自定义模型

训练完成后,加载模型:

import spacy
nlp = spacy.load("my_model")

## 注意事项

  • 自定义实体不得与预训练实体重叠。
  • 如果重叠,可在配置文件中设置 merge_similar_entities 选项合并相似语义的实体。

## 常见问题解答

Q1:如何避免训练期间的内存错误?

  • 减少训练数据量或使用更小的预训练模型。
  • 增加系统内存或使用 GPU。

Q2:训练后如何评估模型性能?

  • 使用训练数据以外的数据进行评估。
  • 使用 F1 分数、召回率和准确率等指标。

Q3:如何部署自定义模型?

  • 使用 spaCy 的 spacy package 命令将其打包为 Python 包。
  • 将包部署到服务器或其他环境。

Q4:如何更新训练好的模型?

  • 为现有模型创建新配置文件。
  • 使用 spacy update 命令更新模型。

Q5:如何提高模型的准确性?

  • 使用更全面的训练数据。
  • 尝试不同的特征提取技术。
  • 调整训练超参数(例如迭代次数)。