【问题标题】:How to automatically compute accuracy (precision, recall, F1) for NER?如何自动计算 NER 的准确度(精度、召回率、F1)?
【发布时间】:2023-03-29 16:59:01
【问题描述】:

我正在使用一个 NER 系统,它提供一个文本文件作为输出,其中包含一个命名实体列表,这些实体是概念扬声器的实例。我正在寻找一种工具,可以通过将此列表和实例正确注释为标签<Speaker> 的黄金标准作为输入来计算系统的精度、召回率和 F1。

我有两个 txt 文件:Instances.txt 和 GoldStandard.txt。我需要将提取的实例与黄金标准进行比较,以计算这些指标。比如根据第二个文件,第一个文件的前三句是True Positive,最后一句是False Positive。

instances.txt 包含:

is sponsoring a lecture by <speaker> Antal Bejczy from
announces a talk by <speaker> Julia Hirschberg
His name is <speaker> Toshiaki Tsuboi He will
to produce a schedule by <speaker> 50% for problems

GoldStandard.txt 包含:

METC is sponsoring a lecture by <speaker> Antal Bejczy from Stanford university
METC announces a talk by <speaker> Julia Hirschberg
The speaker is from USA His name is <speaker> Toshiaki Tsuboi He will              
propose a solution to these problems
It led to produce a schedule by 50% for problems

【问题讨论】:

  • 你的标题只写了“自动计算准确率”,但你的问题正文说“我正在寻找一种可以计算系统精度、召回率和F1 来自给定的输入”。大概您更喜欢来自/使用标准软件包和/或开源许可的软件。
  • 您的 instances.txt 看起来不同。这通常是 NLP 管道的结果,而不仅仅是 NER 模型。意思是,你有一个句子检测、分词器等。这样,你还需要考虑这些的准确性,因为最终结果是不一致的。或者,如果您不在乎,手动将结果映射回黄金标准并使用 conlleval。

标签: metrics information-extraction named-entity-recognition


【解决方案1】:

对于 NER 结果,人们通常衡量的是准确率、召回率和 F1-score 而不是准确率,而 conlleval 可能是计算这些指标的最常用方法:https://github.com/spyysalo/conlleval.py。但它也报告了准确性。

conlleval 脚本将 conll 格式文件作为输入。以你的第一句话为例:

METC    O   O
is  O   O
sponsoring  O   O
a   O   O
lecture O   O
by  O   O
Antal   B-speaker   B-speaker
Bejczy  I-speaker   I-speaker
from    O   O
Stanford    O   O
university  O   O

其中第一列是单词,第二列是系统输出,第三列是金标签。 O 表示一个令牌不属于任何块。后缀B-I- 表示块的开始、内部/结束。句子使用空行分隔。

【讨论】:

  • 感谢您的回复。我已经编辑了我的问题来解释目标任务。是否可以使用 Conlleval 执行后者?
  • 我有点困惑。通常 NER 系统只用预定义的标签(例如,您的示例中的 )注释句子并且不会修改文本,而 instances.txt GoldStandard.txt 中的句子看起来不同......对于例如,instances.txt 中缺少“METC”和“Stanford university”
  • @J.Fatine 我编辑了我的答案。也请检查我的最后评论,忘了@你。如果您有任何问题,请告诉我。
【解决方案2】:

这完全取决于您的用例,以及您在清理/消除 NER 输出歧义方面做了多少工作。还有weighted-F1 score;您可能更关心丢失的参考文献(即想要更高的召回率)而不是误报(更高的精度)。除了您不使用的其他类型的用例(发出传票或搜查令,禁止用户滥用聊天)。

sklearn.metrics.f1_score() 实现加权 F1。

告诉我们更多关于您的申请的信息:如果您错误、错误识别或混淆演讲者姓名(误报),与错过有效姓名(误报)相比,情况有多糟糕?

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 2019-11-23
    • 2019-11-16
    • 2019-09-06
    • 2015-10-03
    相关资源
    最近更新 更多