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