基于f1分数的命名实体识别系统评价脚本。

nereval的Python项目详细描述


https://travis-ci.org/jantrienes/nereval.svg?branch=master

基于实体级别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的学生自然语言处理研究项目。

引用

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java NIO选择器最多只能选择50个SelectionKeys?   java阻止ImageButton创建新活动   为什么Java方法“Arrays.copyOf”处理中的整数数组与处理对象数组时的行为不同   java将安卓 1.6日历字段提取到vcal   将字符串转换为双精度后的java问题   java使用Webflux,是否可以使用AOP获取用于日志记录的ServerHttpRequest   java与jTextArea的基本区别是什么。setText()和jTextArea。append()方法?   java程序执行时间|将值保存到文件或数据结构?   java如何将表示字符的整数转换为字符串?   Java LWJGL新的渲染问题windows   java GUI提供异常   java创建第二个对象使类的函数不再工作   如何在java中将000验证为3位数字?   java bigO算法的时间复杂度,可以在不重复的情况下找到最长的子串   在30像素内点击按钮后,java在两个图像之间转换   java eclipse maven nexus不可解父pom   当存在其他SecurityConstraint时,java TransportGuary机密将被忽略   重新连接后激发的java Red5客户端流断开事件   javafx聊天应用程序中连接客户端的java问题