这道题其实是在问,当你评价一个[[RAG]]系统的排序质量时,不同指标到底在衡量什么,以及怎么选。我理解核心不是背公式,而是搞清楚每个指标的适用边界,因为实际落地中,指标选错了,优化方向就偏了。
先说MRR,Mean Reciprocal Rank。它只关心第一个正确答案排在第几位,取倒数,然后对所有查询平均。比如用户问“退款流程是什么”,系统第一个返回的就是退款步骤,那排名1,倒数就是1;如果第一个返回的是退货政策,第二个才是退款流程,那倒数就是0.5。MRR只看第一个,后面就算有100个相关文档,也不加分。所以它天然适合单答案场景,比如知识库里的唯一问题、客服机器人查一个固定答案。
但RAG里很多查询不是只有一个答案的。比如用户问“最近有什么促销活动”,可能涉及满减、优惠券、限时折扣,多个文档合起来才能回答。这时候MRR就不够用了,因为第一个相关文档不一定是最重要的。那就得上NDCG,它考虑的是前K个结果里所有相关文档的累积收益,而且位置越靠后,收益衰减越厉害。NDCG真正衡量的是排序质量,而不仅仅是第一个对不对。所以复杂查询,需要LLM综合多文档生成时,NDCG更合理。
再一个就是Precision@K,它只看前K个结果里相关文档的比例,不关心顺序。比如查10个文档,有5个相关,Precision@10就是0.5。它衡量返回结果的纯度,不保证召回够不够;覆盖度要用Recall或目标保留率。比如黄金集4份相关文档,只返回1份正确文档,Precision=1但Recall仅0.25。
但实际落地,很少只用单一指标。举个例子,一个电商客服RAG,用户问“订单异常怎么处理”,如果答案是唯一的,我会用MRR来评估排序质量;但如果用户问“退款政策有哪些”,涉及多个条款,我会用NDCG。Precision@K检查返回结果噪声,Recall检查遗漏。组合使用Recall、Precision与NDCG/MRR,分别看覆盖、纯度和排序,看具体场景。
这里有个坑:指标选错会误导优化。比如你优化MRR,模型会倾向于把最可能的一个答案排第一,但可能忽略了其他相关文档,导致生成时信息不全。反过来,如果场景是单答案,你优化NDCG,可能会把多个相关文档都往前排,但第一个反而不准。所以前提是,你得先搞清楚用户查询的意图分布,是单答案为主还是多答案为主。如果分布混杂,我会分层处理:简单查询用MRR,复杂查询用NDCG,而不是一个指标打天下。
还有一个点值得注意:这些指标都假设文档相关性是明确的,但RAG里文档可能部分相关,或者多个文档合起来才相关。比如用户问“满减和优惠券能叠加吗”,单个文档可能只说了满减规则,另一个只说了优惠券规则,单独看都不完全相关。这种情况下,用传统指标打分就会有偏差。
所以我的判断是,MRR、NDCG、Precision各自有清晰的适用场景,但RAG系统的评价不能依赖单一指标。我更倾向用NDCG做主要排序指标,因为它对多结果和位置都敏感,然后用MRR做辅助,监控首个相关结果的倒数排名,再用Recall检查覆盖、Precision检查纯度;任何单个指标都不能保证不漏关键文档。