首页 > 其他分享 >通过代码彻底搞懂 Ragas 的 Context Precision 是什么

通过代码彻底搞懂 Ragas 的 Context Precision 是什么

时间:2024-12-30 11:28:38浏览次数:8  
标签:片段 Ragas 示例 list Precision score verdict 搞懂

通过代码彻底搞懂 Ragas 的 Context Precision 是什么

在信息检索和机器学习中,评估检索结果的质量非常重要。

Context Precision 是一个用于衡量"检索上下文"中相关文本块比例的指标。它的计算方法是对上下文中每个文本块的精度@k值取平均。精度@k是指在排名k位置的相关文本块数量与该位置文本块总数的比值。

代码示例

From: ragas/src/ragas/metrics/_context_precision.py

import numpy as np
import typing as t

def _calculate_average_precision(self, verdict_list: t.List[int]) -> float:
    score = np.nan

    denominator = sum(verdict_list) + 1e-10
    numerator = sum(
        [
            (sum(verdict_list[: i + 1]) / (i + 1)) * verdict_list[i]
            for i in range(len(verdict_list))
        ]
    )
    score = numerator / denominator
    return score

代码解析

  1. 输入参数verdict_list 是一个整数列表,其中每个元素表示一个片段是否相关(1表示相关,0表示不相关)。

  2. 分母计算denominator 是相关片段的总数加上一个很小的常数(1e-10),以避免除以零的情况。

  3. 分子计算numerator 是每个片段的相关性加权和。对于每个片段,我们计算到该片段为止的相关片段的比例,并将其乘以该片段的相关性。

  4. 最终得分score 是分子除以分母的结果,表示平均精度。

数据示例

为了更好地理解这个函数的工作原理,我们来看几个具体的例子。

示例 1

verdict_list = [1, 0, 1, 1, 0]
score = _calculate_average_precision(verdict_list)
print(score)  # 输出结果

解释

  • 相关片段的总数为3。
  • 计算每个片段的相关性加权和:
    • 第一个片段:1 / 1 * 1 = 1
    • 第二个片段:1 / 2 * 0 = 0
    • 第三个片段:2 / 3 * 1 = 0.6667
    • 第四个片段:3 / 4 * 1 = 0.75
    • 第五个片段:3 / 5 * 0 = 0
  • 分子总和:1 + 0 + 0.6667 + 0.75 + 0 = 2.4167
  • 最终得分:2.4167 / 3 ≈ 0.8056

示例 2

verdict_list = [1, 1, 0, 0, 1]
score = _calculate_average_precision(verdict_list)
print(score)  # 输出结果

解释

  • 相关片段的总数为3。
  • 计算每个片段的相关性加权和:
    • 第一个片段:1 / 1 * 1 = 1
    • 第二个片段:2 / 2 * 1 = 1
    • 第三个片段:2 / 3 * 0 = 0
    • 第四个片段:2 / 4 * 0 = 0
    • 第五个片段:3 / 5 * 1 = 0.6
  • 分子总和:1 + 1 + 0 + 0 + 0.6 = 2.6
  • 最终得分:2.6 / 3 ≈ 0.8667

示例 3

verdict_list = [0, 0, 1, 1, 1]
score = _calculate_average_precision(verdict_list)
print(score)  # 输出结果

解释

  • 相关片段的总数为3。
  • 计算每个片段的相关性加权和:
    • 第一个片段:0 / 1 * 0 = 0
    • 第二个片段:0 / 2 * 0 = 0
    • 第三个片段:1 / 3 * 1 = 0.3333
    • 第四个片段:2 / 4 * 1 = 0.5
    • 第五个片段:3 / 5 * 1 = 0.6
  • 分子总和:0 + 0 + 0.3333 + 0.5 + 0.6 = 1.4333
  • 最终得分:1.4333 / 3 ≈ 0.4778

总结

通过上述代码示例和具体数据,希望大家理解Context Precision的计算逻辑。这个函数帮助我们评估检索结果中相关内容的比例,是信息检索和机器学习中一个重要的评估指标。


参考资料:

标签:片段,Ragas,示例,list,Precision,score,verdict,搞懂
From: https://blog.csdn.net/engchina/article/details/144818806

相关文章

  • 平均精度(Average Precisio)、阈值(Threshold)、精确率(Precision)、召回率(Recall)
    平均精度(AveragePrecisio):简单说就是衡量模型在不同召回率水平下的精确率的平均值。可以理解为模型对预测结果的整体准确性和可靠性的一个综合评估指标。比如说有个选水果的任务,AP就是看在选各种水果(不同召回率情况)时,选对的比例(精确率)的平均情况。如果AP越高,说明模型在判断哪些水......
  • 科普文:Java基础系列【一文搞懂字节、位运算、及其应用】
    概叙字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位‌。通常情况下,一字节等于八位(bit),即1Byte=8bit。(思考一下:为啥这么规定,单位是字节,且是8比特?)字节是计算机技术中最小的可操作存储单位,通常用于描述存储容量和传输容量。‌字节是通过网络传输信息或在硬盘或内......
  • 用一篇文章搞懂什么是电商API
    电商API,即电子商务应用程序编程接口(ElectronicCommerceApplicationProgrammingInterface),是电子商务平台提供给开发者和商家的一种技术接口,它允许第三方应用程序访问和操作平台的数据和服务。下面将从定义、功能、优势、应用场景及文档编写等方面对电商API进行详细解析。......
  • 一文搞懂 Google不同型号TPU显存
    起因:      最近在做具身智能相关的工作,看的多是google的文章,里面频繁出现类似WetrainourpoliciesonaTPUv38x8pod(64TPUv3chips),网上没有找到很清晰地关于不同型号TPU显存大小的说明,于是自己参考前辈的文章和官方文档总结了一份,有错误希望大家及时指出。......
  • 网络编程一>HTTP协议详解,<一文搞懂HTTP协议,抓包工具使用,HTTP协议报头>
    目录:  一.获取HTTP协议: 二.HTTP基本格式及格式内容: 三.HTTP请求"报头"详情(header):  一.获取HTTP协议:一.HTTP是什么HTTP(全称为"超文本传输协议")是⼀种应用非常广泛的应用层协议. 当我们在浏览器中输入⼀个"网址",此时浏览器就会给对应的服务......
  • 一文搞懂编程在密码学与区块链加密中的应用
    ```html 一文搞懂编程在密码学与区块链加密中的应用随着科技的飞速发展,密码学和区块链技术成为了信息安全领域的重要组成部分。它们不仅为数据提供了强大的保护机制,还为金融、医疗、法律等多个行业带来了革命性的变化。本文将深入探讨编程语言如何在这些领域中发挥关键作用。......
  • 大模型入门必读:12本书籍带你搞懂大模型【大模型书籍】
    敢不敢用一年时间读完这12本书,模型入门必看的12本书!建议收藏!!第一本:《基于GPT-3,ChatGPT,GPT-4等Transformer架构的自然语言处理》主要内容了解用于解决复杂语言问题的新技术。将GPT-3与T5、GPT-2和基于BERT的Transformer的结果进行对比使用TensorFlow、PyTorch和GPT-3......
  • 一文搞懂AI大模型的四个核心技术
    前言在日新月异的生成式AI领域,几个核心的专业术语不仅频繁出现在讨论、报告和会议中,更是技术发展的关键驱动力。它们分别是:“PromptEngineering(提示工程)”、“FunctionCalling(函数调用)”、“RAG(检索增强生成)”和“Fine-tuning(微调)。•PromptEngineering(提示工程):提示......
  • 阅记-横向优化-底层架构-《HPC-一文彻底搞懂并发编程与内存屏障》
    目录MomoryOrdering9.2.3.2NeitherLoadsNorStoresAreReordered9.2.3.3StoresAreNotReorderedWithEarlierLoads9.2.3.4LoadsMayBeReorderedwithEarlierStores(intelx64架构下唯一会有memoryreorder的情况)内存屏障的实现参考:HPC(高性能计算第一篇):一文彻......
  • 一篇搞懂c指针
    1、int*p//定义一个指向整型的指针;2、void(*fun)(void);//定义一个函数指针fun(函数的参数为任意类型,返回值为任意类型)。指向函数的指针double*fun(double*p);//声明一个函数fun,函数参数为指向double的指针,函数的返回值也是指向double的指针。3、int(*num[10])(inta);//......