关于检索评价的一份介绍

在信息检索中,当我们进行完检索评价后就需要对于检索所得的结果进行评价,类似于机器学习中的模型评估那样,因此我们需要一些度量方式来对于信息检索的结果进行评价。

在这篇文章中,我就将介绍一些标准用于度量信息检索的结果。具体将包含Cranfield范式,Precision、Recall、P@n、MAP、MPP、F等许多评价指标。

一、Cranfield范式

Cranfield范式是指一种用于信息检索系统评估的标准方法,它起源于1960年代英国Cranfield大学的一项研究工作。这项工作的目标之一是建立一个基准测试环境,用于比较不同的信息检索技术的有效性。它本身并非一种评价指标,而是一种方法论,描述如何进行信息检索实验的设计与评价。

Cranfield主要由4部分组成,分别为数据集、查询集、相关性判断与检索指标。对于前三者在此不必多言,但对于检索指标我们需要知道:Cranfield范式引入了用于评估检索效果的度量标准,最著名的就是查准率(Precision)和查全率(Recall)。查准率衡量的是检索结果中相关文档的比例,而查全率衡量的是所有相关文档中有多少被检索到了。

二、检索指标

2.1 Precision

Precision可以被翻译为精度,其代表在检出文档中相关文档的比例,表达式为:

Precision=p=\frac{|R\bigcap A|}{A}

其中,R表示相关文档,A表示检出文档。

举个例子:

对于一个查询q有如下的结果:

1.d123     2.d84~    3.d345    4.d1~    5.d11

其中有加“~”表示其是相关文档,而R由专家评估可得R={d1,d84,d100}

那么可知R=3,A=5,将之带入式子可得:

p = \frac{2}{5}=0.4

2.2 Recall

Recall可以被翻译为召回率,其是指相关文档与检出文档的比例,表达式为:

Recall=r=\frac{|R\bigcap A|}{R}

其中,R与A的含义同上。

同样举个例子:

例子的已知条件同上,则带入表达式得:

r=\frac{2}{3}\approx 0.667

对于上述的Precision和Recall在python的sklearn中存在现成的函数去调用,具体代码如下:

from sklearn.metrics import precision_score, recall_score# 假设我们有一组预测的相关文档和真实的文档列表
# 预测的相关文档(预测标签)
predicted_relevant = [1, 0, 1, 1, 0]  # 假设1表示相关,0表示不相关# 真实的相关文档(真实标签)
true_relevant = [1, 1, 1, 0, 0]  # 同样,1表示相关,0表示不相关# 计算Precision
precision = precision_score(true_relevant, predicted_relevant)
print(f"Precision: {precision:.2f}")# 计算Recall
recall = recall_score(true_relevant, predicted_relevant)
print(f"Recall: {recall:.2f}")

最终输出为:

Precision: 0.67
Recall: 0.67 

2.3 P@n

“前n平均精度”(Precision at n,简称 P@n)是一个用于评估信息检索系统性能的指标,特别是在搜索引擎、推荐系统以及分类任务中。它衡量的是检索结果列表中前N个结果的精确度,即在这n个结果中有多少是相关(正确)的结果。

其表达式为:

p@n=\frac{number of relevant items}{n}

一般情况下,我们通常选择5或10,即p@5或p@10。

2.4 MAP

平均精度均值(MAP)的主要想法是产生一个关于排序的总结性单一数值,而这个通过对每个新观察到的相关文档计算精度并做平均获得的。

其中,AP 是针对单个查询计算的,而 MAP 则是针对多个查询的 AP 的平均值。AP 考虑了检索结果中相关文档的排列位置,而不仅仅是相关文档的数量。

对于之前的例子我们可以先算出它的AP,AP=0.5,此时如果我们再存在一个查询q2,则可以算对应的AP,然后求和相除即可得到MAP来。

2.5 R精度

R精度的思想是在排序的第R个位置计算精度,从而为该排序生成一个总计欸选哪个的单一值,其中R是当前查询的相关文档总数。

2.6 MRR

平均查询倒数(MRR)是所有排序倒数的均值,即:

MRR=\frac{1}{N_{q}}*\sum _{i=1}^{N_{q}}\frac{1}{S_{correct}(R_{i})}

举个例子,还是之前的那些已知信息,则有:

我们来看如何计算单个查询的Reciprocal Rank(RR)。在这一组结果中,相关文档出现的位置如下:

d84~ 出现在位置2

d1~ 出现在位置4

由于d100不在检索结果中,我们只考虑出现的两个相关文档。

对于这个查询来说,我们取第一个相关文档的位置来计算RR:

第一个相关文档是d84~,位于第2位,所以RR = 1/2 = 0.5

如果我们只有一个查询,那么MRR就是这个查询的RR值: MRR=RR=0.5

2.7 E值

E值是一种结合了精度和召回率的度量方法,其可以定义为:

E(j)=1-\frac{1+b^2}{\frac{b^2}{r(j)}+\frac{1}{P(j)}}

其中r(j)是排序中第j个位置的召回率,p(j)是在排序中第j个位置的精度。

此时,如果b=0,那么原式变形为:

E(j)=1-P(j)

如果b->\inftyb,那么:

E(j)=1-r(j)

2.8 F值

调和平均(Harmonic Mean)有时也被称为F值,其计算方式如下:

F(j)=\frac{2}{\frac{1}{r(j)}+\frac{1}{P(j)}}

其中,r(j)表示在排序中第j个位置的召回率,P(j)表示在排序中第j个位置的精度。

这些是有关检索评价的一部分指标,除此之外还有许多,我将会在之后的文章中再详细介绍。

此上

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

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

相关文章

什么是高水位线

oracle中的高水位线 在Oracle数据库中,高水位线(High Water Mark, HWM)是一个非常重要的概念,它标志着数据文件中已分配空间和未分配空间的分界线。理解高水位线对于数据库性能优化和空间管理至关重要。以下是关于高水位线的详细…

双十一宠物空气净化器应该专门选才不踩坑?有哪几款推荐

对于我来说,双十一可以什么都不买,唯独不能缺了宠物空气净化器。 还不是养的“逆子”掉毛太严重了,很多次都是和我家猫待在一起的时候就会发现手机屏幕上都是猫毛,更过分的是就连鼻子里、眼睛里都是猫毛。我也不是没试过用其它除毛…

Java动态代理 | 代码实现Demo

一、代码实现 1. 编写UserService接口 import java.util.List;public interface UserService {/*** 登录*/void login(String userName, String password);/*** 查询用户列表*/List<String> getUserList(); }2. 编写UserService接口实现类 import java.util.Arrays; i…

JS两数之和

文章目录 &#x1f453;题目描述&#x1f576;思路&#x1f97c;方法一&#x1f9e4;方法二&#x1fa72;方法三&#x1f9e5;总结 &#x1f453;题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&am…

VScode运行C语言终端输出中文乱码问题解决方案

VScode运行C语言输出中文乱码问题解决方案 由于 VSCode 的终端是对系统的 cmd 命令行工具的调用&#xff0c;而 cmd 的默认编码为 GBK。当我们在 VSCode 中以 UTF-8 编码进行代码编写且代码里含有中文字符时&#xff0c;在终端运行代码便会出现中文乱码现象。要解决此问题&…

mysql查看和修改默认配置

1.查看最大连接数 SELECT max_connections; 或者 SHOW VARIABLES LIKE max_connections;2.查看当前连接的客户端 SHOW PROCESSLIST;2.临时设置最大连接数 SET GLOBAL max_connections 500;3.临时设置连接客户端交互超时时间 SET GLOBAL interactive_timeout 1800;4.永久生…

使用 rbenv 安装 Ruby 2.7.5

如果尚未安装 rbenv&#xff0c;可以使用 Homebrew 安装它&#xff1a; brew install rbenv brew install ruby-build初始化 rbenv&#xff1a; rbenv init在终端中运行以下命令将 rbenv 添加到你的 shell 中&#xff1a; open .bash_profile复制代码到文件中 eval “$(rbenv…

R语言机器学习算法实战系列(六)K-邻近算法 (K-Nearest Neighbors)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程下载数据加载R包导入数据数据预处理数据描述数据切割调节参数构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve保存模型总结优点:缺点:系统信…

Unity中通过给定的顶点数组生成凸面体的方法参考

这里我们使用了Quickhull for Unity插件&#xff0c;其实就是一个ConvexHullCalculator.cs文件&#xff0c;代码如下&#xff1a; /*** Copyright 2019 Oskar Sigvardsson** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software…

当下主流技术下,程序员如何在科技浪潮中找到价值所在

在当今技术日新月异的时代&#xff0c;科技的浪潮不断改变着世界的运作方式&#xff0c;也重塑了程序员们的职业道路。对于程序员来说&#xff0c;找到自身的价值所在&#xff0c;保持技能的持续更新&#xff0c;不仅是职业发展的必修课&#xff0c;更是适应未来科技社会的必然…

KdTree与八叉树的比较:如何在多维空间中有效管理数据

在计算机科学、机器人学和计算机图形学中&#xff0c;如何高效地管理和查询空间中的数据点是一个非常重要的问题。两种常用的数据结构KdTree&#xff08;K-Dimensional Tree&#xff09; 和 八叉树&#xff08;Octree&#xff09; 正是为此而设计。尽管它们的目标相似&#xff…

【Linux】僵尸进程和孤儿进程

一、僵尸进程 何为僵尸进程&#xff1f; 在 Unix/Linux 系统中&#xff0c;正常情况下&#xff0c;子进程是通过父进程创建的&#xff0c;且两者的运行是相互独立的&#xff0c;父进程永远无法预测子进程到底什么时候结束。当一个进程调用 exit 命令结束自己的生命时&#xff…

移除Microsoft Edge浏览器“由你的组织管理“提示的方法

背景&#xff1a; 点击Microsoft Edge浏览器右上角的按钮有时候会出现提示“由你的组织管理”。但实际上自己的电脑并没有被公司或其他企业管理。 解决方案&#xff1a; 提示&#xff1a;修改注册表如果操作不当会影响电脑&#xff0c;请提前备份注册表&#xff01;&#xff…

【Linux】【命令】diff

diff DescriptionsArgumentsExamples直接使用diff命令-u 输出格式-c 输出格式并列输出-s 和 -q 脚本示例示例1&#xff1a;目录及文件差异 Descriptions diff命令用于对比两个文件或者两个文件夹的不同之处&#xff0c;求基本语法如下所示&#xff1a; diff [OPTION]... FILES…

Oracle 11g 之 ADG 主备 Switchover 手动切换实践

全文目录&#xff1a; 开篇语&#x1f4dc; 前言&#x1f4d1; 摘要&#x1f4dd; 简介&#x1f50d; 概述&#x1f4bb; 核心源码解读&#x1f468;‍&#x1f4bb; 类代码方法介绍及演示 &#x1f4ca; 案例分析&#x1f310; 应用场景演示✅ 优缺点分析优点缺点 &#x1f9e…

ue5 扇形射线检测和鼠标拖拽物体

这里的NumTrace是要发射几根射线&#xff0c;Degrees Per Trace是每根射线之间的角度&#xff0c; 例如 要在角色面前实现一个180度的扇形射线检测&#xff0c;就需这两个变量乘起来等于180 TraceLength是射线的长度 下面是鼠标拖动物体逻辑&#xff0c;很简单 这里的Floor和…

【APIPost】学习与实践,如何使用 APIPost 测试 Java 后端项目

文章目录 1. 什么是 APIPost&#xff1f;2. 安装 APIPost3. APIPost 的基本界面介绍4. 基础功能介绍4.1 创建新请求4.2 设置请求头与参数4.3 查看响应结果4.4 保存请求 5. 环境变量配置5.1 创建环境变量5.2 在请求中使用环境变量 6. API 测试调试功能6.1 Mock 测试6.2 自动化测…

Unity DOTS中的Archetype与Chunk

Unity DOTS中的Archetype与Chunk 在Unity中&#xff0c;archetype&#xff08;原型&#xff09;用来表示一个world里具有相同component类型组合的entity。也就是说&#xff0c;相同component类型的entity在Unity内部会存储到一起&#xff0c;共享同一个archetype。 使用这样的设…

数据的全量加载和增量加载

全量和增量是数据加载过程中常用的两种方法&#xff0c;它们在数据提取和加载策略上有明显的区别&#xff1a; 全量加载&#xff08;Full Load&#xff09; 定义&#xff1a;全量加载是指每次将源系统中的所有数据提取并加载到目标系统中。 特点&#xff1a; 数据完整性&…

一篇文章入门Pytest!

目录 一、安装 二、语法 三、执行 四、前后置setup/teardown 五、fixture 六、数据驱动 七、报告 一、安装 需要安装的库 pytest pytest-html 生成HTML格式的测试报告 pytest-xdist 用例分布式执行&#xff0c;多CPU分发 pytest-ordering …