ACG(@R)指标
Notes
检索中常用几种评价指标:
ACG(Average Cumulative Gain)支持多值相似度(multi-level similarity)。对于一个检索序列 V,其每个位置的 gain 就是该位置样本与 query 的相似度,例如共同标签数:
G
(
q
,
V
i
)
=
l
q
T
l
i
G(q, V_i)=l_q^Tl_i
G(q,Vi)=lqTli 其中
l
x
l_x
lx 是 x 样本的 label 向量。也可以换成 Jaccard 相似度之类的,如 [3]。CG@k 就是前 k 个位置的 gain 总和(cumulative gain):
C
G
@
k
(
q
,
V
)
=
∑
i
=
1
k
G
(
q
,
V
i
)
CG@k(q, V)=\sum_{i=1}^kG(q,V_i)
CG@k(q,V)=i=1∑kG(q,Vi) ACG@k 就是 CG@k 对位置求平均:
A
C
G
@
k
(
q
,
V
)
=
1
k
∑
i
=
1
k
G
(
q
,
V
i
)
ACG@k(q,V)=\frac{1}{k}\sum_{i=1}^kG(q,V_i)
ACG@k(q,V)=k1i=1∑kG(q,Vi) ACG@ALL 好像没有什么意义,因为无论什么排序值都是一样的,配合阈值 k 才有点东西。
Code
# import numpy as np
def ACG(Dist, Rel, k=-1):
"""Average Cumulative Gains"""
n, m = Dist.shape
if (k < 0) or (k > m):
k = m
Gain = Rel
Rank = np.argsort(Dist)
_ACG = 0
for g, rnk in zip(Gain, Rank):
_ACG += g[rnk[:k]].mean()
return _ACG / n