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



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

我有两个 txt 文件:实例.txt和黄金标准.txt。我需要将提取的实例与黄金标准进行比较,以便计算这些指标。例如,根据第二个文件,第一个文件中的前三个句子为"真阳性",最后一个句子为"误报"。

实例.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

黄金标准.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

对于NER结果,人们通常测量精度,召回率和F1分数而不是准确性,而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-表示块的开头、内部/结尾。句子使用空行分隔。

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

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

告诉我们更多关于您的应用程序的信息:如果您错误、错误识别或混淆说话者姓名(误报),与错过有效说话人姓名(假阴性)有多糟糕?

最新更新