十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

深度测评 RAG 应用评估框架:指标最全面的 RAGas

深度测评 RAG 应用评估框架:指标最全面的 RAGas 前言大家常说 RAG 应用是一周出 demo半年用不好。那么怎么评估 RAG 应用是否能够上生产了呢如果公司人手足够当然可以人工测试评估准确性但指标未免单一。本文介绍一个全自动化的 rag 应用评估框架 ragas。RAGasRAG Assessment)[1]RAG 评估的缩写是一个专门的解决方案用于评估、监控和提升生产环境中大语言模型LLM和检索增强生成RAG应用的性能包括用于生产质量监控的定制模型。它除了评估还能从数据集中生成测试集这将极大地降低人力投入毕竟一个良好的数据集构建是非常消耗时间和人力的。RAGas 从生成和检索两个维度评估 RAG 应用如下图所示。生成角度可以从忠实性 faithfulness 和回答相关性 answer relevancy 评估而检索则从上下文精度context precision和上下文召回context recall上来测评。当然 ragas 不止这四种评测还有答案准确性answer correctness上下文利用率context utilization上下文实体召回率context entity recall和噪声敏感度noise sensitivity等。后面会专门叙述常见的几种指标的计算。在开始评估之前我们先安装 ragas。pip install ragas安装好之后我们要如何评估 RAG 呢拿什么评估这就必须要说如何准备评估数据集。1. 准备评估数据集RAGas 需要的评估数据集格式如下data_samples{question:[第一届超级碗是什么时候举行的,谁赢得了最多的超级碗冠军],answer:[第一届超级碗于1967年1月15日举行,赢得最多超级碗冠军的是新英格兰爱国者队],contexts:[[第一届 AFL-NFL 世界冠军赛是一场美式橄榄球比赛于1967年1月15日在洛杉矶纪念体育馆举行],[绿湾包装工队...位于威斯康星州绿湾市。,包装工队参加...全国橄榄球联合会比赛]],ground_truth:[第一届超级碗于1967年1月15日举行,新英格兰爱国者队赢得了创纪录的六次超级碗冠军]}包含 4 个字段分别是question、answer、contexts和ground_truth。每一项都是一个数组列表要注意的是答案、上下文和基本事实和问题列表是一一对应的即第一个问题的答案也必须是 answer 中的第一个元素同时也必须是上下文和基本事实的第一个元素。其中上下文的每个元素都是一组字符串数组这是因为每个问题都可以有多个上下文。如果你人力资源足够的话我们可以手动构建这个数据集假设你有问题列表和基本事实列表这一个不是必须回答就由你自己的 RAG 应用根据问题来填充上下文也由你的 RAG 应用填充。此外我们也可以使用 ragas 根据数据集自动构建。因为要读入数据这里需要先安装 langchain 或者 llamaindex 来支持数据的读入。pip install langchain-community0.2.17pip install unstructured0.15.13然后使用如下代码读入数据。fromlangchain_community.document_loadersimportDirectoryLoader loaderDirectoryLoader(/Projects/graphrag/input)documentsloader.load()fordocumentindocuments:document.metadata[filename]document.metadata[source]既然要生成数据集当然需要大语言模型的支持了也需要 embedding 模型支持这里采用 DeepSeek 和智谱的在线模型 API。fromlangchain_openaiimportChatOpenAI,OpenAIEmbeddings generator_llmChatOpenAI(modeldeepseek-chat,openai_api_basehttps://api.deepseek.com/v1,openai_api_keyxxxx)critic_llmChatOpenAI(modeldeepseek-chat,openai_api_basehttps://api.deepseek.com/v1,openai_api_keyxxxx)embeddingsOpenAIEmbeddings(openai_api_basehttps://open.bigmodel.cn/api/paas/v4,openai_api_keyxxxx,embedding_ctx_length512,chunk_size512,modelembedding-3)注意必须配置这些选项不然它默认就是访问 OpenAI 的模型。然后就是使用 ragas 框架的 API 来生成测试集了首先初始化测试集生成器。generatorTestsetGenerator.from_langchain(generator_llm,critic_llm,embeddings)然后调用 APIgenerate_with_langchain_docs准备生成参数为读取的 documents生成的数据集条数 test_size 以及生成问题的分布如简单的占比 0.5推理的 0.25 以及多个上下文的 0.25。testset:TestDatasetgenerator.generate_with_langchain_docs(documents,test_size10,distributions{simple:0.5,reasoning:0.25,multi_context:0.25})然后我们将生成的数据集保存以备后用。dstestset.to_dataset()ds.save_to_disk(./activity_testset)生成的数据大概如下所示。ragas 在生成数据集上还可以配置问题的难易分布。理想的评估数据集应涵盖生产中遇到的各种类型的问题包括不同难度级别的问题。大语言模型LLMs通常不擅长生成多样化的样本因为它们倾向于遵循常见路径。ragas 受 Evol-Instruct[2] 等作品的启发采用了一种进化生成范式系统地从提供的文档集创建具有不同特征的问题如推理、条件、多个上下文等。这种方法确保了对管道中各个组件性能的全面覆盖从而实现更稳健的评估过程原理如下图所示。但我要说的是ragas 在生成数据集非常不完善很难生成全靠运气经常报 Connection 错误而 API 明明可以连接。另外一点是所使用的Prompt 都是英文有几率生成一些英文问题即使你的输入文档是中文的。虽然你可以通过 Prompt adapation 进行本地化但 ragas 里对于 json 的处理非常简单不会做任何解析增强所以生成的东西也用不了除非手工修改。看了一些 ragas 代码感觉写的不咋的但他们的评估指标和思路是挺好的。生成测试集搞了我一周魔改代码都没能解决一堆报错搞得我一肚子火。今天发布了最新版本 v0.2.0已经和上述代码不兼容了。还没空测评不知道新版本是否有解决希望给力点吧。2. 开始评估上节已经提到生成数据集功能缺陷太多所以这里为了演示我们使用官方 Demo 中的数据集。2.1 加载数据集fromdatasetsimportDataset,load_datasetdefload_amnesty_qa()-Dataset:# loading the V2 datasetamnesty_qaload_dataset(explodinggradients/amnesty_qa,english_v2)print(amnesty_qa[eval].column_names)# [question, ground_truth, answer, contexts]# amnesty_qa[eval][contexts]returnamnesty_qa[eval]datasetload_amnesty_qa()2.2 评估忠实性计算 Faithfulness 就是计算忠实性。首先将答案分拆为几个声明简单理解为句子也行然后判断每个句子是否可以从上下文 contexts 中推断出来如果出现过则认为是忠实的。比如将答案拆分为 3 个 claims然后从 context 中判断有几个可以推断出来假设为 2那么忠实性就是 2/3。它需要回答和上下文。fromragas.metricsimportfaithfulness,answer_relevancy,context_precision,context_recall,context_entity_recallfromragasimportevaluatedefmetric_faithfulness():scoreevaluate(dataset,metrics[faithfulness],llmgenerator_llm,embeddingsembeddings)print(score.to_pandas())metric_faithfulness()评估忠实性如下表所示。2.3 评估答案相关性计算答案的相关性 Answer relevancy它基于答案推测出多个问题然后计算用户问题和推测出的问题的相关性也就是嵌入的相似度然后取平均值从而得出相关性。它也需要回答和问题。defmetric_answer_relevancy():scoreevaluate(dataset,metrics[answer_relevancy],llmgenerator_llm,embeddingsembeddings)print(score.to_pandas())metric_answer_relevancy()评估结果如下表所示。2.4 上下文精度计算上下文精度 Context Precision即召回的 K 个 Chunk 中到底多少是和问题、真实答案相关的。然后基于此计算一个精度的分数。它需要问题、基本事实和上下文。defmetric_context_precision():scoreevaluate(dataset,metrics[context_precision],llmgenerator_llm,embeddingsembeddings)print(score.to_pandas())metric_context_precision()评估结果如下表所示。2.5 上下文召回率计算上下文召回率 Context Recall衡量检索到的上下文与作为基本事实的一致程度。从基本事实中提取出 Claims然后判断每一个 Claims 是否可以从检索出的上下文中推断出来然后计算推断出的 claims 数量和总 claims 数量。它需要问题、基本事实、上下文。defmetric_context_recall():scoreevaluate(dataset,metrics[context_recall],llmgenerator_llm,embeddingsembeddings)print(score.to_pandas())评估结果如下表所示。2.6 计算上下文实体召回率计算上下文中实体召回 Context Entities Recall分别从 Context 和基本事实中提取出实体然后从中找出实体的交集并和基本事实中的实体数量做比得出一个实体召回率。它需要上下文和基本事实。defmetric_context_entities_recall():scoreevaluate(dataset,metrics[context_entity_recall],llmgenerator_llm,embeddingsembeddings)print(score.to_pandas())评估结果如下表所示。3. 总结本文介绍了如何使用 ragas 生成测试集介绍了多个常用的 RAG 评估指标。本文生成测试集部分代码基于 ragas v0.1 版本编写具有较多问题根本无法使用升级 v0.2.0 后出现代码兼容问题无法运行后续等我更新吧。评估部分 v0.2.0 是兼容的并且我在 v0.1 下评估会报错类似n1, API Connection Error等问题在升级后完美解决了也没有出现指标 NaN 或者 0 的情况推荐使用。最后的最后感谢你们的阅读和喜欢我收藏了很多技术干货可以共享给喜欢我文章的朋友们如果你肯花时间沉下心去学习它们一定能帮到你。因为这个行业不同于其他行业知识体系实在是过于庞大知识更新也非常快。作为一个普通人无法全部学完所以我们在提升技术的时候首先需要明确一个目标然后制定好完整的计划同时找到好的学习方法这样才能更快的提升自己。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】大模型知识脑图为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。经典书籍阅读阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表