我们盘点了当前RAG系统评估的一些主流方法、工具和评估指标。本文我们针对其中的RAGAS评估方法进行详细介绍。我们将深入其原理,理解其评估指标背后是怎么实现的。都是我根据自己的理解用大白话解释,保证大家能看懂。
- RAGAS论文地址:arxiv.org/pdf/2309.15…
0. 简介及评估指标
RAGAS是一个对检索增强生成(RAG)pipeline进行无参考评估的框架。
考虑标准的RAG设置,即给定一个问题q,系统首先检索一些上下文c(q),然后使用检索到的上下文生成答案as(q)。在构建RAG系统时,通常无法访问人工标注的数据集或参考答案,因此该工作将重点放在 完全独立且无参考的度量指标上。
该方法有四个评估指标:
-
评估检索质量:
- context_relevancy(上下文相关性,也叫 context_precision)
- context_recall(召回性,越高表示检索出来的内容与正确答案越相关)
-
评估生成质量:
- faithfulness(忠实性,越高表示答案的生成使用了越多的参考文档(检索出来的内容))
- answer_relevancy(答案的相关性)
1. 在LangChain中使用
1.1 首先构建你的RAG程序
retriever的构建步骤就不展开了
构建完的代码示例如下:
python
复制代码
from langchain.chains import RetrievalQA
......
# !!!!!主要应用点:RetrievalQA构建的qa_chain的返回结果
qa_chain = RetrievalQA.from_chain_type(
llm,
retriever=retriever,
return_source_documents=True,
)
question = "How did New York City get its name?"
result = qa_chain({"query": question})
关键点:使用RetrievalQA
去获取结果,因为使用RetrievalQA
去获取的结果中包含key:query, result, source_documents,这是LangChain集成的Ragas直接需要的,不用自己再组装数据结构了:
- 上述result中包含query, result, source_documents字段,这三个字段可以直接用来评估出 context_relevancy, faithfulness, answer_relevancy 三个指标,context_recall无法评估
- 要想评估 context_recall 指标,需要人工添加预期的答案,并添加到 result 的key=“ground_truths” 的字段,例如下面的代码
python
复制代码
result_with_truth = result
result_with_truth["ground_truths"] = "XXXXXXXXXXXX"
1.2 评估
- 引入Ragas封装:
RagasEvaluatorChain
- 引入Ragas评估指标
- 构造评估的chain,需传入构造的chain的评估指标类型
- 将上面RAG的结果传入这个评估chain,获得评估结果
python
复制代码
from ragas.langchain.evalchain import RagasEvaluatorChain
from ragas.metrics import (
faithfulness,
answer_relevancy,
context_precision,
context_recall,
)
# create evaluation chains
faithfulness_chain = RagasEvaluatorChain(metric=faithfulness)
answer_rel_chain = RagasEvaluatorChain(metric=answer_relevancy)
context_rel_chain = RagasEvaluatorChain(metric=context_precision)
context_recall_chain = RagasEvaluatorChain(metric=context_recall)
# 获取结果
eval_result = faithfulness_chain(result)
eval_result = answer_rel_chain(result)
eval_result = context_rel_chain(result)
eval_result = context_recall_chain(result_with_truth)
1.3 结果示例
2. 原理
2.1 faithfulness
This measures the factual consistency of the generated answer against the given context. It is calculated from answer and retrieved context. The answer is scaled to (0,1) range. Higher the better.
这衡量了生成的答案在给定上下文中的事实一致性。它是根据答案和检索到的上下文来计算的。答案按比例缩放到(0,1)范围。越高越好。
2.1.1 测量步骤
(1)首先使用LLM来根据问题和答案提取一组语句S。这一步骤的目的是将较长的句子分解为更短、更集中的断言。
该步骤的Prompt如下:
python
复制代码
Given a question and answer, create one or more statements from each sentence in the given answer.
question: [question]
answer: [answer]
(2)针对生成的每个语句s,再次使用大模型或验证函数来判断这个语句是否能用上下文中的信息来支撑。
该步骤的Prompt如下(最后输出Yes或No):
python
复制代码
Consider the given context and following statements, then determine whether they are supported by the information present in the context. Provide a brief explanation for each statement before arriving at the verdict (Yes/No). Provide a final verdict for each statement in order at the end in the given format. Do not deviate from the specified format.
statement: [statement 1]
...
statement: [statement n]
(3)最后分数的计算,计算公式
其中V为可以被支撑的s的数量,S为生成的statement数量。
2.2 answer_relevancy
答案与问题的相关程度。不考虑答案的正确性,但是对答案不完整或包含冗余信息的情况进行惩罚。
2.2.1 测量步骤
(1)根据最终答案,利用大模型生成针对该问题的多个潜在的问题。
Prompt如下:
python
复制代码
Generate a question for the given answer.
answer: [answer]
(2)针对生成的每个潜在问题,利用OpenAI的嵌入模型 text-embedding-ada-002 来计算与原始问题的向量相似度(余弦距离)。
(3)最后分数的计算,计算公式
即最终对所有的向量相似度取个平均数。
2.3 context_relevancy
检索回的上下文与原始问题之间的相关性,对其中的冗余信息进行惩罚
2.3.1 测量步骤
(1)利用大模型,从给定的context上下文信息中,提取出所有对最终答案直接相关或重要的句子,不改变句子内容。
Prompt如下:
python
复制代码
Please extract relevant sentences from the provided context that can potentially help answer the following question. If no relevant sentences are found, or if you believe the question cannot be answered from the given context, return the phrase "Insufficient Information". While extracting candidate sentences you’re not allowed to make any changes to sentences from given context.
(2)最后分数计算,计算公式
即:对答案有用的句子数量 / 上下文中全部句子的数量
2.4 context_recall
论文中没提到这个指标,待查。这个需要认为给定参考答案,在RAGAS评估中比较少用。
3. 其它接口
langchain中的ragas还提供了其它的评估接口,简单看一个。
3.1 批量评估 evaluate()
给定一系列需要测试的输出结果,批量生成评估结果。
python
复制代码
# run the queries as a batch for efficiency
predictions = qa_chain.batch(examples)
# evaluate
print("evaluating...")
r = faithfulness_chain.evaluate(examples, predictions)
# output
[{'faithfulness_score': 1.0},
{'faithfulness_score': 0.5},
{'faithfulness_score': 1.0},
{'faithfulness_score': 1.0},
{'faithfulness_score': 0.8}]
4. 总结
本文详细介绍了RAGAS的原理及在LangChain中的使用方式。对于RAGAS的原理更是用通俗易懂的语言进行了深入讲解,相信大家都能看懂!
从上面的评测步骤可以看到,RAGAS各个指标的评测都依赖了大模型的能力。所以也会有一定的不稳定性。
如何系统的去学习大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
阶段1:AI大模型时代的基础理解
- 目标:了解AI大模型的基本概念、发展历程和核心原理。
- 内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践 - L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
- 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
- 内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例 - L2.2 Prompt框架
- L2.2.1 什么是Prompt
- L2.2.2 Prompt框架应用现状
- L2.2.3 基于GPTAS的Prompt框架
- L2.2.4 Prompt框架与Thought
- L2.2.5 Prompt框架与提示词 - L2.3 流水线工程
- L2.3.1 流水线工程的概念
- L2.3.2 流水线工程的优点
- L2.3.3 流水线工程的应用 - L2.4 总结与展望
- L2.1 API接口
阶段3:AI大模型应用架构实践
- 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
- 内容:
- L3.1 Agent模型框架
- L3.1.1 Agent模型框架的设计理念
- L3.1.2 Agent模型框架的核心组件
- L3.1.3 Agent模型框架的实现细节 - L3.2 MetaGPT
- L3.2.1 MetaGPT的基本概念
- L3.2.2 MetaGPT的工作原理
- L3.2.3 MetaGPT的应用场景 - L3.3 ChatGLM
- L3.3.1 ChatGLM的特点
- L3.3.2 ChatGLM的开发环境
- L3.3.3 ChatGLM的使用示例 - L3.4 LLAMA
- L3.4.1 LLAMA的特点
- L3.4.2 LLAMA的开发环境
- L3.4.3 LLAMA的使用示例 - L3.5 其他大模型介绍
- L3.1 Agent模型框架
阶段4:AI大模型私有化部署
- 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
- 内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
学习计划:
- 阶段1:1-2个月,建立AI大模型的基础知识体系。
- 阶段2:2-3个月,专注于API应用开发能力的提升。
- 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
- 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓