RAG测评关键指标

科技   2024-09-25 18:53   北京  

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

©作者|CodeDan

来源|神州问学

一、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 Datasetfrom ragas import evaluatefrom 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
围绕生成式AI技术的交流社区,与开发者和合作伙伴共同探究有深度的生成式AI技术前沿洞见、技术迭代、案例解析、方法和实践,助力企业的数字化转型
 最新文章