信息检索评估指标

相关文献:

learning to rank : https://en.wikipedia.org/wiki/Learning_to_rank#cite_note-13 
MRR: https://en.wikipedia.org/wiki/Mean_reciprocal_rank 
Precision and Recall: https://en.wikipedia.org/wiki/Precision_and_recall 
chales‘blog : http://charleshm.github.io/2016/03/Model-Performance/

一 查准率与查全率

此处输入图片的描述

Precision(P)

是指检索得到的文档中相关文档所占的比例,公式如下: 


这里写图片描述 

如果我们只考虑召回的所有结果的top n文档的 查准率, 叫做 P@n

Recall: (R)

查全率是指所有相关文档中被召回到的比例,公式如下: 


这里写图片描述 

如果我们只考虑召回的所有结果的top n文档的 查准率, 叫做 R@n

即使仅仅观察查全率为100% 也没多大意义, 虽然相关的文档 被全部召回了, 但是往往代价是伴随着更多的不相关文档被召回,导致查准率下降, 所以应该同时考虑两个指标,尽可能的都要高。

F-measure

一种同时考虑准确率和召回率的指标。公式如下: 

F=2×precision×recall(precision+recall)F=2×precision×recall(precision+recall)

可以看出F的取值范围从0到1。另外还有一种F的变体如下所示: 
Fβ=(1+β2)×(precision×recall)(β2×precision+recall)Fβ=(1+β2)×(precision×recall)(β2×precision+recall)

常用的两种设置是 F2F2F0.5F0.5,前者中recall重要程度是precision的两倍,后者则相反,precision重要程度是recall的两倍。

Mean average precision(MAP)

准确率和召回率都只能衡量检索性能的一个方面,最理想的情况肯定是准确率和召回率都比较高。当我们想提高召回率的时候,肯定会影响准确率,所以可以把准确率看做是召回率的函数,即:P=f(R)P=f(R),也就是随着召回率从0到1,准确率的变化情况。那么就可以对函数P=f(R)P=f(R)在R上进行积分,可以求P的期望均值。公式如下: 


这里写图片描述 

微分: 


这里写图片描述 

其中k是召回文档中的某doc rank位置, n是所有召回文档数,P(k)P(k)为cut-off kk in the list准确率,Δr(k)Δr(k)k1k−1 到kk的召回率变化量

等价于下面的公式: 


这里写图片描述

rel(k)rel(k)值为0或1,如果doc k是相关文档, rel(k)rel(k)为1,否则为0,

AvePAveP的计算方式可以简单的认为是: 

AveP=1R×r=1Rrposition(r)AveP=1R×∑r=1Rrposition(r)

其中RR表示相关文档的总个数,position(r)position(r)表示,结果列表从前往后看,第rr个相关文档在列表中的位置。比如,有三个相关文档,位置分别为1、3、6,那么AveP=13×(11+23+36)AveP=13×(11+23+36)。在编程的时候需要注意,位置和第i个相关文档,都是从1开始的,不是从0开始的。 
AvePAveP意义是在召回率从0到1逐步提高的同时,对每个R位置上的P进行相加,也即要保证准确率比较高,才能使最后的AvePAveP比较大。

最后~,MAP计算所有Query的平均准确率分数: 

MAP=Qq=1AveP(q)QMAP=∑q=1QAveP(q)Q

Q为query数目总量。

Mean reciprocal rank(MRR)

MRR=1|Q|i=1|Q|1rankiMRR=1|Q|∑i=1|Q|1ranki

where  rankirankirefers to the rank position of the first relevant document for the i-th query.

第一个正确答案的排名的倒数。MRR是指多个查询语句的排名倒数的均值 
这里写图片描述

Expected reciprocal rank (ERR)

一种考虑是,一个文档是否被用户点击和排在它前面的文档有很大的关系,比如排在前面的文档都是不相关文档,那么它被点击的概率就高,如果排它前面的文档都是非常相关的文档,那么它被点击的概率就很低。Cascade Models假设用户从排名由高到底依次查看文档,一旦文档满足了用户的需求,则停止查看后续的文档。用RiRi表示用户只看在位置ii上的文档后就不在需要查看其它文档的概率,显然文档的相关度越高,RiRi越大。那么用户在位置i停止的概率公式如下: 

PPr=i=1r1(1Ri)RrPPr=∏i=1r−1(1−Ri)Rr

ERR表示用户的需求被满足时停止的位置的倒数的期望。首先是计算用户在位置rr停止的概率PPrPPr,如下所示:

PPr=i=1r1(1Ri)RrPPr=∏i=1r−1(1−Ri)Rr

其中 RiRi是关于文档相关度等级的函数,可以选取如下的函数: 
Ri=R(gi)=2g12gmax,g{0,1,,gmax}Ri=R(gi)=2g−12gmax,g∈{0,1,…⋯,gmax}

那么ERR的计算公式如下: 

ERR=r=1nφ(r)PPr=r=1n1rPPr=r=1n1ri=1r1(1Ri)RrERR=∑r=1nφ(r)PPr=∑r=1n1rPPr=∑r=1n1r∏i=1r−1(1−Ri)Rr

更通用一点,ERR不一定计算用户需求满足时停止的位置的倒数的期望,可以是其它基于位置的函数 φ(r)φ(r),只要满足 φ(0)=1φ(0)=1,且 φ(r)0φ(r)→0随着 rr→∞。比如DCG中的 φ(r)=1log2(r+1)φ(r)=1log2(r+1) 
ERR论文:  https://web.archive.org/web/20120224053008/http://research.yahoo.com/files/err.pdf

Discounted cumulative gain (DCG)

在MAP计算公式中,文档只有相关不相关两种,而在nDCG中,文档的相关度可以分多个等级进行打分。

Cumulative Gain (CG)

计算DCG之前先进行计算CG, 公式如下: 

CGp=i=1preliCGp=∑i=1preli
relireli 是位置i处的相关性,上述公式计算了前p个结果的相关性总和 
注意到召回结果的doc间任意排序,对CG函数值是无影响的,比如: 召回的三个文档rank依次是doc1,doc2,doc3,相关性依次是 3,2,0,而如果 
rank顺序为doc3,doc2,doc1,其CG值依然为5. 而前者排序是最合理的,但CG值相同。

Discounted Cumulative Gain(DCG)

所以要引入对位置信息的度量计算,既要考虑文档的相关度等级,也要考虑它所在的位置信息。假设每个位置按照从小到大的排序, 
它们的价值依次递减,意味着,相关度越高的如果排序越靠后,那么分数就应该受到惩罚, 
可以假设第i个位置的价值是1log2(i+1)1log2(i+1),那么排在第i个位置的文档所产生的效益就是reli×1log2(i+1)=relilog2(i+1)reli×1log2(i+1)=relilog2(i+1),公式如下: 

DCGp=i=1prelilog2(i+1)=rel1+i=2prelilog2(i+1)DCGp=∑i=1prelilog2(i+1)=rel1+∑i=2prelilog2(i+1)
另一种比较常用的,用来增加相关度影响比重的DCG计算方式是: 
DCGp=i=1p2reli1log2(i+1)DCGp=∑i=1p2reli−1log2(i+1)

Normalized DCG (NDCG)

由于每个查询语句所能检索到的结果文档集合长度不一,p值的不同会对DCG的计算有较大的影响。所以不能对不同查询语句的DCG 
进行求平均,需要进行归一化处理。nDCG就是用IDCG进行归一化处理,表示当前DCG比IDCG还差多大的距离。公式如下: 

nDCGp=DCGpIDCGpnDCGp=DCGpIDCGp

IDCG为理想情况下最大的DCG值 
IDCGp=i=1|REL|2reli1log2(i+1)IDCGp=∑i=1|REL|2reli−1log2(i+1)

其中|REL||REL|表示,文档按照相关性从大到小的顺序排序,取前p个文档组成的集合。也就是按照最优的方式对文档进行排序。

如何计算

假如一个query召回的文档前6个为 
D={d1,d2,d3,d4,d5,d6}D={d1,d2,d3,d4,d5,d6} 
相关性分值依次为 
3,2,3,0,1,23,2,3,0,1,2 
意味着d1d1 的相关性分值为3,d2d2相关性分值为2,以此类推。 
CGCG值为: 
此处输入图片的描述 
可以看到只是简单的对召回对前6个文档分数简单的加和,并没有考虑doc所在的位置对排序结果的评分影响。而DCGDCG的思想是对 越高相关性的doc越往后排会给予一定的更大惩罚项。 
DCGDCG的计算如下 
此处输入图片的描述 
此处输入图片的描述 
因为每个query召回文档数目不同,DCG间无法统一比较,所以需要归一化。 
先计算IDCG,我们假设实际上此query召回了八个doc,除了上面6个doc,还有doc7doc7 分值为3,dooc8dooc8分值为0,理想rank情况下的相关分数顺序为: 
3,3,3,2,2,1,03,3,3,2,2,1,0 
计算IDCG@6IDCG@6
IDCG6=8.740IDCG6=8.740 

nIDCG6=DCG6IDCG6=6.8618.740=0.785nIDCG6=DCG6IDCG6=6.8618.740=0.785

局限性

  • nDCG不能惩罚“坏”文档,比如两个query返回了两列结果,分值分别为1,1,11,1,11,1,101,1,10 那么两者的nDCG是一样的。注意把ExcellentExcellent,FairFair,BadBad映射为分值数字最好为1,0,11,0,−1,而不是类似于2,1,02,1,0
  • nDCG不能惩罚“缺失” 的doc,比如两个query返回了两列结果,分值分别为1,1,11,1,1,1,1,1,1,11,1,1,1,1.前者计算DCG@3DCG@3,后者计算DCG@5DCG@5 的话,两个doc都可以被认为是好的。解决方法是应该采取固定的topk大小来计算DCG@kDCG@k,并在doc不足的query召回结果后面补上“最小权重分值”,如1,1,1,0,01,1,1,0,0,1,1,1,1,11,1,1,1,1 两者均计算nDCG@5nDCG@5

分类模型上 Precision 和 Recall的含义

混淆矩阵

True Positive(真正, TP):将正类预测为正类数. 
True Negative(真负 , TN):将负类预测为负类数. 
False Positive(假正, FP):将负类预测为正类数 →→ 误报 (Type I error). 
False Negative(假负 , FN):将正类预测为负类数 →→ 漏报 (Type II error). 
这里写图片描述

精确率(precision)定义为:

P=TPTP+FP(1)(1)P=TPTP+FP

需要注意的是精确率(precision)和准确率(accuracy)是不一样的, 
ACC=TP+TNTP+TN+FP+FNACC=TP+TNTP+TN+FP+FN

在正负样本不平衡的情况下,准确率这个评价指标有很大的缺陷。比如在互联网广告里面,点击的数量是很少的,一般只有千分之几,如果用acc,即使全部预测成负类(不点击)acc 也有 99% 以上,没有意义。

召回率(recall,sensitivity,true positive rate)定义为: 

R=TPTP+FN(2)(2)R=TPTP+FN

此外,还有 F1F1 值,是精确率和召回率的调和均值, 
2F1F1=1P+1R=2TP2TP+FP+FN(3)2F1=1P+1R(3)F1=2TP2TP+FP+FN

精确率和准确率都高的情况下,F1F1 值也会高。

通俗版本

实际上非常简单,精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是对的。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP)。 
而召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。

此处输入图片的描述

版权声明:www.itzyshare.com AIQ-机器学习大数据技术社区 全国最专业的机器学习大数据技术社区,机器学习与人工智能AI的前沿阵地,提供各种国内外第一手的机器学习、人工智能资源资讯学习资料,是一个以机器学习,大数据,云计算,数据分析,数据挖掘,人工智能,区块链为主要学习方向的学习交流社区。大家可以分享高质量文章 。全国高校IT精英群号:467123855 https://blog.csdn.net/lsgqjh/article/details/79509169

猜你喜欢

转载自blog.csdn.net/qq_33373858/article/details/80001462