转载自:信息检索中度量指标全解析

导读

由浅入深逐个解析信息检索中的度量指标。

我们如何评估前n个结果有多好?

问题1:二元相关性

让我们通过一个简单的玩具例子来理解各种评估指标的细节和权衡。我们有一个排序模型,它会为一个特定的查询返回5个最相关的结果。根据我们的ground-truth,第一个、第三个和第五个结果是相关的。

A. 排序不感知的度量

1. Precision@k
这个指标量化了排名前k的结果中有多少项是相关的。在数学上,由下式给出:

对于我们的例子,precision@1 = 1,因为前1结果中的所有项都是相关的。
同样,precision@2 = 0.5,因为前2个结果中只有一个是相关的。
我们可以计算出所有k值的precision分数。

precision@k的一个限制是它没有考虑相关的项目的位置。考虑具有相同数量相关结果的两个模型A和B,即5个中的3个。对于模型A,前三项是相关的,而对于模型B,后三项是相关的。尽管模型A更好,但对于这两个模型,Precision@5是相同的。

2. Recall@k
这个度量给出了查询的所有实际相关结果中在所有的实际的相关结果中的比例。在数学上:

对于我们的例子,recall@1 = 0.33,因为只存在3个实际相关项中的一个。
类似地,由于3个实际相关的项中只有2个项存在,故recall@3 = 0.67。
我们可以计算不同K值的召回分数。

3. F1@k
这是一个组合度量,通过取它们的调和平均值,将Precision@k和Recall@k结合在一起。我们可以这样计算:

利用前面计算的precision和recall的值,我们可以计算不同K值的F1-scores,如下图所示。

B. 排序感知的度量

虽然precision、recall和F1为我们提供了一个单值度量,但它们不考虑返回的搜索结果的顺序。为了解决这一局限性,人们设计了以下排序感知的度量标准:

  1. Mean Reciprocal Rank(MRR)
    当我们希望系统返回最佳相关项并希望该项位于较高位置时,这个度量是有用的。
    在数学上:
    其中:
    ‖Q‖表示查询的总数
    ranki表示第一个相关结果的排序
    为了计算MRR,我们首先计算排序倒数。它只是第一个正确的相关结果的倒数,值的范围从0到1。
    对于多个不同的查询,我们可以通过对每个查询取倒数的平均值来计算MRR。

    我们可以看到,MRR并不关心剩余的相关结果的位置。所以,如果你的例子需要以最好的方式返回多个相关的结果,MRR不是一个合适的度量。
  1. Average Precision(AP)
    平均精度是衡量模型选择的所有与 ground-truth相关的项目是否都有较高的排序。与MRR不同,它考虑所有相关的项目。
    数学上:

    其中:
    rel(k)是一个指示函数,当第k位的项有相关性时为1。
    P(k)是Precision@k度量
    对于我们的例子,我们可以根据不同K的Precision@K值计算AP。
    为了说明AP的优势,让我们以前面的例子为例,但将3个相关的结果放在开头。我们可以看到,这个例子比上面的例子获得了一个更好的AP分数。
  1. Mean Average Precision(MAP)
    如果我们想计算多个查询的平均精度,我们可以使用MAP。它只是所有查询的平均精度的平均值。数学上:
    其中:
    Q是查询的总数
    AP(q)是查询q的平均精度

问题2: 分等级的相关性

让我们以另一个玩具例子为例,其中我们不仅标注了相关或不相关的项目,而是使用了0到5之间的评分标准,其中0表示相关性最低,5表示相关性最高。

我们有一个排序模型,它会为一个特定的查询返回5个最相关的结果。根据我们的ground-truth,第一项的相关性得分为3,第二项的相关性得分为2,以此类推。

让我们了解评估这种类型的各种度量。

  1. Cumulative Gain (CG@k)
    这个度量使用了一个简单的概念来总结top-K条目的相关性分数。这个总分数称为累积收益。在数学上:

    对于我们的例子,CG@2是5,因为我们将前两个相关性得分3和2相加。

    同理,我们可以计算所有k值的累积收益:

    虽然很简单,但CG并没有考虑到相关项目的顺序。因此,即使我们将一个不太相关的项交换到第一个位置,CG@2也是一样的。
  1. Discounted Cumulative Gain (DCG@k)
    我们看到了一个简单的累积收益是如何不考虑位置的。但是,我们通常希望具有高相关性得分的项目出现在一个更好的排序位置上。
    所以,我们需要一些方法来惩罚他们的位置。DCG引入了一个基于对数的惩罚函数来降低每个位置的相关性得分。对于5个项,惩罚是:

    使用这个惩罚,我们现在可以计算折扣累积收益,只需使用惩罚标准化过后的相关分数的总和。在数学上:
    为了理解对数惩罚的行为,让我们在x轴上绘制排名位置,在y轴上绘制相关性得分的百分比,即。正如所看到的,在位置1,我们不施加任何惩罚,分数保持不变。但是,分数的百分比指数递减从第1位的100%到第2位的63%,第3位的50%,以此类推。

    现在为我们的例子计算DCG。

    基于这些惩罚过的分数,我们现在可以计算不同k值下的DCG,只需将它们加起来。

    对于DCG@K还有一种替代公式,如果相关的条目排名较低,那么惩罚就会更多。该方案在工业上更受青睐。

    虽然DCG解决了累积收益的问题,但它有一定的局限性。假设查询Q1有3个结果,查询Q2有5个结果。那么有5个结果Q2的查询将会有一个更大的总体DCG分数。但我们不能说问题2比问题1好
  1. Normalized Discounted Cumulative Gain (NDCG@k)
    为了允许跨查询比较DCG,我们可以使用NDCG,它使用相关项的理想顺序来规范化DCG值。让我们以之前的例子为例,我们已经计算了不同K值下的DCG值。

    对于我们的例子,理想情况下,我们希望条目按照相关性得分的降序排序。
    我们来计算这个排序下的理想的DCG(IDCG)。
    现在,我们可以计算不同k的NDCG@k,通过对DCG@k除以 IDCG@k:

    因此,我们得到的NDCG分数的范围在0到1之间。一个完美的排名会得到1分。我们还可以比较不同查询的NDCG@k分数,因为它是一个标准化分数

信息检索中的度量precison@k,recall@k,f1@k,MRR,ap,map,CG, DCG,NDCG相关推荐

  1. 一文讲清楚目标检测中mAP、AP、precison、recall、accuracy、TP、FP、FN、TN

    TP.FP.FN.TN 分类中TP.FP.FN.TN含义 目标检测中TP.FP.FN.TN的含义 precision .recall .accuracy precision recall accura ...

  2. 找出无序数组中最小的k个数(top k问题)

    2019独角兽企业重金招聘Python工程师标准>>> 给定一个无序的整型数组arr,找到其中最小的k个数 该题是互联网面试中十分高频的一道题,如果用普通的排序算法,排序之后自然可以 ...

  3. 在递归中使用Continuation来避免StackOverflow(查找第K大的数)

    前段时间从涛哥那学了一招--在递归里面使用Continuation 来避免大量的局部变量的使用,从而避免StackOverflow. 下面是一个小的例子:查找整数数组中的第K大的数: 在递归中使用Co ...

  4. axure中备注线_1分钟K线、日K线、月K线……不同周期的K线图到底有啥用?

    本文由小冉老师微信(xiaoran376418732)整理,个人观点,仅供参考,不构成操作建议.如自行操作,注意仓位控制和风险自负. 有人说炒股是一门玄学,有人说炒股是一门艺术. 有时炒股是一件门槛很 ...

  5. 0206.BFPRT在一大堆数中求其前k大或前k小的问题,简称TOP-K问题(左神算法基础班源码)

    package basic_class_02;/*** * 在一大堆数中求其前k大或前k小的问题,简称TOP-K问题.* 而目前解决TOP-K问题最有效的算法即是BFPRT算法**/ public c ...

  6. adb shell 中查看文件大小指令 ls -al 和 du -k \ du-h

    ls -al 经常使用 ls -al 在 adb shell 中查看文件的大小.这里面自己有一个误区.成都 一般人类正常理解应该是查看这个 Download 文件夹整个大小.但是这个 ls -al 却 ...

  7. 区间素数 由N(N<=10000)个整数组成的数组,其中连续K(K<=200)个元素构成一个区间,称为K区间。一个K区间中所有素数的和记为Sk,请计算整个数组中,所有K区间中的最大Sk值,并输出。

    由N(N<=10000)个整数组成的数组,其中连续K(K<=200)个元素构成一个区间,称为K区间.一个K区间中所有素数的和记为Sk,请计算整个数组中,所有K区间中的最大Sk值,并输出. ...

  8. 天命数 描述 给定两个数字n与m(n,m均不为0,均在100,000以内), 天命数规则如下:给出一个特殊的数字k,1<=k<=3,当k=1的时候,天命数就是n,m中较大的数字整除较小的数字所得到的

    一.题目 满分代码 天命数 描述 给定两个数字n与m(n,m均不为0,均在100,000以内), 天命数规则如下:给出一个特殊的数字k,1<=k<=3,当k=1的时候,天命数就是n,m中较 ...

  9. 【适合Python语言小白的股价图】利用Python中的matplotlib绘制股价图(非k线图)

    [适合Python语言小白的股价图]利用Python中的matplotlib绘制股价图(非k线图) 代码小白,最近做一家公司的股价复盘用到了matplotlib,在此做个小小的记录.代码的逻辑比较笨, ...

最新文章

  1. 【资源推荐】知识图谱顶会论文集锦
  2. jsp/servlet与ajax实现简单局部日期时间更新
  3. 免费版的 IDEA 为啥不能使用 Tomcat ?
  4. SEO网络优化三招教你高质量外链的技巧
  5. 微软社区精英计划 - 你会如何回答【6月26日】北京.Net学习活动QA时提出的问题...
  6. 干货!几招教你降低论文重复率!!
  7. IBatisNet1.5学习--配置篇
  8. 南怀瑾《处事箴言》摘录
  9. Angular TView和LView数据结构
  10. Spring Boot前后端分离项目Session问题解决
  11. pycharm pip超时 无法下载package 更换源
  12. 利用WCF与Android实现图片上传并传参
  13. 3S基础知识:VB中利用MapX创建用户定制工具
  14. Java 登录拦截器
  15. 测试3.0u盘速度软件,分享三个3.0 U盘的性能测试,另征集测试
  16. 世界时钟-国家中英文名称-国家代码-与北京的时差 一览
  17. 百度网盘突破下载限速
  18. (杂谈)攻击者与开发者的无形碰撞--逻辑漏洞的挖掘实战及反思(一)
  19. Jquery 实现 qq迷你首页 切换效果
  20. 浅谈OSPF的DRBDR

热门文章

  1. nginx部署vue项目,给访问路径加前缀
  2. 智力题--CSDN论坛收集
  3. Windows下编译Android所需的FFmpeg库(小白)
  4. Oracle数据字典表
  5. MySQL_启动_Windows
  6. C语言实现来实现字符串反转,只有单词顺序反转,组成单词的字母不反转
  7. Element-ui不显示表格数据问题
  8. 《硬件架构的艺术》读书笔记:Chapter 1 亚稳态的世界
  9. Fiddler对手机APP进行抓包
  10. 目标跟踪评估绘图(3):ubuntu18.04在MATLAB2016b下的vot-toolkit配置,绘制VOT数据集的EAO评估图,与其他算法进行比较