参考: 参考博客
MAP(Mean Average Precision):
单个主题的平均准确率是每篇相关文档检索出后的准确率的平均值。主集合的平均准确率(MAP)是每个主题的平均准确率的平均值。MAP 是反映系统在全部相关文档上性能的单值指标。系统检索出来的相关文档越靠前(rank 越高),MAP就可能越高。如果系统没有返回相关文档,则准确率默认为0。
NDCG(Normalized Discounted CumulativeGain):
分为四步:
- 设定相关性等级(2^5-1, 2^4-1…)
- 计算累计增益值
- 计算折算因子log(2)/log(1+rank) (越靠前的,越容易被点击)
- 归一化到NDCG,为了不同等级上的搜索结果的得分值容易比较
4.1. 首先计算理想list的MaxDCG
4.2 相除即可
计算相对复杂。对于排在结位置n处的NDCG的计算公式如下图所示:
(1)在MAP中,四个文档和query要么相关,要么不相关,也就是相关度非0即1。NDCG中改进了下,相关度分成从0到r的r+1的等级(r可设定)。当取r=5时,等级设定如下图所示:
(应该还有r=1那一级,原文档有误,不过这里不影响理解)
(2)例如现在有一个query={abc},返回下图左列的RankedList(URL),当假设用户的选择与排序结果无关(即每一级都等概率被选中),则生成的累计增益值如下图最右列所示:
(3)考虑到一般情况下用户会优先点选排在前面的搜索结果,所以应该引入一个折算因子(discountingfactor): log(2)/log(1+rank)。(从上往下,依次为1,0.63,0.50...)这时将获得DCG值(Discounted Cumulative Gain)如下如所示:
(4)最后,为了使不同等级上的搜索结果的得分值容易比较,需要将DCG值归一化的到NDCG值。操作如下图所示,首先计算理想返回结果List的DCG值(即第一个为perfect,其余为excellent):
然后用DCG/MaxDCG就得到NDCG值,如下图所示: