排序模型常用的 NDCG、MAP 怎么理解?
简化版
NDCG 用位置折损累计分级相关性,再除以同一候选集合的理想 DCG,适合多级相关标签;MAP 先对每个 query 计算 AP,再做跨 query 平均,常用于二元相关检索。两者都必须按 query 分组,并固定截断位置 K、候选集、无相关结果 query 的处理及公式口径。
详细版
-
NDCG 重视顶部且支持 graded relevance。
-
IDCG=0 的查询需定义跳过或记零。
-
AP 只在相关结果位置累加 Precision@i;使用 AP@K 时还要明确分母是全部相关数还是
min(R,K)。 -
宏平均让每个 query 权重相等。
-
指标口径需固定去重、候选集和未标注处理。
完整版教学
一、排序指标同时编码位置与相关性
DCG 让排在前面的高相关结果贡献更大,NDCG 用理想排序归一化,便于不同相关结果数量的 query 比较。
AP 衡量相关文档被逐步找回时的精确率,错误排在早期会拖累后续相关位置。
二者都先在单个 query 内计算再跨 query 聚合,因此候选集、相关标签和无相关结果 query 的处理必须保持同一口径。
二、底层机制与公式
DCG@K=sum_i (2^rel_i-1)/log2(i+1)
NDCG=DCG/IDCG
AP@K=(sum_{i=1..K} Precision@i*rel_i)/R
这里 rel_i∈{0,1},本题约定 R 为评测候选集中该 query 的全部相关结果数。部分实现用 min(R,K) 作 AP@K 分母,两种定义在 R>K 时结果不同,面试和实验报告都应写明口径。NDCG 的增益也可用 rel_i 而非 2^rel_i-1,折损也有其他定义;比较模型时必须保持一致。
三、带数字的推演
采用 gain=2^rel-1、discount=log2(i+1)。相关等级 [3,0,2] 排在前三时,DCG@3=7/log2(2)+0+3/log2(4)=8.5。理想顺序 [3,2,0] 的 IDCG@3=7+3/log2(3)≈8.893,所以 NDCG@3≈8.5/8.893≈0.956。这个数只在上述增益、折损和截断口径下成立。
四、方案对比
| 方案/对象 | 核心特点 | 代价或边界 |
|---|---|---|
| NDCG | 分级相关+位置折损 | 需定义 gain/discount |
| MAP | 二元相关、整体召回过程 | 不表达相关等级 |
| MRR | 只关心首个相关结果 | 忽略后续结果 |
五、执行流程
按 query 构造候选/标签 -> 排序并截断 K -> 每 query 算指标
-> 处理无相关 query -> 宏/加权汇总 -> 按头尾查询切片
六、边界条件与工程代价
离线未标注不等于不相关;曝光偏差会让旧策略顶部标签更完整,新模型新结果被低估。
不同候选集上 NDCG 不可直接比较,召回阶段变化时应固定评测池或联合报告召回。
记忆钩子:NDCG 看“高相关是否靠前”,MAP 看“每次找回相关结果时有多准”。
七、常见误区与追问
-
误区:NDCG 只适合二元标签。 它的优势正是支持分级相关。
-
追问:为什么要归一化? 不同 query 的理想收益不同。
-
误区:MAP 是把所有结果混在一起算 precision。 先按 query 算 AP,再平均。
-
追问:IDCG=0 怎么办? 预先规定跳过或记零并报告数量。
-
追问:K 为什么重要? 业务展示位置有限,折损与截断直接改变目标;AP@K 的分母约定也可能随实现不同。
八、加强记忆
NDCG 看“高相关结果是否靠前”,MAP 看“每次找回相关结果时有多准”。两者都先按 query 算,再跨 query 汇总。回答时还要主动声明 K、候选集、无相关 query 的处理;NDCG 要声明 gain/discount,AP@K 要声明分母。公式口径不同的分数不能直接横向比较。