【问题标题】:Large difference between overall F Score for a custom Spacy NER model and Individual Entity F Score自定义 Spacy NER 模型的总体 F 分数与单个实体 F 分数之间的巨大差异
【发布时间】:2019-12-08 12:14:19
【问题描述】:

我正在使用 Spacy 在包含 6 个实体的 5000 个文本条目的样本上训练自定义 NER 模型。在对未见过的样本(500 个文本条目)评估训练模型时,我为整个模型 (93.8) 获得的 F 分数与任何单个实体的 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 分数与个体实体分数的关系是什么?

【问题讨论】:

    标签: python machine-learning nlp spacy


    【解决方案1】:

    我认为这是一个应该在下一个版本中修复的错误。您可以在这里查看详细信息:https://github.com/explosion/spaCy/issues/3968

    【讨论】:

    • 我明白了。看起来像这样。感谢您的链接@aab
    • 您也可以尝试从最新版本的 spaCy 编译并安装它。见spacy.io/usage#source。另一个临时技巧是在您的项目中复制最新版本的 scorer.py 并使用该 Scorer 类而不是 spaCy 源代码中的 scorer 类。
    • 请注意,当前版本仍然至少有一个额外的错误(它不计算在黄金中但在文档中没有找到的实体类型),但希望也能尽快修复。
    • 谢谢,@FallakAsad 它对我有用。我还有一个问题。模型的整体 F 分数是如何计算的?它是所有个人 F 分数的平均值吗?
    • 我不认为这是所有个体实体的平均值。更新后Scorero.py - 我总体的F值是93.79254457050243而我个人F值是 - 实体1 - 94.01503759398496实体2 - 90.97118165661917实体3 - 99.02774315324619实体4 - 94.99593637524671实体5 - 97.8927203065134实体6 - 这些90.40767386091126平均不匹配总体 F 分数!
    猜你喜欢
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多