基于f1分数的命名实体识别系统评价脚本。
nereval的Python项目详细描述
基于实体级别f1分数的命名实体识别(ner)系统的评估脚本。
定义
nadeau和sekine(2007)描述了此处实现的度量,并广泛用作消息理解会议的一部分(grishman和sundheim,1996)。它根据两个轴评估一个ner系统:它是否能够为一个实体指定正确的类型,以及它是否能够找到确切的实体边界。对于这两个轴,计算正确预测数(cor)、实际预测数(act)和可能预测数(pos)。从这些统计数据中,可以得出精确性和召回率:
precision = COR/ACT recall = COR/POS
最终得分是类型轴和边界轴精度和召回率的微观平均F1度量。
安装
pip install nereval
用法
该脚本既可以在python中使用,也可以在将分类结果写入json文件时从命令行使用。
从命令行使用
假设我们在input.json中有以下分类结果:
[{"text":"CILINDRISCHE PLUG","true":[{"text":"CILINDRISCHE PLUG","type":"Productname","start":0}],"predicted":[{"text":"CILINDRISCHE","type":"Productname","start":0},{"text":"PLUG","type":"Productname","start":13}]}]
然后可以按如下方式执行脚本:
python nereval.py input.json
F1-score: 0.33
来自python的用法
或者,可以从python中直接调用求值度量。示例:
importnerevalfromnerevalimportEntity# Ground-truth:# CILINDRISCHE PLUG# B_PROD I_PRODy_true=[Entity('CILINDRISCHE PLUG','Productname',0)]# Prediction:# CILINDRISCHE PLUG# B_PROD B_PRODy_pred=[# correct type, wrong textEntity('CILINDRISCHE','Productname',0),# correct type, wrong textEntity('PLUG','Productname',13)]score=nereval.evaluate([y_true],[y_pred])print('F1-score: %.2f'%score)F1-score:0.33
关于对称性的注释
由于ner中的词重叠问题,度量本身是不对称的。所以evaluate(y_true, y_pred) != evaluate(y_pred, y_true)。如果我们考虑以下示例(tagger使用bio方案),这一点就很明显了:
# Example 1: Input: CILINDRISCHE PLUG DIN908 M10X1 Foo Truth: B_PROD I_PROD B_PROD B_DIM O Predicted: B_PROD B_PROD B_PROD B_PROD B_PROD Correct Text: 2 Correct Type: 2# Example 2 (inversed): Input: CILINDRISCHE PLUG DIN908 M10X1 Foo Truth: B_PROD B_PROD B_PROD B_PROD B_PROD Predicted: B_PROD I_PROD B_PROD B_DIM O Correct Text: 2 Correct Type: 3
注释和参考资料
用于University of Twente, Netherlands的学生自然语言处理研究项目。
引用
- Grishman,R.,&Sundheim,B.(1996年)。Message understanding conference-6: A brief history。载于《科林1996》第一卷:第16届计算语言学国际会议(第一卷)。
- Nadeau,D.,&Sekine,S.(2007年)。A survey of named entity recognition and classification。lingvisticae调查,30(1),3-26。