我正在使用 Spacy 在包含 6 个实体的 5000 个文本条目样本上训练自定义 NER 模型。在评估未见过的样本(500 个文本条目)上的训练模型时,我获得的整个模型的 F 分数 (93.8
) 与任何单个实体的 F 分数之间存在很大差异。有人可以帮助我了解总体 F 分数是如何计算的以及为什么总体 F 分数和单个实体分数之间有如此大的差异吗?
我使用 Spacy 构建了自己的自定义命名实体识别 (NER) 模型。我的训练数据集大小为 5000 个,有 6 个实体。此外,我在 500 个样本上测试了我的模型,并使用 Scorer
和 GoldParse
评估了模型。
这是我用于评估测试数据性能的代码 -
def evaluate(ner_model, examples):
scorer = Scorer()
for input_, annot in examples:
doc_gold_text = ner_model.make_doc(input_)
gold = GoldParse(doc_gold_text, entities=annot.get('entities'))
pred_value = ner_model(input_)
scorer.score(pred_value, gold)
return scorer.scores
这是我得到的结果 -
{'uas': 0.0, 'las': 0.0, 'ents_p': 93.62838106164233, 'ents_r':
93.95728476332452, 'ents_f': 93.79254457050243,
'ents_per_type': {
'ENTITY1': {'p': 6.467595956926736, 'r': 54.51002227171492, 'f':
11.563219748420247},
'ENTITY2': {'p': 6.272470243289469, 'r': 49.219391947411665, 'f':
11.126934984520123},
'ENTITY3': {'p': 18.741109530583213, 'r': 85.02742820264602, 'f':
30.712745497989392},
'ENTITY4': {'p': 13.413228854574788, 'r': 70.58823529411765, 'f':
22.54284884283916},
'ENTITY5': {'p': 19.481765834932823, 'r': 82.85714285714286, 'f':
31.546231546231546},
'ENTITY6': {'p': 24.822695035460992, 'r': 64.02439024390245, 'f': 35.77512776831346}},
'tags_acc': 0.0, 'token_acc': 100.0}
在这里,您可以看到对于任何其他实体类型,ents_f
和 f
之间存在巨大差异。模型的整体F Score与各个实体得分有什么关系?
最佳答案
我认为这是一个应该在下一个版本中修复的错误。您可以在这里查看详细信息:https://github.com/explosion/spaCy/issues/3968
关于python - 自定义 Spacy NER 模型的总体 F 分数与单个实体 F 分数之间存在巨大差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57282912/