定义:
MRR计算的是第一个正确答案的排名的倒数,并对所有查询取平均值。它衡量了模型在排序结果中快速找到正确答案的能力。
其中:
- Q 是查询的总数。
- ranki 是第 i 个查询中第一个正确答案的排名(位置)。如果第一个正确答案不在结果列表中,则通常将 ranki 视为一个非常大的数(在实际计算中可能会设为无穷大,但通常会用0或某个很小的数来近似表示,或者简单地忽略该查询的贡献)。然而,更常见的做法是在计算MRR之前先过滤掉那些没有正确答案的查询。
计算步骤
-
确定查询集:首先,你需要有一个查询集,其中包含 Q 个查询。
-
获取排序结果:对于每个查询,使用你的模型生成一个排序结果列表。
-
找到第一个正确答案的排名:在排序结果列表中,找到第一个正确答案的排名(位置)。如果列表中没有正确答案,则根据具体情况处理(如忽略该查询或将其排名视为无穷大)。
-
计算每个查询的倒数排名:对每个查询,计算其第一个正确答案排名的倒数(即 ranki1)。
-
计算MRR:将所有查询的倒数排名相加,然后除以查询的总数 Q。
注意事项
-
排名从1开始:在大多数情况下,排名是从1开始的,即第一个结果的位置是1,第二个结果的位置是2,依此类推。
-
处理没有正确答案的查询:如果某个查询在结果集中没有正确答案,你可以选择忽略该查询(即不在求和时包含它),或者将其倒数排名视为0(这实际上等同于忽略它)。
-
截断:在某些情况下,你可能只对排序结果的前N个位置感兴趣。在这种情况下,你可以只考虑前N个位置中的第一个正确答案来计算MRR(这被称为MRR@N)。
示例
假设有3个查询,它们的第一个正确答案的排名分别是1、3和5,则: