ChatGPT 人工智能 GPT4 伦理 生成式 医疗 监管 安全 机器学习 深度学习 神经网络 计算机视觉 强化学习 模型 算法 应用 开发 研究 工具 平台 框架 数据集 训练 部署 安全 合规 培训 投资 LLM,llm AI,ai,Ai 大模型 大语言模型 制图 生图 绘图 文生图 文生视频 生成式AI AGI 世界模型 sora chatGPT,chatgpt,ChatGpt claude openai Llama deepseek midjourney 红熊猫模型 Red panda,panda Stable Diffusion,StableDiffusion,stable DALL- E 3 DALL E DALL Flux,flux 扩散模型 混元大模型 文心一言 通义千问 可灵 Pika PixelDance 豆包 月之暗面 零一万物 阶跃星辰 搜索增强 MiniMax Talkie Agent prompt fastai LangChain TTS 微调 提示词 知识库 智能体
# 热门搜索 #
搜索
RAG测评关键指标
2885点击    2024-10-11 10:06

解读RAG测评:关键指标与应用分析


一、RAG介绍


1.1 简介


RAG(Retrieval-Augmented Generation)是一种结合信息检索与文本生成的技术,旨在提高大型语言模型(LLM)在回答复杂查询时的表现。它通过检索相关的上下文信息来增强生成答案的质量和准确性。


想象一下,你在准备一场关于某个冷门历史事件的演讲,但你不太了解细节。你有一个很聪明的助手(相当于大型语言模型,LLM),但他也不是万能的,需要查阅外部信息来给出最好的答案。


这时候,RAG 就像是你的智能助手工作流程,它分成两个步骤:


1. 检索:助手先从图书馆或网上找出与这个历史事件相关的几篇文章或资料(这就是检索部分,它从外部数据源中找到相关的信息)。


2. 生成:助手读了这些资料后,再根据你给的提示(比如:“这个事件的关键人物是谁?”),结合刚刚找到的资料,生成一个完整、准确的回答告诉你。


通俗来说,RAG 就是让智能助手先去查资料,再根据资料来生成答案,而不是仅仅凭借它自己原有的知识作答。这样能让回答更准确,特别是对于冷门或专业领域的问题。


1.2 RAG的问题以及关注点


但是RAG也不是万能的,通常他们在检索质量和生成质量上需要我们着重关注。让我们在原来的例子中来体会一下这两个问题。


在检索质量上,助手从图书馆找到了几本书或文章,但其中一些信息可能并不完全相关,甚至有很多不必要的噪声。如果助手不能准确挑选出最有价值的内容,就可能导致生成的答案不准确或不连贯。因此,检索器必须确保找到的资料高度相关,避免噪声和无关信息的干扰,否则会直接影响到生成环节的表现。


在生成质量上,即使检索器找到了相关的资料,助手如何将这些资料转化为一个连贯、准确的回答仍然是个挑战。如果助手在生成答案时信息混乱或缺乏逻辑,就会降低最终的回答质量。因此,生成器需要有能力根据检索到的信息进行高质量的回答生成,并且还要能适应特定领域的问题。


通常来说,生成质量在很大程度上取决于模型的智能水平。像 GPT-4 或 GPT-1o 这样的高级模型,通常能提供较高的生成质量,确保答案的准确性和连贯性。


因此,我们的重点更多集中在检索质量上。那么,如何判断检索出的信息是否满足需求呢?


二、检索质量关键测评指标


这篇论文《生成式搜索引擎中验证性评估》的思路非常贴近我们讨论的主题,尤其是在评估生成内容的可验证性方面。其内容总结下来就是一论点,四指标,两算法。


2.1 一个论点


论文中的一个观点——成熟的可信赖的生成式搜索引擎(Generative Search Engine, GSE)的先决条件是可验证性(verifiability)。理想的 RAG 系统应该具备以下特征:


• 高引用召回率(high citation recall):所有生成内容都有充分的外部知识支持。


• 高引用精度(high citation precision):每个引用确实支持生成的内容。


然而,研究表明,这两个指标不可能达到 100%。根据实验结果,现有的 GSE 经常生成无据陈述和不准确的引文,分别达到 51.5% 和 74.5%。


2.2 四个指标


并且论文采用了四个指标来进行评估:


1. 流畅性(fluency):生成文本是否流畅连贯,使用五点李克特量表进行评分,从“强烈不同意”到“强烈同意”。


2. 实用性(perceived utility):生成内容的有用性,评测者对“这个回答对查询是有帮助且信息丰富的”这一说法的同意程度进行评分。


3. 引文召回率(citation recall):引文支持的生成内容与总生成内容的比例,类似于上下文支持率的概念。


4. 引文精度(citation precision):与特定主题相关的文献数量与检索到的内容的比例,接近于上下文有效率的概念。


2.3两个算法


为了综合考虑精确率和召回率,论文中引入了 F1 分数和 F2 分数:


F1 分数:精确率和召回率的调和平均数,适用于数据不平衡的情况,能够更全面地反映模型性能。



F2 分数:通过引入参数 β,允许调整精确率和召回率的相对重要性。比如β<1时,意味着精确率大于召回率,反之精确率大于召回率。



这些分数能够更准确地评估模型的性能,尤其是在面对不平衡数据时,提供比单纯准确率更有价值的见解。


三、RAG评测的具体方法RAGAs


3.1 RAGAs框架介绍


RAGAs (Retrieval-Augmented Generation Assessment) 是一个评估框架,专注于分析 RAG 系统在检索和生成环节的性能。它评估检索系统识别相关上下文段落的能力,以及大语言模型(LLM)在生成中如何有效利用这些段落。此外,RAGAs 还关注生成内容的质量。


为了评估 RAG 流程,RAGAs 需要以下几类数据:



RAGAs 提供多个指标来从组件和整体流程两个层面评估 RAG 系统的性能。所有指标的评分范围在 0 到 1 之间,分数越高代表性能越好。


组件层面的指标:



3.2 RAGAs实际代码演示


# 创建一个 GPT-4 小模型实例,用于生成对话。可以通过指定 API 密钥和 base URL 进行自定义调用。
model = ChatOpenAI(model="gpt-4o-mini", openai_api_key="",openai_api_base="",temperature=1)
# 加载博客文章或其他文本数据。
loader = TextLoader("your_name")
documents = loader.load()
# 使用字符分割器将文本按 1000 个字符大小进行切片,且切片之间不重叠。
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)
# 将切片后的文本数据向量化,以便于后续的检索操作。
embeddings = OpenAIEmbeddings(model="text-embedding-3-large",openai_api_key="", openai_api_base="")
# 将向量化后的文档存入 FAISS 向量存储中,便于进行相似度检索。
vectorstore = FAISS.from_documents(texts, embeddings)
# 将向量存储转换为检索器,使其能够基于嵌入向量进行文档检索。
retriever = vectorstore.as_retriever()
# 设置系统提示,告诉模型其角色是基于检索的上下文回答问题,且答案需要简洁。
system_prompt = ( "You are an assistant for question-answering tasks. "
"Use the following pieces of retrieved context to answer "
"the question. If you don't know the answer, say that you "
"don't know. Use three sentences maximum and keep the "
"answer concise."
"\n\n"
"{context}"
)
# 定义一个对话提示模板,包含系统消息和用户输入部分。将检索到的上下文嵌入到回答逻辑中。
prompt = ChatPromptTemplate.from_messages(
[
("system", system_prompt),
("human", "{input}"),
]
)
# 创建用于文档处理的 QA 链(基于检索内容回答问题的链条)。
question_answer_chain = create_stuff_documents_chain(model, prompt)
# 将检索器整合进问答链,形成一个完整的 RAG(检索增强生成)链,用于实现基于检索的生成式问
答。
rag_chain = create_retrieval_chain(retriever, question_answer_chain)
from datasets import Dataset
from ragas import evaluate
from ragas.metrics import (
faithfulness, answer_relevancy, context_recall, context_precision,
)
# 示例问题
questions = ["question1", "question2", "question3"]
# 真实答案
ground_truths = [["true_answer1"], ["true_answer2"], ["true_answer3"]]
# 存储推导的答案和上下文
answers = []
contexts = []
# 迭代每个问题,生成答案并获取相关上下文
for query in questions:
# 生成答案
answer = rag_chain.invoke(query)
answers.append(answer if isinstance(answer, str) else answer['text'])
# 获取与问题相关的文档内容
relevant_docs = retriever.get_relevant_documents(query)
contexts.append([doc.page_content for doc in relevant_docs])
# 将数据转换为字典形式
data = { "question": questions, "answer": answers, "contexts": contexts, "ground_truths": ground_truths
}
# 创建数据集
dataset = Dataset.from_dict(data)
# 评估结果
result = evaluate(
dataset=dataset, metrics=[
context_precision, context_recall, faithfulness, answer_relevancy,
],
)
# 将结果转换为 Pandas DataFrame 格式
df = result.to_pandas()
print(df)


3.2 RAGAs效果展示



这些指标为衡量 RAG 系统在检索和生成环节的表现提供了标准,能够帮助判断 RAG 流程的性能是否有所提升。


参考内容:


[1] Chen, J., Lin, H., Han, J., & Sun, Y. (2023). 在检索增强生成中对大型语言模型进行基准测试. arXiv preprint arXiv:2309.01431v2. 


https://doi.org/10.48550/arXiv.2309.01431


[2] Riedel, S., Kiela, D., Lewis, P., & Piktus, A. (2020). Retrieval Augmented Generation: Streamlining the creation of intelligent natural language processing models. Meta AI Blog. 


https://ai.meta.com/blog/retrieval-augmented-generation-streamlining-the-creation-of-intelligent-natural-language-processing-models/


[3] Liu, N. F., Zhang, T., & Liang, P. (2023).

评估生成搜索引擎的可验证性. arXiv预印本, arXiv:2304.09848v2. 


https://doi.org/10.48550/arXiv.2304.09848


文章来自于微信公众号“智见AGI”,作者“CodeDan”


关键词: AI , RAG , 大模型 , 人工智能
AITNT资源拓展
根据文章内容,系统为您匹配了更有价值的资源信息。内容由AI生成,仅供参考
1
AI工作流

【开源免费】n8n是一个可以自定义工作流的AI项目,它提供了200个工作节点来帮助用户实现工作流的编排。

项目地址:https://github.com/n8n-io/n8n

在线使用:https://n8n.io/(付费)


【开源免费】DB-GPT是一个AI原生数据应用开发框架,它提供开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单、更方便。

项目地址:https://github.com/eosphoros-ai/DB-GPT?tab=readme-ov-file



【开源免费】VectorVein是一个不需要任何编程基础,任何人都能用的AI工作流编辑工具。你可以将复杂的工作分解成多个步骤,并通过VectorVein固定并让AI依次完成。VectorVein是字节coze的平替产品。

项目地址:https://github.com/AndersonBY/vector-vein?tab=readme-ov-file

在线使用:https://vectorvein.ai/(付费)

2
RAG

【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。

项目地址:https://github.com/microsoft/graphrag

【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。

项目地址:https://github.com/langgenius/dify


【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。

项目地址:https://github.com/infiniflow/ragflow/tree/main


【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目

项目地址:https://github.com/phidatahq/phidata


【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。

项目地址:https://github.com/TaskingAI/TaskingAI

3
AI搜索

【开源免费】MindSearch是一个模仿人类思考方式的AI搜索引擎框架,其性能可与 Perplexity和ChatGPT-Web相媲美。

项目地址:https://github.com/InternLM/MindSearch

在线使用:https://mindsearch.openxlab.org.cn/


【开源免费】Morphic是一个由AI驱动的搜索引擎。该项目开源免费,搜索结果包含文本,图片,视频等各种AI搜索所需要的必备功能。相对于其他开源AI搜索项目,测试搜索结果最好。

项目地址:https://github.com/miurla/morphic/tree/main

在线使用:https://www.morphic.sh/

4
prompt

【开源免费】LangGPT 是一个通过结构化和模板化的方法,编写高质量的AI提示词的开源项目。它可以让任何非专业的用户轻松创建高水平的提示词,进而高质量的帮助用户通过AI解决问题。

项目地址:https://github.com/langgptai/LangGPT/blob/main/README_zh.md

在线使用:https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0