spaCy自定义与预训练NER模型置信度获取及报错问题咨询
问题解答
报错原因
- 你使用的代码适配的是
spancat(跨度分类器)管线组件,但你加载的模型中默认集成的实体识别组件是ner,二者输出位置完全不同,ner的识别结果不会写入doc.spans["spancat"]字段,因此触发KeyError。 - 你当前使用的spacy==3.1.2版本原生不支持获取NER实体置信度,该功能正式上线于spaCy 3.5及更高版本,版本不兼容也会导致功能无法使用。
置信度功能支持范围
- 官方预训练NER模型:仅3.5版本及以上的官方预训练模型包内置的
ner组件支持直接获取实体置信度,更低版本的预训练包无此功能。 - 自定义训练的NER模型:如果是在spaCy 3.5及以上版本环境下训练,且训练配置中开启了
store_scores = true参数,就可以正常获取置信度;旧版本环境下训练的自定义NER模型,需要在高版本环境下重新微调训练后才能支持该功能。 - 如果你自定义训练的是
spancat组件,只要模型管线中正确加载了训练好的spancat组件,就可以通过你现有代码获取跨度置信度。
操作示例
步骤1:升级spaCy到符合要求的版本
pip install -U spacy>=3.5.0
步骤2:NER组件获取置信度代码
自定义训练前,需在配置文件中[components.ner]配置段新增参数store_scores = true,训练完成的模型才会存储实体置信度,后续调取代码如下:
import spacy # 加载符合版本要求的预训练/自定义NER模型 nlp = spacy.load("output/model-best") doc = nlp("Sample data here") # 遍历所有识别出的实体,打印文本、类型、置信度 for ent in doc.ents: print(f"实体文本:{ent.text},实体类型:{ent.label_},置信度:{ent._.score}")
内容的提问来源于stack exchange,提问作者user17179901
相关产品推荐
相关产品推荐

