MAP(Mean average precision):评价一个rank方法性能的一个指标,现在有很多query,首先看rank方法对各个query来说性能分别是怎么样的(也就是AP),再平均起来,就是MAP。AP怎么算那?举个例子,现有一个query,与之相关的文档有4——D1,D2,D3,D4,用rank方法检索后,D2,D3,D4的排序分别是1,3,5;D1没有搜索到。那么AP = (0 + 1/1 + 2/3 + 3/5)/ 4。发现了么,第一,相关的却没检索到,AP贡献为0;分母里1,3,5就是rank后的结果。都相加后再average,也就是除以4。
这个方法有个问题,没有考虑到D1——D4他们之间的排序,只是看relevant,或者not。
NDCG(Normalized Discounted Cumulative Gain):例子:有D1,D2,D3,D4四个文档,还有一个query。在MAP中,四个文档和query要么相关,要么不相关,也就是相关度非0即1。这里改进了下,相关度从0到r,r人为设定,这里取3。对这个query,四个文档的相关性分别为2,3,1,0,理想状况下排序应该为D2,D1,D3,D4(3,2,1,0),咱自己rank方法给出的排序为D1,D2,D4,D3(2,3,0,1)。这样DCG值为:rel1/log2(1+1) + rel2/log2(2+1) + rel3/log2(3+1) / rel4/log2(4+1) = 2/log2(2) + 3/log2(3) + 0/log2(4) + 1/log2(5)。log2这项是权重,因为越往后,用户越没有心思看,文档的价值也越小;如果你把相关度大的反而排在了后面,那就比较惨了。
最后计算NDCG = 理想排序时的DCG值 / rank算法得到的DCG = 【3/log2(2) + 2/log2(3) + 1/log2(4) + 0/log2(5)】 / 【2/log2(2) + 3/log2(3) + 0/log2(4) + 1/log2(5)】
NDCG MAP这样的评价指标通常是非平滑(连续)的。