在从事 NER 项目时,我一直面临在训练期间评估模型的问题。我不能使用准确度指标或 f1 分数或任何其他指标在运行时评估我的模型,因为由于数据集中有许多 O(其他)标签,这总是会导致高值。
名称实体识别的指标
作为第一个开始,我建议使用 Precision 和 Recall。
您还可以生成有关不同类型错误的统计信息:
未找到实体(假阴性或 I 类错误)。您也可以通过除以真实实体的总数来获得假阴性率。这将是 1 次召回。
在不应该出现的地方找到实体(误报或 II 型错误)。您还可以通过除以返回的实体总数来获得误报率。这将是 1 精度。
找到实体,但系统得到错误数量的令牌(例如,约克而不是纽约)。您还可以通过除以真实实体的总数来获得“令牌边界错误率”。
所以我提到的前两个错误率除了精度和召回率之外没有提供任何额外的信息,但第三个允许您检查获得实体边界的准确度。
如果您也在进行实体消歧,您可以通过仅在正确解析实体时计算成功来生成额外的指标。
您还可以使用结合了精度和召回率的 F 分数(感谢 Erwan)。但是,您需要小心,因为 O-token 与实体 token 的类别不平衡,并且 F-score 对精确度和召回率给予同等重视。您还可以选择加权 F 分数,例如 F2 分数。
其他选项:ROC 曲线和 AUC
最后我要补充一点,如果您的模型输出分数或概率而不是二元分类,这意味着您可以通过更改阈值来调整其灵敏度(您是否要将所有分数> 0.5的实体计为实体,或者分数> 0.75,例如)。这自然会导致计算每个可能的阈值选择的误报率和误报率的可能性。您可以将其绘制在图表上,并且您有ROC 曲线. 这是一种很好的图形方式,可以查看模型的性能以及它如何准确地对实例进行错误分类。ROC 曲线下的面积本身就是一个很好的指标,称为 AUC。与随机一样好的分类器的 AUC=0.5,分类所有错误的分类器的 AUC=0,完美的分类器的 AUC=1。我通常绘制 ROC 曲线以及生成指标,Sklearn 和大多数统计数据包都有执行此操作的功能。
如果您使用像 F 分数这样的单一评估指标,则可以在计算指标时排除高频标签您想要计算指标。
更多信息在这里:
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html