链载Ai

标题: RAG测评关键指标 [打印本页]

作者: 链载Ai    时间: 6 小时前
标题: 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密钥和baseURL进行自定义调用。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=("Youareanassistantforquestion-answeringtasks.""Usethefollowingpiecesofretrievedcontexttoanswer""thequestion.Ifyoudon'tknowtheanswer,saythatyou""don'tknow.Usethreesentencesmaximumandkeepthe""answerconcise.""\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)fromdatasetsimportDatasetfromragasimportevaluatefromragas.metricsimport(faithfulness,answer_relevancy,context_recall,context_precision,)#示例问题questions=["question1","question2","question3"]#真实答案ground_truths=[["true_answer1"],["true_answer2"],["true_answer3"]]#存储推导的答案和上下文answers=[]contexts=[]#迭代每个问题,生成答案并获取相关上下文forqueryinquestions:#生成答案answer=rag_chain.invoke(query)answers.append(answerifisinstance(answer,str)elseanswer['text'])#获取与问题相关的文档内容relevant_docs=retriever.get_relevant_documents(query)contexts.append([doc.page_contentfordocinrelevant_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,],)#将结果转换为PandasDataFrame格式df=result.to_pandas()print(df)


3.2 RAGAs效果展示



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






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5