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

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")

作者:一个处女座的程序猿

物联沃分享整理
物联沃-IOTWORD物联网 » Python之TREC:pytrec_eval简介、安装和使用方法、案例应用之详细攻略

发表回复