上图是经过实体识别-0跑起来之后的评测结果。
如图所示,每一个类别包含了三个指标值:precision、recall和FB1,并且源代码评测指标使用的是一个基于perl语言的脚本,从readme中发现,使用的是conll2003的评测脚本。
但是这是基于perl写的,找了一下基于python语言,但是这里还没有细看代码。先对评测指标和这三个指标值做了简单的了解。
评测指标
评测,其实就是对结果的表现做个数值上的说明。如果但从NER的实验结果来看,得到的是一个个token对应的标签,那么最直观的结果表现就是去分析token对应的标签是否准确,即直接从标签层面去进行分析。但是对于NER这个具有实际意义的任务,这样直接分析显得意义不大,或者意义不明显。如果考虑到实体边界和实体类别,那么就对应到了这一任务所真正要做的事情,评测结果对应的也有了相应的意义。即,这是从命名实体这个层面来进行分析。
这篇文章描述了几种评测标准,内容很详细清晰。下面内容只提到我所参考代码中使用到的评测标准,即conll2003。
评测,就是代码输出标注和真实标注的比较。那么分为这几种情况(Golden Standard表示真实标注,System Prediction表示代码输出标注)
1)标注正确
2)预测出的实体实际不存在
3)是实体但是没有被预测出来
仅考虑这3种情况,并放弃所有其他可能的情况(匹配不完全),有一个简单的分类评估,可以根据假阴性、真阳性和假阳性进行测量,然后计算每个命名实体类型的精确度、召回率和f1分数。
并且按照conll2003中的描述,关于precision,recall和F1值
可以简单(只考虑完全匹配)得到这样的公式
看到一个解释TP、FP、FN:
(注:我的理解其实也是在完成了评测指标-1部分,才真正看懂了,回来更新了这一部分。)
我的理解:TF,是否正确识别正例(某类实体),T,完全匹配(边界和类别),F,未识别出来或者识别不完全(边界或类别判定错误);PN,正例(某类实体)是否被识别出来,识别出来就是P,未识别出来就是N。因此,TP和FP加起来就是所有被识别出的正例,包括识别完全正确和识别部分正确,即从完全匹配的角度表达识别的准确性,被识别出来的有多少是真正的被识别出来(完全匹配)即precision;TP和FN加起来就是,所有被完全正确识别的实体和未被识别出来(识别不完全也算未被识别出来)的实体,即recall,即正例有多少被识别出来。
知道了某类实体的评价指标,往往需要计算整体,非单一类别实体的评价指标,因此有两种计算思路
根据TP、FP、FN可以得到precision、recall和f1值。