首页/AI/RAG 与向量库速查/MRR 与 NDCG 排序质量
Embedding 与检索50 条

MRR 与 NDCG 排序质量

MRR(平均倒数排名)关注第一条相关结果的位置,适合问答类单一答案场景;NDCG 引入位置折损与相关度分级,更适合多相关文档的排序评估。

RAG 与向量库速查AI更新于 2026-10-12

MRR 与 NDCG@k

MRR 与 NDCG@k
import math

def mrr(runs):
    total = 0.0
    for ranked in runs:
        for i, rel in enumerate(ranked, start=1):
            if rel:
                total += 1 / i
                break
    return total / len(runs)

def ndcg_at_k(ranked_relevances, k):
    dcg = sum(r / math.log2(i + 1) for i, r in enumerate(ranked_relevances[:k], start=1))
    ideal = sorted(ranked_relevances, reverse=True)[:k]
    idcg = sum(r / math.log2(i + 1) for i, r in enumerate(ideal, start=1))
    return dcg / idcg if idcg else 0.0
NDCG 需要相关度等级(如 2=直接回答,1=部分相关):让标注成本换排序敏感度。

易错点

  • 问答场景只报 NDCG,第一名不在前位的问题被平均数掩盖
  • 相关度分级标注口径不统一,跨版本 NDCG 不可比

数据来源与参考

  • Manning et al., Introduction to Information Retrieval(MRR / NDCG)
  • scikit-learn 官方文档(ndcg_score)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌