Python之TREC:pytrec_eval简介、安装和使用方法、案例应用之详细攻略

news2025/1/13 11:51:34

Python之TREC:pytrec_eval简介、安装和使用方法、案例应用之详细攻略

目录

pytrec_eval的简介

pytrec_eval的安装和使用方法

1、pytrec_eval的安装

2、pytrec_eval的使用方法

pytrec_eval的案例应用

# 1、加载查询与结果,计算标准评估指标—— NDCG、MAP

# 2、批量评估多个系统

# 3、计算自定义指标

# 4、批量输出结果到文件


pytrec_eval的简介

pytrec_eval是一个基于流行的trec_eval的Python信息检索评估工具。它旨在避免Python编程语言中自定义信息检索评估度量实现的重复工作。它提供了一个Python接口来使用TREC的评估工具trec_eval。pytrec_eval 提供了一个方便易用的 Python 接口来进行信息检索评估,支持多种评估指标,并具有良好的扩展性,适合各种信息检索相关的研究和应用场景。

GitHub地址:GitHub - cvangysel/pytrec_eval: pytrec_eval is an Information Retrieval evaluation tool for Python, based on the popular trec_eval.

pytrec_eval的安装和使用方法

1、pytrec_eval的安装

需要一个包含开发头文件的Python 3.5或更高版本发行版,并且需要安装numpy和scipy库。安装命令如下:

pip install pytrec_eval
pip install -i https://mirrors.aliyun.com/pypi/simple pytrec_eval

2、pytrec_eval的使用方法

pytrec_eval 的核心在于 RelevanceEvaluator 类。 你需要提供查询的相关性判断 (qrel) 和运行结果 (run)。 qrel 是一个字典,键是查询ID,值是另一个字典,表示每个文档的相关性等级 (通常 0 表示不相关,1 表示相关)。 run 也是一个字典,键是查询ID,值是另一个字典,表示每个文档的得分。

import pytrec_eval
import json

qrel = {
    'q1': {
        'd1': 0,
        'd2': 1,
        'd3': 0,
    },
    'q2': {
        'd2': 1,
        'd3': 1,
    },
}

run = {
    'q1': {
        'd1': 1.0,
        'd2': 0.0,
        'd3': 1.5,
    },
    'q2': {
        'd1': 1.5,
        'd2': 0.2,
        'd3': 0.5,
    }
}

evaluator = pytrec_eval.RelevanceEvaluator(
    qrel, {'map', 'ndcg'})  # 指定需要计算的指标,这里为map和ndcg

print(json.dumps(evaluator.evaluate(run), indent=1))

这段代码会返回一个包含查询 q1 和 q2 的请求评估度量的JSON数据结构,例如:


{
    "q1": {
        "ndcg": 0.5,
        "map": 0.3333333333333333
    },
    "q2": {
        "ndcg": 0.6934264036172708,
        "map": 0.5833333333333333
    }
}

pytrec_eval的案例应用

# 1、加载查询与结果,计算标准评估指标—— NDCG、MAP


'''
pip install -i https://mirrors.aliyun.com/pypi/simple pytrec_eval
qrel 是标准答案,表示每个文档对查询的相关性得分(1 表示相关,0 表示不相关)。
run 是系统的预测得分。
evaluate 方法计算每个查询的评估指标值,例如 NDCG 和 MAP。
'''

import pytrec_eval

# 定义查询的相关性(qrel)
qrel = {
    'query1': {'doc1': 1, 'doc2': 0, 'doc3': 1},
    'query2': {'doc1': 0, 'doc2': 1},
}

# 定义系统返回的检索结果(run)
run = {
    'query1': {'doc1': 0.8, 'doc2': 0.6, 'doc3': 0.4},
    'query2': {'doc1': 0.2, 'doc2': 0.9},
}

# 初始化评估器
evaluator = pytrec_eval.RelevanceEvaluator(qrel, {'ndcg', 'map'})

# 进行评估
results = evaluator.evaluate(run)

# 输出评估结果
for query_id, query_measures in results.items():
    print(f"Query: {query_id}")
    for measure, value in query_measures.items():
        print(f"  {measure}: {value}")

# 2、批量评估多个系统


'''
假设您有多个检索系统的结果,您可以对每个系统进行批量评估。
使用字典 systems 存储多个系统的预测结果。
遍历每个系统,分别评估 NDCG 和 MAP 等指标。
'''
import pytrec_eval

# 定义查询相关性
qrel = {
    'query1': {'doc1': 1, 'doc2': 0, 'doc3': 1},
    'query2': {'doc1': 0, 'doc2': 1},
}

# 定义多个系统的结果
systems = {
    'system1': {
        'query1': {'doc1': 0.8, 'doc2': 0.6, 'doc3': 0.4},
        'query2': {'doc1': 0.2, 'doc2': 0.9},
    },
    'system2': {
        'query1': {'doc1': 0.9, 'doc2': 0.3, 'doc3': 0.7},
        'query2': {'doc1': 0.4, 'doc2': 0.8},
    },
}

# 初始化评估器
evaluator = pytrec_eval.RelevanceEvaluator(qrel, {'ndcg', 'map'})

# 对每个系统进行评估
for system_name, run in systems.items():
    results = evaluator.evaluate(run)
    print(f"Results for {system_name}:")
    for query_id, query_measures in results.items():
        print(f"  Query: {query_id}")
        for measure, value in query_measures.items():
            print(f"    {measure}: {value}")

# 3、计算自定义指标


'''
可以自定义评价指标的集合,例如只评估 precision@k。
precision@1 表示前 1 个结果的准确率。
precision@2 表示前 2 个结果的准确率。
通过指定自定义指标集合,评估更加灵活。
'''

import pytrec_eval

# 定义查询相关性
qrel = {
    'query1': {'doc1': 1, 'doc2': 0, 'doc3': 1},
    'query2': {'doc1': 0, 'doc2': 1},
}

# 定义系统返回结果
run = {
    'query1': {'doc1': 0.8, 'doc2': 0.6, 'doc3': 0.4},
    'query2': {'doc1': 0.2, 'doc2': 0.9},
}

# 初始化评估器,指定评估指标 precision@1, precision@2
evaluator = pytrec_eval.RelevanceEvaluator(qrel, {'precision@1', 'precision@2'})

# 进行评估
results = evaluator.evaluate(run)

# 输出评估结果
for query_id, query_measures in results.items():
    print(f"Query: {query_id}")
    for measure, value in query_measures.items():
        print(f"  {measure}: {value}")

# 4、批量输出结果到文件

'''
如果需要将评估结果保存到文件,可以使用以下代码:
使用 json.dump 方法将评估结果保存到文件中,方便后续分析。
'''
import pytrec_eval
import json

# 定义 qrel 和 run
qrel = {
    'query1': {'doc1': 1, 'doc2': 0, 'doc3': 1},
    'query2': {'doc1': 0, 'doc2': 1},
}

run = {
    'query1': {'doc1': 0.8, 'doc2': 0.6, 'doc3': 0.4},
    'query2': {'doc1': 0.2, 'doc2': 0.9},
}

evaluator = pytrec_eval.RelevanceEvaluator(qrel, {'ndcg', 'map'})

# 评估并保存结果
results = evaluator.evaluate(run)

# 保存到 JSON 文件
with open('results.json', 'w') as f:
    json.dump(results, f, indent=4)

print("评估结果已保存到 results.json")

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

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

相关文章

Qt监控系统远程网络登录/请求设备列表/服务器查看实时流/回放视频/验证码请求

一、前言说明 这几个功能是近期定制的功能,也非常具有代表性,核心就是之前登录和设备信息都是在本地,存放在数据库中,数据库可以是本地或者远程的,现在需要改成通过网络API请求的方式,现在很多的服务器很强…

【网络协议】动态路由协议

前言 本文将概述动态路由协议,定义其概念,并了解其与静态路由的区别。同时将讨论动态路由协议相较于静态路由的优势,学习动态路由协议的不同类别以及无类别(classless)和有类别(classful)的特性…

安装完docker后,如何拉取ubuntu镜像并创建容器?

1. 先docker拉取ubuntu镜像 docker search ubuntu #搜索ubuntu 镜像 docker pull ubuntu:22.04 #拉取ubuntu 镜像 docker images #下载完成后,查看已经下载的镜像 docker run --name ubuntu_container -dit ubuntu:22.04 /bin/bash # docker container -l 2.…

互联网全景消息(10)之Kafka深度剖析(中)

一、深入应用 1.1 SpringBoot集成Kafka 引入对应的依赖。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupI…

React Fiber框架中的Render渲染阶段——workLoop(performUnitOfWork【beginWork与completeWork】)

触发渲染过程——renderRoot renderRoot 是一个函数&#xff0c;用于触发渲染工作。它通常会调用并递归地执行一系列的渲染任务&#xff0c;直到完成整个更新过程。这个过程包括执行 Fiber 树中的 beginWork 和 completeWork&#xff0c;以及渲染新状态或 DOM。 function ren…

STM32F1学习——ADC模数转换器

一、ADC模数转换器 ADC的全称 Analog-Digital Converter 模拟-数字转换器&#xff0c;他可以用来将引脚上连续变换的模拟电压转换为内存中存储的数字变量。 ADC有两个重要指标&#xff0c;分辨率和频率。 STM32的ADC是 12位 逐次逼近型&#xff0c;1us转换时间&#xff0c;也就…

[每周一更]-(第131期):Go并发协程总结篇

Go语言的并发是通过协程&#xff08;goroutine&#xff09;实现的。Go协程是轻量级的线程&#xff0c;允许多个任务同时执行&#xff0c;且Go运行时会高效地管理它们。在Go中使用并发协程的方式非常简便&#xff0c;也很强大。以下是一些关于Go协程的基础用法和并发控制方法&am…

Ecdsa密钥在线生成工具

具体前往&#xff1a;ECC公钥私钥对在线生成器

llama.cpp 模型可视化工具 GGUF Visualizer

llama.cpp 模型可视化工具 GGUF Visualizer 1. GGUF Visualizer for VS Code (gguf-viz)1.1. Features1.2. Extension Settings References GGUF Visualizer https://marketplace.visualstudio.com/items?itemNameAgainstEntropy.gguf-viz 1. GGUF Visualizer for VS Code (g…

【DAPM杂谈之三】DAPM的初始化流程

本文主要分析DAPM的设计与实现 内核的版本是&#xff1a;linux-5.15.164&#xff0c;下载链接&#xff1a;Linux内核下载 主要讲解有关于DAPM相关的知识&#xff0c;会给出一些例程并分析内核如何去实现的 /**************************************************************…

HarmonyOS:@LocalBuilder装饰器: 维持组件父子关系

一、前言 当开发者使用Builder做引用数据传递时&#xff0c;会考虑组件的父子关系&#xff0c;使用了bind(this)之后&#xff0c;组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题&#xff0c;引入LocalBuilder装饰器。…

Pytorch导出onnx模型并在C++环境中调用(含python和C++工程)

Pytorch导出onnx模型并在C环境中调用&#xff08;含python和C工程&#xff09; 工程下载链接&#xff1a;Pytorch导出onnx模型并在C环境中调用&#xff08;python和C工程&#xff09; 机器学习多层感知机MLP的Pytorch实现-以表格数据为例-含数据集和PyCharm工程中简单介绍了在…

git打补丁

1、应用场景 跨仓库升级 开发项目B使用的是开源项目A。开源项目A发现漏洞&#xff0c;作者进行了修复&#xff0c;我们可以通过使用git补丁的方式&#xff0c;将作者修改的内容复制到我 们的项目B中。 2、TortoiseGit方式 源仓库 格式化补丁 根据提交数量&#xff0c;生成…

计算机网络 (34)可靠传输的工作原理

前言 计算机网络可靠传输的工作原理主要依赖于一系列协议和机制&#xff0c;以确保数据在传输过程中能够准确无误地到达目的地。 一、基本概念 可靠传输指的是数据链路层的发送端发送什么&#xff0c;在接收端就收到什么&#xff0c;即保证数据的完整性、正确性和顺序性。由于网…

基于ADAS 与关键点特征金字塔网络融合的3D LiDAR目标检测原理与算法实现

一、概述 3D LiDAR目标检测是一种在三维空间中识别和定位感兴趣目标的技术。在自动驾驶系统和先进的空间分析中&#xff0c;目标检测方法的不断演进至关重要。3D LiDAR目标检测作为一种变革性的技术&#xff0c;在环境感知方面提供了前所未有的准确性和深度信息. 在这里&…

Vue3初学之常用的指令

v-bind&#xff1a;动态绑定属性 v-bind 用于动态绑定一个或多个属性&#xff0c;或一个组件 prop 到表达式的值。 v-model&#xff1a;双向数据绑定 见上篇 https://editor.csdn.net/md/?articleId145022994 v-if、v-else-if、v-else&#xff1a;条件渲染 v-show&…

docker中jenkins流水线式部署GitLab中springboot项目

本质就是将java项目拉取下来&#xff0c;并自动打包成docker镜像&#xff0c;运行 首先启动一个docker的jenkins 如果没有镜像使用我的镜像 通过网盘分享的文件&#xff1a;jenkins.tar 链接: https://pan.baidu.com/s/1VJOMf6RSIQbvW_V1zFD7eQ?pwd6666 提取码: 6666 放入服…

在ubuntu下对NFS做性能测试

安装NFS 首先&#xff0c;安装服务 sudo apt update sudo apt install nfs-kernel-server然后创建共享文件夹 # 请自定义你自己的共享目录 sudo mkdir -p /exports/nfs4/homes sudo chmod -R 777 /exports/nfs4/homes# 这个可以根据no_root_squash标致选择设置。 # 如果不设…

Open FPV VTX开源之默认MAVLink设置

Open FPV VTX开源之默认MAVLink设置 1. 源由2. 准备3. 连接4. 安装5. 配置6. 测试6.1 启动wfb-ng服务6.2 启动wfb-ng监测6.3 启动QGroundControl6.4 观察测试结果 7. 总结8. 参考资料9. 补充9.1 telemetry_tx异常9.2 DEBUG串口部分乱码9.3 PixelPilot软件问题 1. 源由 飞控图传…

26个开源Agent开发框架调研总结(2)

根据Markets & Markets的预测&#xff0c;到2030年&#xff0c;AI Agent的市场规模将从2024年的50亿美元激增至470亿美元&#xff0c;年均复合增长率为44.8%。 Gartner预计到2028年&#xff0c;至少15%的日常工作决策将由AI Agent自主完成&#xff0c;AI Agent在企业应用中…