我有一组3000条手动标记的数据集,分为训练集和测试集。我使用Spacy训练了NER模型,以提取8个自定义实体,如“ACTION”、HIRE-DATE、STATUS等…为了评估模型,我使用了Spacy的评分器(Scorer)。
输出中没有准确率(Accuracy)指标,我不确定应该考虑哪个指标来判断模型性能的好坏?
有几种情况是精确度(precision)低但召回率(recall)为100,F1值也低,例如:
'LOCATION': {'p': 7.142857142857142, 'r': 100.0, 'f': 13.333333333333334},
在上述情况下,我们的结论应该是什么?
以下是评分器的完整结果,其中p=精确度,r=召回率,f=F1分数…它包含了整体表现和各个实体的表现。
{'uas': 0.0, 'las': 0.0, 'ents_p': 86.40850417615793, 'ents_r': 97.93459552495698, 'ents_f': 91.81121419927389, 'ents_per_type': {'ACTION': {'p': 97.17682020802377, 'r': 97.61194029850746, 'f': 97.3938942665674}, 'STATUS': {'p': 83.33333333333334, 'r': 96.3855421686747, 'f': 89.3854748603352}, 'PED': {'p': 98.61751152073732, 'r': 99.53488372093024, 'f': 99.07407407407408}, 'TERM-DATE': {'p': 83.52272727272727, 'r': 98.65771812080537, 'f': 90.46153846153847}, 'LOCATION': {'p': 7.142857142857142, 'r': 100.0, 'f': 13.333333333333334}, 'DOB': {'p': 10.0, 'r': 100.0, 'f': 18.181818181818183}, 'RE-HIRE-DATE': {'p': 34.84848484848485, 'r': 100.0, 'f': 51.685393258426956}, 'HIRE-DATE': {'p': 18.96551724137931, 'r': 100.0, 'f': 31.88405797101449}, 'PED-CED': {'p': 100.0, 'r': 71.42857142857143, 'f': 83.33333333333333}, 'CED': {'p': 100.0, 'r': 100.0, 'f': 100.0}}, 'tags_acc': 0.0, 'token_acc': 100.0}
请建议。
回答:
这取决于你的应用。哪种情况更糟:漏掉一个实体,还是错误地标记一个非实体为实体?如果漏标一个实体(假阴性)是坏的,那么你应该关注召回率。如果错误地标记一个非实体为实体(假阳性)是坏的,你应该关注精确度。如果你同样关心精确度和召回率,就使用F_1。如果你对精确度(假阳性)的关注是召回率(假阴性)的两倍,就使用F_0.5。你可以使用任何b值的F_b来表达你关注的重点。公式可以在维基百科的F分数页面找到并解释。
编辑:直接回答原始帖子的问题:
系统在LOCATION和3个日期实体上的表现很差。其他的看起来不错。如果是我,我会尝试使用NER将所有日期作为一个实体提取出来,然后尝试构建一个独立的系统,无论是基于规则的还是分类器,用于区分不同类型的日期。对于位置,你可以使用专注于地理解析的系统,例如Mordecai。