SpaCy 3.0自定义NER模型训练后的验证评估方法咨询
SpaCy 3.x 自定义NER模型验证方法
1. 用内置评估工具生成全量细分指标
SpaCy 3.x自带spacy evaluate命令,你可以用从未参与训练、调参流程的独立测试集运行该命令,能获取到比meta.json里丰富得多的细分指标:
- 单实体类别的精确率、召回率、F1值:可以单独查看不同类别的偏见词汇(比如性别指向类、年龄指向类、学历歧视类等)的识别效果,避免全局指标好看但某类高风险偏见词漏检严重的问题
- 错误明细:可以看到哪些实体被误识别为其他类别、哪些标注实体完全未被检出等具体错误案例
命令格式为spacy evaluate 待评估模型路径 测试集路径,测试集需要是SpaCy支持的.spacy二进制格式,也可以加--output 评估结果.json参数把全量指标导出到本地文件,方便多版本横向对比。
2. 自定义细粒度评估逻辑
如果内置指标无法匹配你的业务需求,可以自行写代码加载模型逐样本验证:
- 你可以根据偏见词检测的业务优先级自定义评估规则,比如漏检偏见词的后果远高于误报的话,可以单独统计漏检率作为核心筛选指标;也可以单独统计不同长度、不同出现频次的实体的识别效果
参考代码片段:
import spacy from spacy.tokens import DocBin # 加载待评估模型和测试集 nlp = spacy.load("你的模型存储路径") doc_bin = DocBin().from_disk("你的测试集文件路径.spacy") test_docs = list(doc_bin.get_docs(nlp.vocab)) true_positives = 0 false_negatives = 0 false_positives = 0 # 自定义指标统计逻辑 for doc in test_docs: pred_doc = nlp(doc.text) true_ents = {(ent.start_char, ent.end_char, ent.label_) for ent in doc.ents} pred_ents = {(ent.start_char, ent.end_char, ent.label_) for ent in pred_doc.ents} true_positives += len(true_ents & pred_ents) false_negatives += len(true_ents - pred_ents) false_positives += len(pred_ents - true_ents)
3. 人工抽样校验
针对偏见词检测这类标注边界相对模糊的场景,必须补充人工校验环节:
- 分层抽样每个模型的预测结果:比如抽取一部分模型识别为偏见词的样本统计误报率,抽取一部分模型未识别出实体的样本统计漏检率,也可以按偏见词类别单独抽样校验
- 可以设置适配业务的人工评分规则,把人工评分作为模型筛选的补充指标,避免统计指标和实际使用效果出现偏差
多版本模型筛选建议
8个版本的模型统一使用同一份独立测试集跑完全部评估流程,把所有指标整理到同一份表格中对比,优先按业务核心需求排序指标权重,再结合人工校验结果选出最优版本即可。
内容的提问来源于stack exchange,提问作者Richard_F96
相关产品推荐
相关产品推荐

