搜索评价指标——NDCG

本文深入解析NDCG(归一化折损累计增益),一个评估搜索和推荐算法效果的关键指标。介绍了NDCG的计算原理,包括累计增益(CG)、折损累计增益(DCG)和归一化过程,通过实例展示了如何量化搜索结果的相关性和位置影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

  NDCG,Normalized Discounted cumulative gain 直接翻译为归一化折损累计增益,可能有些晦涩,没关系下面重点来解释一下这个评价指标。这个指标通常是用来衡量和评价搜索结果算法(注意这里维基百科中提到了还有推荐算法,但是我个人觉得不太适合推荐算法,后面我会给我出我的解释)。DCG的两个思想:

  1、高关联度的结果比一般关联度的结果更影响最终的指标得分;

  2、有高关联度的结果出现在更靠前的位置的时候,指标会越高;

 

累计增益(CG)

  CG,cumulative gain,是DCG的前身,只考虑到了相关性的关联程度,没有考虑到位置的因素。它是一个搜素结果相关性分数的总和。指定位置p上的CG为:

  rel代表i这个位置上的相关度。

  举例:假设搜索“篮球”结果,最理想的结果是:B1、B2、 B3。而出现的结果是 B3、B1、B2的话,CG的值是没有变化的,因此需要下面的DCG。

 

折损累计增益(DCG)

  DCG, Discounted 的CG,就是在每一个CG的结果上处以一个折损值,为什么要这么做呢?目的就是为了让排名越靠前的结果越能影响最后的结果。假设排序越往后,价值越低。到第i个位置的时候,它的价值是 1/log2(i+1),那么第i个结果产生的效益就是 reli * 1/log2(i+1),所以:

  当然还有一种比较常用的公式,用来增加相关度影响比重的DCG计算方式是:

  百科中写到后一种更多用于工业。当然相关性值为二进制时,即 reli在{0,1},二者结果是一样的。当然CG相关性不止是两个,可以是实数的形式。

 

归一化折损累计增益(NDCG)

  NDCG, Normalized 的DCG,由于搜索结果随着检索词的不同,返回的数量是不一致的,而DCG是一个累加的值,没法针对两个不同的搜索结果进行比较,因此需要归一化处理,这里是处以IDCG。

  IDCG为理想情况下最大的DCG值。

  其中 |REL| 表示,结果按照相关性从大到小的顺序排序,取前p个结果组成的集合。也就是按照最优的方式对结果进行排序。

 

 实际的例子

  假设搜索回来的5个结果,其相关性分数分别是 3、2、3、0、1、2

  那么 CG = 3+2+3+0+1+2

  可以看到只是对相关的分数进行了一个关联的打分,并没有召回的所在位置对排序结果评分对影响。而我们看DCG:

irelilog2(i+1)reli /log2(i+1)
1313
221.58  1.26
3321.5
402.320
512.580.38
622.80.71

  所以 DCG  = 3+1.26+1.5+0+0.38+0.71 = 6.86

  接下来我们归一化,归一化需要先结算 IDCG,假如我们实际召回了8个物品,除了上面的6个,还有两个结果,假设第7个相关性为3,第8个相关性为0。那么在理想情况下的相关性分数排序应该是:3、3、3、2、2、1、0、0。计算IDCG@6:

irelilog2(i+1)reli /log2(i+1)
1313
231.581.89
3321.5
422.320.86
522.580.77
612.80.35

  所以IDCG = 3+1.89+1.5+0.86+0.77+0.35 = 8.37

  so 最终 NDCG@6 = 6.86/8.37 = 81.96%

转自:https://www.cnblogs.com/by-dream/p/9403984.html

<think>嗯,用户想了解NDCG的相关概念和实现方法。首先,我需要确定NDCG的全称和基本定义。NDCGNormalized Discounted Cumulative Gain的缩写,中文翻译为归一化折扣累积增益。这是信息检索和推荐系统中常用的评估指标,用于衡量排序结果的质量。 接下来,我需要解释清楚DCG(折扣累积增益),因为NDCG是基于它的标准化。DCG的核心思想是,高相关性的结果排在前面应该获得更高的分数,并且对每个位置的增益进行折扣,越靠后的位置折扣越大。这里可能需要数学公式,根据用户的系统级指令,行内公式用$...$,独立公式用$$...$$。所以DCG的计算公式应该是这样的:$$DCG@K = \sum_{i=1}^K \frac{rel_i}{\log_2(i+1)}$$其中,$rel_i$表示第i个位置的相关性得分。 然后,归一化的部分需要解释IDCG(理想折扣累积增益),也就是将所有结果按相关性从高到低排序后计算的DCG。NDCG就是DCG除以IDCG,这样结果会被归一化到0到1之间。公式就是:$$NDCG@K = \frac{DCG@K}{IDCG@K}$$ 用户可能还想知道具体的实现步骤,所以需要分步骤说明。比如,如何计算相关性得分,如何排序,计算折扣因子,累计增益,归一化处理等。同时,用户提到需要生成相关问题,可能需要考虑NDCG与其他指标的区别,比如和准确率、召回率的比较,或者在不同推荐系统中的应用。 然后,查看用户提供的引用,特别是引用[1]和引用[3],里面提到了NDCG作为评估指标。引用[3]中还提到在实验中NDCG@K的表现,所以可能需要引用这些内容来支持解释。例如,在解释NDCG的应用场景时,可以提到在知识图谱卷积网络(KGCN)与去噪自动编码器(DAE)集成的推荐模型中,NDCG@K被用来评估性能提升[^3]。 另外,用户可能关心实现中的具体问题,比如如何处理不同长度的推荐列表,或者如何选择K值。可能需要给出代码示例,但根据用户的问题,是否提供代码要看是否需要。用户的问题是关于“implementation or explanation”,所以可能需要简要的伪代码或Python实现示例。根据示例中的快速排序代码,用户允许使用代码块,所以可以考虑提供一个简单的Python函数来计算NDCG。 在实现时需要注意,首先计算DCG,然后计算IDCG,再归一化。例如,假设有一个相关性得分的列表,按照预测的排序排列,然后计算每个位置的增益,应用折扣因子,求和得到DCG。IDCG是将原始列表按相关性降序排列后计算DCG,然后用DCG/IDCG得到NDCG。 还需要考虑特殊情况,比如所有相关性都为0时,IDCG可能为0,这时候NDCG可以定义为0或者忽略。另外,相关性得分通常是二进制的(相关/不相关)或多级(如0到5),需要根据具体情况处理。 可能的问题点:用户是否了解DCG和IDCG的关系,是否需要更详细的例子说明。例如,给出一个具体的例子,假设推荐结果的相关性得分为[3, 2, 3, 0, 1],排序后的理想情况是[3,3,2,1,0],计算两者的DCG并相除得到NDCG。 最后,生成相关问题需要考虑用户可能进一步的问题,比如NDCG的优缺点,如何优化NDCG,或者与其他指标的比较。例如,NDCG和MRR的区别,或者在推荐系统中如何结合NDCG进行模型优化。</think>### 归一化折扣累积增益(NDCG)解释与实现 #### 1. 核心概念 **NDCG**(Normalized Discounted Cumulative Gain)是衡量排序质量的指标,广泛用于推荐系统和信息检索[^1]。其核心思想是: - **增益(Gain)**:高相关性的结果应赋予更高权重(如相关性评分$rel_i$)。 - **折扣(Discount)**:越靠后的结果对用户价值越低,需按位置进行折扣(如$\frac{1}{\log_2(i+1)}$)。 - **归一化(Normalization)**:通过理想排序的增益(IDCG)将结果映射到$[0,1]$。 数学定义如下: $$DCG@K = \sum_{i=1}^K \frac{rel_i}{\log_2(i+1)}$$ $$NDCG@K = \frac{DCG@K}{IDCG@K}$$ 其中,$IDCG@K$是前$K$个结果按真实相关性降序排列时的最大$DCG$。 #### 2. 实现步骤(Python示例) ```python import numpy as np def ndcg_at_k(relevance_scores, predicted_ranking, k): # 截断前k个预测结果 pred = predicted_ranking[:k] # 计算DCG dcg = sum( (rel / np.log2(i + 2)) for i, rel in enumerate(pred) ) # 计算IDCG(理想排序) ideal_ranking = sorted(relevance_scores, reverse=True)[:k] idcg = sum( (rel / np.log2(i + 2)) for i, rel in enumerate(ideal_ranking) ) # 归一化 return dcg / idcg if idcg > 0 else 0.0 ``` #### 3. 关键特性 - **多级相关性支持**:支持$rel_i \in \{0,1,2,...\}$,如评分或点击率。 - **位置敏感性**:通过$\log$折扣强调前排结果的重要性。 - **鲁棒性**:对长尾分布和稀疏数据友好[^5]。 #### 4. 典型应用场景 - 推荐系统排序质量评估(如MovieLens数据集) - 搜索引擎结果优化 - 广告排序效果验证
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值