如何自动计算NER的准确性(精度,召回率,F1)?

时间:2019-01-05 23:49:40

标签: metrics information-extraction ner

我正在使用一个NER系统,该系统提供一个文本文件作为输出,该文件包含一个命名实体列表,这些命名实体是Speaker概念的实例。我正在寻找一种工具,该工具可以通过将该列表和黄金标准作为输入,使用实例<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

2 个答案:

答案 0 :(得分:1)

对于NER结果,人们通常会测量精度,召回率和F1得分而不是准确性,而冲突可能是计算这些指标的最常见方法: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-表示块的开头,内部/结尾。句子之间用空行分隔。

答案 1 :(得分:0)

这完全取决于您的用例以及清理/消除NER输出的歧义所做的工作量。还有weighted-F1 score;您可能比起假阳性(精度更高),更关心丢失的参考文献(即,希望召回率更高)。除了其他类型的用例之外(发出传票或保证书,禁止用户滥用聊天)。

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

向我们详细介绍您的应用程序:如果您错误地,错误地识别或混淆了发言者的姓名(假阳性),而错过了一个有效的姓名(假阴性),那有多严重?