当前位置: 首页 > news >正文

使用自定义LLM:RAGAs评估

当我们完成了一个RAG系统的开发工作以后,我们还需要对RAG系统的性能进行评估,如何评估呢?

可以用 <RAGAs>

RAGAs (Retrieval-Augmented Generation Assessment) 它是一个框架 GitHub文档,它可以快速评估 RAG系统 两个方面的性能: <生成> 和 <检索>

一、RAG评估指标

常用的五个指标如下:

生成的两个指标

  • 忠实度(faithfulness)
  • 答案相关性(Answer relevancy)

检索的三个指标

  • 上下文精度(Context precision)
  • 上下文召回率(Context recall)
  • 上下文相关性(Context relevancy)
    这些指标都啥关系啊?

1.1 忠实度/可信度

忠实度(faithfulness):衡量了生成的答案(answer)与给定上下文(context)的事实一致性。取值范围是 (0,1) 越高越好。

  • 上下文:中华人民共和国,简称“中国”,成立于1949年10月1日,是工人阶级领导的的社会主义国家
  • 问题:中国的成立时间?
  • 回答1:中国成立于1949年10月1日(可信度 )
  • 回答2:中国成立于1949年10月3日(可信度 )


回答错误,可信度直接降为0.

1.2 答案相关性

答案相关性(Answer relevancy):评估生成的答案(answer)与用户问题(question)之间相关程度。越是不完整或包含冗余信息的答案,得分越低,得分越高表示相关性越好。取值范围是 (0,1) 。

  • 上下文:中华人民共和国,简称“中国”,成立于1949年10月1日,是工人阶级领导的的社会主义国家
  • 问题:中国的成立时间?
  • 回答1:中国成立于1949年10月1日(相关性 )
  • 回答2:成立于1949年,是社会主义国家(相关性 )


回答不完整&多回答了国家的性质,相关性降低。

1.3 上下文精度

上下文精度(Context precision):评估所有在上下文(contexts)中呈现的与基本事实(ground-truth)相关的条目是否排名较高。该指标使用question和计算contexts,值范围在 0 到 1 之间,其中分数越高表示精度越高。

1.4 上下文召回率

上下文召回率(Context recall):衡量检索到的上下文(Context)与人类提供的真实答案(ground truth)的一致程度。

根据ground truth和检索到的Context计算,值范围在 0 到 1 之间,其中分数越高表示精度越高。

1.5 上下文相关性

上下文相关性(Context relevancy):衡量检索到的上下文(Context)和用户问题(question)的相关性。

根据用户问题(question)和上下文(Context)计算得到,并且取值范围在 0 到 1 之间,值越高表示相关性越好。

二、RAGAs评测

2.1 自定义LLM

Ragas默认使用ChatGPT,需要提前配置openai-Key,如果没有,就用自定义的智谱AI

from langchain_community.chat_models import ChatZhipuAI
from langchain_community.embeddings import ZhipuAIEmbeddings
from ragas.llms import LangchainLLMWrapper
from ragas.embeddings import LangchainEmbeddingsWrapper
import os
os.environ["ZHIPUAI_API_KEY"] = "Your_API_KEY"zhipu_chat = ChatZhipuAI(model='glm-4')
zhipu_embedding = ZhipuAIEmbeddings(model="embedding-3")zhipu_llm = LangchainLLMWrapper(zhipu_chat)
zhipu_embeddings = LangchainEmbeddingsWrapper(zhipu_embedding)

这是智谱AI支持的 语言模型向量模型

2.2 构建evalset

import pandas as pd
from datasets import Dataset# 使用 Pandas 创建 DataFrame
data = {"question":["中国的成立时间?","中国的成立时间?","中国的成立时间?"],"answer":["中国成立于1949年10月1日","中国成立于1949年10月3日","成立于1949年,是社会主义国家"],"contexts":["中华人民共和国,简称“中国”,成立于1949年10月1日,是工人阶级领导的的社会主义国家","中华人民共和国,简称“中国”,成立于1949年10月1日,是工人阶级领导的的社会主义国家","中华人民共和国,简称“中国”,成立于1949年10月1日,是工人阶级领导的的社会主义国家"],"reference":["中国成立于1949年10月1日","中国成立于1949年10月1日","中国成立于1949年10月1日"]
}
df = pd.DataFrame(data)
print(df.head())
# 将 evalsets 列表转换为字典格式
evalsets = [{"user_input": row["question"],  # 使用 question 作为 user_input"reference": row['reference'],      # 使用 answer 作为 reference"query": row["question"],"answer": row["answer"],"retrieved_contexts": [row["contexts"]]}for index, row in df.iterrows()
]# 将 evalsets 列表转换为 Dataset 对象
evalsets = Dataset.from_list(evalsets)
print(evalsets)

2.3 一键评测

选择需要的评测指标,使用自定义LLM

# 然后重新指定各评价指标使用的llm
from ragas import evaluate
from ragas.metrics import (answer_relevancy,faithfulness,context_recall,context_precision,    
)faithfulness.llm = zhipu_llm
answer_relevancy.llm = zhipu_llm
answer_relevancy.embeddings = zhipu_embeddings
context_recall.llm = zhipu_llm
context_precision.llm = zhipu_llm# 重新一键式测评
result = evaluate(evalsets,metrics=[ faithfulness,answer_relevancy,context_precision,context_recall,],
)df = result.to_pandas()
df.head()

参考链接

  1. ragas官方文档
  2. 高级RAG(四):Ragas评估
  3. RAG效果评估:Ragas使用自定义LLM

http://www.mrgr.cn/news/70436.html

相关文章:

  • 网络安全应急响应及其发展方向
  • 【redis 】string类型详解
  • ue5第三人称闯关游戏学习(一)
  • 前端HTML
  • Vue.js 学习总结(17)—— Vue3 的 5 个组合式 API 方法详解
  • 【微服务】RabbitMQ与SpringAMQP消息队列
  • Spring的XML配置:从“啊这...“到“啊,就这...“ --手写Spring第六篇了
  • 香港SEO服务器备份解决方案及注意事项
  • 紫光展锐携手上赞随身Wi-Fi,让5G触手可及
  • 【智谱开放平台-注册/登录安全分析报告】
  • 线代的几何意义(3)——行列式与矩阵的逆
  • 智能检测技术与传感器(热电传感器四个定律)
  • 安装阿里巴巴的Dragonwell(替代JDK)
  • C++的起源与发展
  • 5. 类加载子系统
  • 多模态融合-决策层融合
  • Git - 命令杂谈 - fetch与push
  • 如何在本地文件系统中预览 Vue 项目?
  • AVL 树的模拟实现(入门必看,图文并茂)
  • linux 下调试 mpu6050 三轴加速度
  • 某《财富》世界500强制造企业基于大模型实现财税智能问数
  • OmniGen: Unified Image Generation(代码的学习)
  • 前端常用时间操作汇总
  • 二分查找题目:x 的平方根
  • [分享]分享一下我用了十几年的按键扫描方法
  • 北京大学、华为公司联合发布《中国城市治理数字化转型报告(2024)》49页PDF附下载