1 motivation
- RNP框架(Rationalizing Neural Predictions论文提出的模型,一种自解释模型,见引用[4])通常会产生一个预测和一个解释(称作rationale)。其形式是一个个0/1二进制掩码序列,标记原始文本中哪些单词没选中/被选中,例如:
[0,0,0,1,1,1,0,0,0,0...]
。在评估时,需要将生成的rationale序列与人工标注的0/1序列进行对比。 - 在RNP原论文中并没有计算这一方面的结果(可能是因为工作较早,不能评估),但随着标注数据集的出现以及benchmark的提出,通过人工标注序列评估解释质量是必不可少的。
- 最常用的评价指标是token F1,实际上是micro F1。最近一些工作采用了macro F1,因此引发我的思考,这两者究竟谁更合理?
2 预知识
- 混淆矩阵(TP、TN、FP、FN)与Precision、Recall、F1:可以参考引用[2]进行补全。需要注意,引用[2]的语境是,针对于常见的分类任务(二分类、多分类)计算以上指标,即一个样本只有一个分类结果。而rationale是一个序列,序列中每一个元素(对应于原始文本中一个token)而言,进行一个分类,0表示不被选中,1表示被选中。因此常见的TP、TN、FP、FN的计算方法是,把rationale打散,以token为单位统计上述指标。
- micro F1和macro F1:可以参考引用[1]中的内容,以及引用[3]中的micro F1和macro F1的计算公式。需要注意:
- 首先明确,micro F1和macro F1是两种统计所有类别F1的方法。micro F1是将所有类别样本的结果加在一起,然后再求总的F1,以二分类举例, m i c r o _ F 1 = T P 0 − 0 + T P 1 − 1 T P 0 − 0 + T P 1 − 1 + 1 2 ( F P 0 − 0 + F P 1 − 1 + F N 0 − 0 + F N 1 − 1 ) micro\_F1=\frac{TP_{0-0}+TP_{1-1}}{TP_{0-0}+TP_{1-1}+\frac{1}{2}(FP_{0-0}+FP_{1-1}+FN_{0-0}+FN_{1-1})} micro_F1=TP0−0+TP1−1+21(FP0−0+FP1−1+FN0−0+FN1−1)TP0−0+TP1−1,其中 T P 0 − 0 TP_{0-0} TP0−0表示预测为0-label为0(左为预测值,右为label,因此TP_{1-1}对应于引用[3]中的“ T P 1 TP_1 TP1”)。其特点是,容易受到类别不均衡情况的干扰(根据公式假设,0类有1000个样本,而1类只有1个,那么最终的结果将会接近单独计算0类F1的结果)。而macro F1是将每个类别的F1加起来,然后进行加权平均,以二分类举例, m a c r o _ F 1 = a 1 ⋅ F 1 0 − 0 + a 2 ⋅ F 1 1 − 1 2 macro\_F1=\frac{a_1·F1_{0-0}+a_2·F1_{1-1}}{2} macro_F1=2a1⋅F10−0+a2⋅F11−1,通常 a 1 a_1 a1和 a 2 a_2 a2都是1。其特点是,容易受到Precision或Recal较高的类别影响,因为其直接受到F1影响,而F1是由Precision和Recall得到。
- 引用[1]中有两点可取之处:
- F1的计算方法,直接通过TP、FP、FN计算,而不是先算出Precision和Recall后再计算,因此相对来说更快捷。公式如下: F 1 = T P T P + 1 2 ( F P + F N ) F1=\frac{TP}{TP+\frac{1}{2}(FP+FN)} F1=TP+21(FP+FN)TP。当然需要注意,这里的F1是单个类别的F1。
- 其中展示的表格是非常好的、用于了解micro F1和macro F1的工具。如下(引自引用[1]):
在这样的表格中,我们会计算每个类别的TP、FP、FN,然后求出每个类别自己的F1,这样可以轻松得到marco F1;然后得到所有类别总的TP、FP、FN,可以求得micro F1。
3 DMR的实现方法与问题
3.1 DMR的实现方法
- 首先,在第60-62行可以看到,这里计算了一个batch中所有样本产生的rationale(变量名为predictions)和人工标注序列(变量名为labels)的TP、(TP+FP)、(TP+FN)。注意,是以token为单位计算的。
- 然后将每个batch的结果加起来,最后在160-163行计算
m
i
c
r
o
_
F
1
′
=
T
P
a
l
l
T
P
a
l
l
+
1
2
(
F
P
a
l
l
+
F
N
a
l
l
)
micro\_F1'=\frac{TP_{all}}{TP_{all}+\frac{1}{2}(FP_{all}+FN_{all})}
micro_F1′=TPall+21(FPall+FNall)TPall。这里的
m
i
c
r
o
F
1
micro_F1
microF1少计算了类别0的结果,因此写为
m
i
c
r
o
_
F
1
′
micro\_F1'
micro_F1′。
3.2 问题
以一个例子来具体化DMR的计算过程。假设有rationale和人工标注序列,如下:
rationale: [0,0,0,1,1,0,1,1,0,0]
annotation: [0,0,0,1,0,1,0,1,0,0]
- 首先写出引用[1]中表格的数值,如下:
class | TP | FP | FN | F1 |
---|---|---|---|---|
0 | 5 | 2 | 2 | 5 7 \frac{5}{7} 75 |
1 | 2 | 2 | 2 | 1 2 \frac{1}{2} 21 |
sum | 7 | 4 | 4 |
- 由于统计的是labels * predictions,两个0/1序列相乘等价于两个序列进行“与”运算,因此DMR所求的结果为class=1这一行
- 而正确的做法是,将0/1序列进行翻转,即1-predictions、1-labels,再求一遍TP、FP、FN。然后将两个类别的TP加起来、FP加起来、FN加起来,再求F1,即为真正的micro F1。
- 对于macro F1,将最后一列的两个F1加起来除以2即可得到。
4 结论
- DMR的实现方法是最早的实现方法,但并不完全符合micro F1的计算方法。不过后续工作也参考了该方法,都采用DMR的计算方法进行评估,因此不存在不公平的对比,所以模型表现的好坏仍具有参考意义。
- 在实现代码上,这个问题处于可改可不改的地步。
- 对于我而言,弄懂了DMR实现方法以及micro F1、macro F1之间的区别。
5 引用
[1] Micro vs Macro F1 score, what’s the difference?
[2] F1-micro 与 F1-macro区别和计算
[3] F1 micro macro 区别和详解
[4] Rationalizing Neural Predictions
[5] DMR代码