召回评价指标NDCG、MAP

news2025/1/10 10:56:57

【MAP】

1、AP
A P = ∑ i = 1 n r e l ( i ) p i AP = \sum_{i=1}^{n}\frac{rel(i)}{p_i} AP=i=1npirel(i)
其中 n 表示候选序列长度, p i p_i pi表示第 i 个 item 的位置

  • 本质是对每个位置item的分数加一个基于位置的筛选.
  • 简单粗暴,直接除以位置的排序,位置越靠后,衰减越大
  • 符合直观感受,展示位置越靠前,权重应该越大,比如[1,1,0,0,0]优于[0,0,0,1,1]

2、MAP:先计算每个用户的AP,然后再求平均值。

M A P = 1 m ∑ i = 1 m A P i MAP = \frac {1}{m} \sum_{i=1}^{m}AP_i MAP=m1i=1mAPi
其中m表示用户数目,先计算每个用户的AP,然后再求平均值。
在这里插入图片描述

【NDCG】

一、NDCG是什么?

NDCG的全称是:Normalized Discounted Cumulative Gain(归一化折损累计增益)

在搜索和推荐任务中,系统常返回一个item列表。如何衡量这个返回的列表是否优秀呢?

例如,当我们检索【推荐排序】,网页返回了与推荐排序相关的链接列表。列表
可能会是:[A,B,C,G,D,E,F]
也可能是:[C,F,A,E,D]
现在问题来了,当系统返回这些列表时,怎么评价哪个列表更好?

没错,NDCG就是用来评估排序结果的。搜索和推荐任务中比较常见。

二、一点点来理解NDCG~

G->CG->DCG->NDCG

1、Gain: 一个列表中所有item的相关性分数,rel(i)表示item(i)相关性得分。
G a i n = r e l ( i ) Gain=rel(i) Gain=rel(i)

2、Cumulative Gain: 表示对K个item的Gain进行累加。
G G k = ∑ i = 1 k r e l ( i ) GG_k = \sum_{i=1}^{k}rel(i) GGk=i=1krel(i)
CG只是单纯累加相关性,不考虑位置信息。

假设A,B,C,D,E对应的rel(i)分别为0.5(A), 0.9(B), 0.3, 0.6(D), 0.1(E),那么

如果返回一个list_1=[A,B,C,D,E],那list_1的CG为0.5+0.9+0.3+0.6+0.1=2.4

如果返回一个list_2=[D,A,E,C,B],那list_2的CG为0.6+0.5+0.1+0.3+0.9=2.4

所以,顺序不影响CG得分。如果我们想评估不同顺序的影响,就需要使用另一个指标DCG来评估。
3、 Discounted Cumulative Gain: 考虑排序顺序的因素,使得排名靠前的item增益更高,对排名靠后的item进行折损(展示越靠前,收益越高

CG与顺序无关,而DCG评估了顺序的影响。

DCG的思想是:list中item的顺序很重要,不同位置的贡献不同,一般来说,排在前面的item影响更大,排在后面的item影响较小。(例如一个返回的网页,肯定是排在前面的item会有更多人点击)。所以,相对CG来说,DCG使排在前面的item增加其影响,排在后面的item减弱其影响
D C G k = ∑ i = 1 k r e l ( i ) l o g 2 ( i + 1 ) ( 1 ) DCG_k = \sum_{i=1}^{k} \frac{rel(i)}{log_2(i+1)} (1) DCGk=i=1klog2(i+1)rel(i)1

怎么实现这个思想呢?DCG在CG的基础上,给每个item的相关性比上log2(i+1),i越大,log2(i+1)的值越大,相当于给每个item的相关性打个折扣,item越靠后,折扣越大(真数大于1,保证折扣力度也就是log2(i+1)取值大于0)。

如果相关性分数r(i)只有(0,1)两种取值时,DGC有另一种表达。其实就是如果算法返回的排序列表中的item出现在真实交互列表中时,分子加1,否则跳过。
还是上面那个例子:
那么
r e l ( i ) = 2 r ( i ) − 1 = { 2 0 − 1 = 0 ,    i f   l a b e l = 0 2 1 − 1 = 1 ,    i f   l a b e l = 1 ( 2 ) rel(i)=2^{r(i)} - 1 = \left\{\begin{matrix} 2^0 - 1 = 0, \ \ if \ label = 0 & \\ 2^1 - 1 = 1, \ \ if \ label = 1 & \end{matrix}\right.(2) rel(i)=2r(i)1={201=0,  if label=0211=1,  if label=12
将(2)带入(1),则有
D C G k = ∑ i = 1 k 2 r ( i ) − 1 l o g 2 ( i + 1 ) DCG_k = \sum_{i=1}^{k} \frac{2^{r(i)} - 1}{log_2(i+1)} DCGk=i=1klog2(i+1)2r(i)1

list_1=[A,B,C,D,E], 其对应计算如下:
在这里插入图片描述list_1的 DCG_1= 0.5+0.57+0.15+0.26+0.04=1.52

list_2=[D,A,E,C,B],其对应计算如下:
在这里插入图片描述
list_2的 DCG_2= 0.6+0.31+0.05+0.13+0.35=1.44

DCG_1 > DCG_2, 所以在这个例子里list_1优于list_2。

到这里,我们可以知道,使用DCG方法就可以对不同的list进行评估,那为什么后面还有一个NDCG呢?

4. NDCG(Normalized DCG): 归一化折损累计增益
在NDCG之前,先了解一些IDGC(ideal DCG)–理想的DCG,IDCG的依据是:是根据rel(i)降序排列,即排列到最好状态。算出最好排列的DCG,就是IDCG。

IDCG=最好排列的DCG

对于上述的例子,按照rel(i)进行降序排列的最好状态为list_best=[B,D,A,C,E]
在这里插入图片描述
IDCG = list_best的DCG_best = 0.9+0.38+0.25+0.13+0.04=1.7 (理所当然,IDCG>DCG_1和DCG_2)
N D C G = D C G I D C G NDCG=\frac{DCG}{IDCG} NDCG=IDCGDCG
因为不同query的搜索结果有多有少,所以不同query的DCG值就没有办法来做对比。所以提出NDCG。

问题

Q:为什么打折是比上log2(i + 1)而不是(i + 1)?
A:为了惩罚排在后面的文档。你也可以用 i + 1自己弄个指标, 但惩罚率更高了

Q:rel(i) 是怎么计算的?
A:rel(i)从label(i)计算而来。rel(i)=2^label(i) - 1,也就是
r e l ( i ) = { 2 0 − 1 = 0 ,    i f   l a b e l = 0 2 1 − 1 = 1 ,    i f   l a b e l = 1 rel(i)=\left\{\begin{matrix} 2^0 - 1 = 0, \ \ if \ label = 0 & \\ 2^1 - 1 = 1, \ \ if \ label = 1 & \end{matrix}\right. rel(i)={201=0,  if label=0211=1,  if label=1

Ref:

  [1].NDCG排序评估指标
  [2].NDCG及实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NeRF与三维重建专栏(三)nerf_pl源码部分解读与colmap、cuda算子使用

前言 上一章中我们介绍了NeRF原理、传统体渲染方法以及两者之间的联系,本章中我们将讲解colmap的安装以及使用,部分nerf_pl源码,同时在开发过程中,由于部分操作python/torch不支持,我们需要自己造轮子,且在…

37 KVM管理设备-管理设备直通

文章目录 37 KVM管理设备-管理设备直通37.1 PCI直通37.2 SR-IOV直通37.2.1 概述37.2.2 操作方法37.2.2.1 开启网卡的SR-IOV模式37.2.2.2 获取PF和VF的PCI BDF信息37.2.2.3 识别和管理PF/VF对应关系37.2.2.4 挂载SR-IOV网卡到虚拟机中 37.2.3 HPRE加速器SR-IOV直通 37 KVM管理设…

IOS上架流程详解,包含审核避坑指南!

准备 开发者账号完工的项目 上架步骤 一、创建App ID二、创建证书请求文件 (CSR文件)三、创建发布证书 (CER)四、创建Provisioning Profiles配置文件 (PP文件)五、在App Store创建应用六、打包上架 一、…

又一运维利器:资源监控微应用

过去几个月,优维在新的资源监控微应用相关能力的研发上投入大量的时间与精力。 上周三,优维专门召开了一场资源监控微应用发布会,介绍了优维的监控微应用的功能亮点和后续规划。 下面就跟着鹿小U一起来具体了解一下。 01 过去&#xff0c…

需求不完备测试解决方案——分布式微服务架构测试实践

1痛点和研究背景 目前随着分布式核心下移和小型机下线的趋势,主流系统架构已逐步演变为CCETDSQL。而在这一演进过程中也陆续暴露出来一些痛点难点问题,需要我们着力解决。为此,我们聚焦于分布式架构下需求、架构、数据这三个方面的痛点问题探…

【Linux驱动】VScode 环境简单配置

在开始编写驱动之前,我们需要保证良好的编码环境,这里编写代码所使用的编辑器是VScode,如果进行环境配置,可能会提示很多错误,比如头文件找不到、内核函数的定义无法跳转等等。 VScode 在这里只作为编辑器使用&#x…

Springboot配置Yml多环境

文章目录 学习链接前言pom.xmlapplication.ymlapplication-dev.yml 开发环境配置application-prod.yml 线上环境配置logback.xml 日志配置 学习链接 easypan Spring Boot手把手教学(2):使用yml多环境配置和创建多环境profile打包 springboot 配置多环境使用yml配置…

自动化测试介绍和分类,看这一篇就够了

自动化测试介绍及分类 什么是自动化测试? 自动化测试是软件测试活动中一个重要的分支和组成部分,即利用工具或脚本达到测试目的,没有人工或者极少人工参与的软件测试活动称为自动化测试. 自动化测试的优势有哪些? 方便进行回归测试,当软件的版本发布比较频繁的时候,自动化…

平台工程是 DevOps 的未来

Gartner 预测到 2026 年时,将有 80% 的软件工程组织会建立平台团队 DevOps 与平台工程 DevOps 是一种文化和理念。平台工程,是我们实现**“谁构建、谁运行”**的唯一方式。这是 DevOps 的核心初衷,也是后来企业级规模和云原生时代的实现基础…

游泳健身馆预约小程序开发 助力门店拓客引流

暑假快要到了,很多游泳健身馆都想方设法来招揽顾客,其实无论是派发传单还是媒体投放,都不如开发一款游泳健身类预约小程序来的好。因为有了健身游泳小程序系统不仅能够起到很好的推广宣传效果,对于日后的经营发展也有诸多好处。 …

javaEE在2023年5月21知识复盘(一)

今天讲述了doget()、doPost()方法,介绍了里面参数req,resp的一些实用方法 getParameter()获取请求参数 getParameterValues() 返回参数数组 【post方式】 设置编码格式 req-> setCharacterEncoding() resp->SetContent-Type(“text/html;charsetutf-8”) 获取…

SpringBoot + minio实现文件切片极速上传技术(敢说全网整合完整度前三)

一. 概述 提示:请不要多个博客来回跳着看,此文章之详细绝无仅有,融合多家之长,如果遇见报错,请仔细捋一遍文章,不要忽略!我在写的时候因为许多文章不全面,来回跳遇见许多坑&#xf…

Java 集合,你肯定也会被问到这些

作为一位小菜 ”一面面试官“,面试过程中,我肯定会问 Java 集合的内容,同时作为求职者,也肯定会被问到集合,所以整理下 Java 集合面试题 说说常见的集合有哪些吧? HashMap说一下,其中的Key需要重…

傻子都能学会的LNMP部署

LNMP 一、安装 Nginx 服务1、安装依赖包2、创建运行用户3、编译安装4、优化路径5、添加 Nginx 系统服务 二、安装 MySQL 服务】1、安装Mysql环境依赖包2、创建运行用户3、编译安装4、修改mysql 配置文件5、更改mysql安装目录和配置文件的属主属组6、设置路径环境变量7、初始化数…

接口测试测什么?一个简单问题把我难住了

那么设计测试用例时我们主要考虑如下几个方面: 一、功能测试 接口的功能是否正确实现了 接口是否按照设计文档中来实现(比如username参数写为了user,那么这就不符合,因为接口文档在整个开发中都需要使用,所以接口实…

MEX 文件 ‘lsd.mexw64‘ 无效: 找不到指定的模块。问题解决方法

问题描述 在跑MATLAB和C混合编程的一个算法时,出现了如下错误: MEX 文件 C:\Project\final code\reference code\lsd.mexw64 无效: 找不到指定的模块。 如下图所示: 原因分析 根据资料[1]的说法,*.mexw64文件无效可能的原因是缺…

GitLab从旧服务器迁移到新服务器(空间不足,gitlab安装报错)

注意事项:迁移前首先要保证新旧服务器上的GitLab版本号一致,而且gitlab的包要符合安装的系统gitlab安装,系统与安装包不一致导致的安装错误。 1.查看当前GitLab版本 cat /opt/gitlab/embedded/service/gitlab-rails/VERSION显示为 12.5.5。…

Linux之Ubuntu 22.04实现微信双开

Linux之Ubuntu 22.04实现微信双开 基于deepin-wine仓库安装第一个微信添加仓库安装对应软件包com.qq.weixin.deepin 微信的安装存在的问题补充 Linux下使用模拟器进行微信多开(可取?)下载Linux模拟器下载完成打开: 安装第二个微信…

zookeeper机制及消息队列kafka集群部署

目录 一、zookeeper1、zookeeper简介2、zookeeper特点3、zookeeper工作模式及机制4、zookeeper应用场景及选举机制5、zookeeper集群部署 二、消息队列kafka1、为什么要有消息队列2、使用消息队列的好处3、kafka简介4、kafka特点5、kafka系统架构名词介绍6、Kafka架构及流程7、k…

技术分享 | 如何编写同时兼容 Vue2 和 Vue3 的代码?

LigaAI 的评论编辑器、附件展示以及富文本编辑器都支持在 Vue2(Web)与 Vue3(VSCode、lDEA)中使用。这样不仅可以在不同 Vue 版本的工程中间共享代码,还能为后续升级 Vue3 减少一定阻碍。 那么,同时兼容 Vue…