第 24 题:NDCG 的归一化因子设计,如何处理文档集合动态变化的情况?
题目
NDCG的归一化因子设计,如何处理文档集合动态变化的情况?
完整讲解
一、NDCG 与归一化因子
- DCG:$\mathrm{DCG}@k = \sum_{i=1}^{k} \frac{2^{rel_i}-1}{\log_2(i+1)}$,$rel_i$ 为第 $i$ 位文档的相关性。
- IDCG:理想排序下的 DCG(按相关性从高到低排),即同一文档集合上能达到的最大 DCG。
- NDCG:$\mathrm{NDCG}@k = \mathrm{DCG}@k / \mathrm{IDCG}@k$,用 IDCG 做归一化,使不同 query、不同文档数的结果可比,取值 [0,1]。
二、归一化因子的作用
- IDCG 与文档集合与相关性分布有关:集合变、相关性变,IDCG 就变。
- 除以 IDCG 后,不同 list 长度、不同相关性分布的 NDCG 可比较;否则长列表、高相关文档多的 query 天然 DCG 大,难以公平比较。
三、文档集合动态变化时
- 每次用当前候选集算 IDCG:线上/评估时文档集合每请求不同(检索结果、过滤后不同),应对当前请求的候选集单独算 IDCG,再算该请求的 NDCG;即 NDCG 是「当前集合下的相对表现」。
- 固定深度 k:常用 NDCG@k(如 k=5,10),只考虑 top-k,候选再多也只取前 k 的贡献,部分缓解集合大小差异;IDCG@k 也只看当前集合中前 k 的理想排序。
- 评估集:离线评估时若文档集合固定(如每个 query 固定一个 doc set),IDCG 每 query 算一次即可;若集合动态,则按「每个 (query, candidate_set)」算 IDCG,保证归一化与当前集合一致。
面试要点
- NDCG = DCG / IDCG;IDCG 为当前集合理想排序的 DCG,用于归一化使不同 list 可比。
- 集合动态:按当前请求的候选集算 IDCG;用 NDCG@k 固定深度;离线按 (query, set) 算。
记忆要点
- IDCG = 理想排序的 DCG,归一化因子;NDCG 取值 [0,1],可跨 query 比。
- 动态集合:当前集合算 IDCG、NDCG@k、按 (query, set) 评估。