ACL2020SpellGCN / SpellGCN

SpellGCN
https://arxiv.org/abs/2004.14166
241 stars 63 forks source link

测评方法 #20

Open Baililily opened 3 years ago

Baililily commented 3 years ago

我理解的FP是文本中本来正确的字被纠正成错误字的个数 而代码中correct_FP是检测出来有错误但是没有纠对的个数

cxysteven commented 3 years ago

评测方法,token-level的有两种,一种是官方的metrics,一个是基于PGNet源代码的metrics, 两者是有不同的; 具体参考一下前文,这个定义有一些差别。

li-aolong commented 3 years ago

@cxysteven 官方给的evaluate tool有的指标是token-level,有的指标是sentencew-level,计算出来的TP,FP这些值也存在自我矛盾的地方。PGNet是什么?

Baililily commented 3 years ago

@li-aolong 可以留个联系方式交流一下吗,微信或者qq?

litetoooooom commented 2 years ago

@Baililily 很好奇你们最后复现了吗

iioSnail commented 1 year ago

这个correct_FP我也感觉有点问题,作者有时间可以看一下:

关于Character-level Correction Metrics的一点疑问

我梳理了一下您在代码中的评价指标,但Character-level Correction Metrics好像存在一点问题,“该纠,但没纠对的字”会被FN和FP重复计算。具体参考下面代码:

for ... in ...:
    """
    该纠的字,纠了也纠对了。
    例如:label为[(1, '鸡'), (3, '你'), (5, '太')], 
         pred为[(1, '坤'), (3, '你'), (5, '太'), (7, '美')]
         则TP+=2。  因为“你,太”两个字该纠且纠对了
    """
    correct_TP += len(set(correct_pred_tokens) & set(zip(detect_actual_tokens,correct_actual_tokens))) 
    """
    纠了,但没纠对的字。(包括这个字本身有错和没错两种情况)
    例如:label为[(1, '鸡'), (3, '你'), (5, '太')], 
         pred为[(1, '坤'), (3, '你'), (5, '太'), (7, '美')]
         则FP+=2。  因为'坤'字纠了,但没纠对。'美'字纠了,但7位置本身没错,所以也没纠对
    """
    correct_FP += len(set(correct_pred_tokens) - set(zip(detect_actual_tokens,correct_actual_tokens)))
    """
    该纠的字,但没纠对或没纠。
    例如:label为[(1, '鸡'), (3, '你'), (5, '太'), (9, '美')], 
         pred为[(1, '坤'), (3, '你'), (5, '太')]
         则FN+=2。 因为'鸡'字没纠对,'美'字该纠但没纠
    这里这个指标好像出现了问题,对于'坤'字的错误预测,在FP和FN被重复计算了。
    """
    correct_FN += len(set(zip(detect_actual_tokens,correct_actual_tokens)) - set(correct_pred_tokens)) 

correct_precision = correct_TP * 1.0 / (correct_TP + correct_FP)
correct_recall = correct_TP * 1.0 / (correct_TP + correct_FN)
correct_F1 = 2. * correct_precision * correct_recall/ ((correct_precision + correct_recall) + 1e-8)

这是从源码中截出的关于Character-level Correction Metrics的片段,可以看下correct_FN 和correct_FP 这个地方