搜索评价指标 / 标签排序指标:nDCG

原文链接: https://www.cnblogs.com/by-dream/p/9403984.html

搜索评价指标 / 标签排序指标:nDCG


文章目录

  • 搜索评价指标 / 标签排序指标:nDCG
    • 概念
    • 累计增益(CG)
    • 折扣累计增益(DCG)
    • 归一化折损累计增益(nDCG)
    • 实际的例子
    • 参考链接:

概念

  • nDCG, Normalized Discounted cumulative gain, 翻译为归一化折损累计增益。这个指标通常是用来衡量和评价搜索结果算法。DCG的两个思想:1)高关联度的结果比一般关联度的结果更影响最终的指标得分;2)高关联度的结果出现在更靠前的位置,指标得分会更高。

累计增益(CG)

  • CG, 即cumulative gain,是DCG的前身。只考虑了相关性的关联程度,没有考虑到位置前后顺序的因素。所以是一个与搜索结果或分类结果相关分数的总和,与排序无关。指定位置p上的CG为:
    C G p = ∑ i = 1 p r e l i \mathrm{CG}_{\mathrm{p}}=\sum_{i=1}^{p} r e l_{i} CGp=i=1preli
    r e l i rel_i reli代表i这个位置上的相关度。
  • 举例:假设搜索“篮球”结果,最理想的结果是:B1、B2、 B3。而出现的结果是 B3、B1、B2的话,CG的值是没有变化的,因此需要下面的DCG。
  • 再举例:以下为一次网页搜索的结果,Gain是预定义的一种获得增益,CG指的是某个位置上的网页Gain的累加。
    搜索评价指标 / 标签排序指标:nDCG_第1张图片
    上图中的gain的预定义如下:
    搜索评价指标 / 标签排序指标:nDCG_第2张图片

折扣累计增益(DCG)

  • DCG, Discounted 的CG,就是在每一个CG的结果上除以一个折损值discouted。目的是为了让排名越靠前的结果在最后结果得分上占的比重更大。假设排序越靠后,对最终结果的影响价值就越低。公式中定义,到第 i i i个位置时,它的价值是 1 l o g 2 ( i + 1 ) \frac{1}{log_2(i+1)} log2(i+1)1,那么第 i i i个结果产生的效益就是 r e l i l o g 2 ( i + 1 ) \frac{rel_i}{log_2(i+1)} log2(i+1)reli。所以:
    D C G p = ∑ i = 1 p r e l i log ⁡ 2 ( i + 1 ) = r e l 1 + ∑ i = 2 p r e l i log ⁡ 2 ( i + 1 ) \mathrm{DCG}_{\mathrm{p}}=\sum_{i=1}^{p} \frac{r e l_{i}}{\log _{2}(i+1)}=r e l_{1}+\sum_{i=2}^{p} \frac{r e l_{i}}{\log _{2}(i+1)} DCGp=i=1plog2(i+1)reli=rel1+i=2plog2(i+1)reli
  • 还有一种比较常用的公式,用来增加相关度影响比重的DCG计算方式是:
    D C G p = ∑ i = 1 p 2 r e l i − 1 log ⁡ 2 ( i + 1 ) \mathrm{DCG}_{\mathrm{p}}=\sum_{i=1}^{p} \frac{2^{rel_{i}}-1}{\log _{2}(i+1)} DCGp=i=1plog2(i+1)2reli1
  • 维基百科中写到后一种更多用于工业。当然相关性值为二进制时,即 reli在{0,1},二者结果是一样的。当然CG相关性不止是两个,可以是实数的形式。

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

  • nDCG, 即Normalized 的DCG,由于搜索结果随着检索词的不同,返回的数量是不一致的,而DCG是一个累加的值,没法针对两个不同的搜索结果进行比较,因此需要归一化处理,这里是除以IDCG。
    n D C G p = D C G p I D C G p \mathrm{nDCG}_{\mathrm{p}}= \frac{DCG_{p}}{IDCG_{p}} nDCGp=IDCGpDCGp
    IDCG为理想情况下最大的DCG值
    I D C G p = ∑ i = 1 ∣ R E L ∣ 2 r e l i − 1 log ⁡ 2 ( i + 1 ) \mathrm{IDCG}_{\mathrm{p}}=\sum_{i=1}^{|REL|} \frac{2^{rel_{i}}-1}{\log _{2}(i+1)} IDCGp=i=1RELlog2(i+1)2reli1
    其中 |REL| 表示,结果按照相关性从大到小的顺序排序,取前p个结果组成的集合。也就是按照最优的方式对结果进行排序。

实际的例子

-假设搜索回来的5个结果,其相关性分数分别是3、2、3、0、1、2,那么 CG = 3+2+3+0+1+2。CG对相关度的分数进行累加得到一个打分,并没有针对结果排序位置对评分产生影响。
-而DCG的计算则为:

i r e l i rel_i reli l o g 2 ( i + 1 ) log_2(i+1) log2(i+1) r e l i l o g 2 ( i + 1 ) \frac{rel_i}{log_2(i+1)} log2(i+1)reli
1 3 1 3
2 2 1.58 1.26
3 3 2 1.5
4 0 2.32 0
5 1 2.58 0.38
6 2 2.8 0.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:
i r e l i rel_i reli l o g 2 ( i + 1 ) log_2(i+1) log2(i+1) r e l i l o g 2 ( i + 1 ) \frac{rel_i}{log_2(i+1)} log2(i+1)reli
1 3 1 3
2 3 1.58 1.89
3 3 2 1.5
4 2 2.32 0.86
5 2 2.58 0.77
6 1 2.8 0.35

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

  • 所以最终,NDCG@6 = 6.86/8.37 = 81.96%

参考链接:

  1. 搜索评价指标——NDCG - 胖喵_ - 博客园
  2. NDCG Normalized discounted cumulative gain 理解分析 - xiangyong58的专栏 - CSDN博客

你可能感兴趣的:(机器学习)