- 查询(Query):matrix movies
- 相关文档(Relevant):10, 582, 877, 10003(标记为 REL)
Precision (P@k)
P@k 是指对于某个查询的给定结果列表中,前 k 个文档里相关文档所占的百分比。
- 结果列表(Result list):582, 17, 5666, 10003, 10
| P@k | Value |
|---|
| P@1 | 1/1 = 100% |
| P@2 | 1/2 = 50% |
| P@3 | 1/3 = 33% |
| P@4 | 2/4 = 50% |
| P@5 | 3/5 = 60% |
Average Precision (AP)
设 R1, ..., Rk 是给定查询结果列表中相关文档的排序位置列表,那么 AP(平均精度,Average Precision)是 k 个 P@Ri 值的平均值。
-
结果列表(Result list):582, 17, 5666, 10003, 10, ..., 877(其中 582、10003、10、877 是相关文档)
-
相关文档的位置(R1, ..., R4):1, 4, 5, 40(表示相关文档在结果列表中的位置)
-
P@Ri 值:
-
P@R1=P@1=1/1=100%(位置 1 有 1 个相关文档,共 1 个文档)
-
P@R2=P@4=2/4=50%(位置 4 有 2 个相关文档,共 4 个文档)
-
P@R3=P@5=3/5=60%(位置 5 有 3 个相关文档,共 5 个文档)
-
P@R4=P@40=4/40=10%(位置 40 有 4 个相关文档,共 40 个文档)
-
AP(平均精度):AP=(100%+50%+60%+10%)/4=55%
Mean Precisions (MP@k, MP@R, MAP)
给定一个包含多个查询的基准测试(benchmark)以及对应的真实结果(ground truth)。通过计算某个度量标准在所有查询上的平均值,可以评估系统的整体质量。
- 均值精度(Mean Precisions)
- MP@k:所有查询的 P@k 值的均值(平均值)。
- MP@R:所有查询的 P@R 值的均值(平均值)。
- MAP(Mean Average Precision,平均平均精度):所有查询的 AP 值的均值(平均值)。
Discounted Cumulative Gain
有时相关性(relevance)不仅仅是“是”或“否”,而是有不同层次。例如:
- 0 = 不相关
- 1 = 有些相关
- 2 = 非常相关
为了评估检索结果,相关性得分应该考虑位置因素:越靠前的相关文档应该贡献更高的得分,而靠后的相关文档得分应“折损”(discount)。
-
累积增益(Cumulative Gain, CG):前 k 个文档的相关性得分之和。
CG@k=i=1∑kreli
-
折损累积增益(Discounted Cumulative Gain, DCG):通过对位置 i 应用 log2(i+1) 进行折损,确保靠后位置的相关性得分降低。
DCG@k=i=1∑klog2(i+1)reli=rel1+i=2∑klog2(i+1)reli
问题:CG 和 DCG 的大小依赖于结果列表的长度和相关性分数的分布,因此需要归一化。
-
理想 DCG(Ideal DCG, iDCG):iDCG@k 是理想排序(所有相关文档按相关性从高到低排序)下的 DCG@k 值,即最大可能得分。
-
归一化 DCG(Normalized DCG, nDCG):通过除以理想 DCG 进行归一化,使得分范围在 0 到 1 之间,便于比较不同查询或系统的性能
nDCG@k=iDCG@kDCG@k
【Example】:考虑一个包含 5 个文档的结果列表(前 5 个文档),并假设该查询只有 3 个相关文档(Hit #1、Hit #2 和 Hit #3)。相关性评分(relevance)如下
- Hit #1:非常相关(2)
- Hit #2:相关(1)
- Hit #3:不相关(0)
- Hit #4:非常相关(0)
- Hit #5:不相关(0)
-
DCG@5 :
- i=1, rel1=2 : log222=2
- i=2 , rel2=1 : log232≈1.5851=0.6309
- i=3 , rel3=0, log240=0
- i=4 , rel4=2, log250=0
- i=5 , rel5=0, log260=0
DCG@5=2+0.6309+0+0+0≈2.6309
-
iDCG@5 : 理想排序是将相关性最高的文档放在最前面,相关文档按相关性排序为:rel=2,1,0(其余为 0)
- i=1, rel1=2 : log222=2
- i=2 , rel2=1 : log232≈1.5851=0.6309
- i=3 , rel3=0, log240=0
- i=4 , rel4=2, log250=0
- i=5 , rel5=0, log260=0
iDCG@5=2+0.6309+0+0+0≈2.6309
-
nDCG@5
nDCG@5=iDCG@5DCG@5≈2.63092.6309=1.0
Binary Preference (bpref)
在某些情况下,我们只能为文档的一个子集提供相关性判断(relevance judgments),因为检查所有文档以确定其相关性是不可行的。
那么衡量被判断为相关的文档是否排在被判断为不相关的文档之前。
二元偏好(bpref):
【Example】:考虑一个结果列表和对应的相关性判断,假设总共有 9 个文档,但只有 7 个文档被做了检查。
结果列表:
- #1:判断为相关(judged relevant)
- #2:未判断(not judged)
- #3:未判断(not judged)
- #4:判断为不相关(judged not relevant)
- #5:判断为相关(judged relevant)
未在结果列表:
- A: 判断为相关,
- X, Y, Z : 判断为不相关
定义集合:
- R : 判断为相关的文档集合 : R={#1,#5,A}⇒\absR=3
- N : 判断为不相关的文档集合 : N={X,Y,Z,#4}⇒\absN=4
- RR: 结果列表中相关文档集合 : RR={#1,#5}
- NR(r) = 排在相关文档 r 之前的已判断为不相关的文档。
- NR(Hit #1)=∅⇒\absNR(Hit #1)=0
- NR(Hit #5)={#4}⇒\absNR(Hit #5)=1
bpref:
- min(\absR,\absN)=3
- r=#1:1−30=1
- r=#5:1−31=32
- bpref=31(1+32)=95