当前位置:   article > 正文

使用 RAGAs(检索增强生成评估)评估 RAG 应用_ragas document

ragas document

原文地址:Evaluating RAG Applications with RAGAs

一个包含指标和大型语言模型生成的数据框架,用于评估您的检索增强生成管道的性能。

2023 年 12 月 13 日

Stylized performance dashboard for Retrieval-Augmented Generation

到目前为止,我们知道为检索增强生成 (RAG) 的应用程序构建概念验证很容易,但要将其实际应用到生产环境中则非常困难。由于 RAG 流程中包含不同的组件,因此要使 RAG 系统的性能达到令人满意的状态尤其困难:

  • 检索器组件: 为LLM从外部数据库中检索额外的上下文,以便回答查询。
  • 生成器组件: 根据使用检索到的信息来增强提示(prompt)并生成答案。

评估 RAG 流程时,您必须单独和一起评估两个组件,以了解 RAG 流程是否以及在哪些方面仍需要改进。此外,要了解 RAG 应用程序的性能是否有所改善,您必须对其进行定量评估。为此,您需要两个要素:评估指标和评估数据集。

目前,确定正确的评估指标并收集良好的验证数据是一个活跃的研究领域。由于这是一个快速发展的主题,我们目前正在见证各种 RAG 评估框架方法的出现,例如RAG Triad of MetricsBLEU [1] 评估 RAG 系统。RAGA [1]。本文将重点介绍如何使用 RAGA 和 、ARESROUGE

什么是 RAGA

RAGAs(Retrieval-Augmented Generation Assessment,检索增强生成评估)是一个框架(GitHub,文档),可提供必要的工具,帮助在组件层面评估 RAG 流程。

评估数据

RAGAs 的有趣之处在于,最初是作为一种无需参照标准的评估框架而设计的 [1]。这意味着,RAGAs 不需要依赖评估数据集中人工标注的标准答案,而是利用底层的大语言模型进行评估。

为了对 RAG 流程进行评估,RAGAs 需要以下几种信息:

  • question:RAG 流程的输入,即用户的查询问题。
  • answer:RAG 流程的输出,由RAG流程生成的答案。
  • contexts:为解答 question 而从外部知识源检索到的相关上下文。
  • ground_truthsquestion 的标准答案,这是唯一需要人工标注的信息。这个信息仅在评估 context_recall 这一指标时才必须(详见 评估指标)。

利用 LLM 进行无参考评估是一个活跃的研究课题。虽然尽可能少地使用人工标注数据会使得评估方法变得成本更低、速度更快,但仍有一些关于其缺点(如偏差)的讨论[3]。不过,一些论文已经显示出了有希望的成果[4]。详细信息请参见 RAGAs [1] 论文的 "相关工作 "部分。

外,该框架还为您提供了用于自动测试数据生成的工具。

评估指标

RAGA 为您提供了一些指标来按组件和端到端评估 RAG 系统。

组件级别,,RAGAs 提供了评价检索组件(包括context_relevancycontext_recall)和生成组件(涉及faithfulnessanswer_relevancy)的专门指标 [2]:

  • 上下文精度 :测量检索到的上下文的信噪比。该指标是使用 question 和 contexts 计算的。
  • 上下文召回率 : 衡量是否检索到回答问题所需的所有相关信息。该指标是根据 ground_truth(这是框架中唯一依赖人工注释的地面真实标签的指标)和 contexts 计算的。
  • 真实性:衡量生成答案的事实准确性。给定上下文中正确陈述的数量除以生成答案中的陈述总数。该指标使用 questioncontexts 和 answer
  • 答案相关性:衡量生成的答案与问题的相关程度。该指标是使用 question 和 answer 计算的。例如,答案“法国位于西欧”。对于问题“法国在哪里,它的首都是什么?”的答案相关性较低,因为它只回答了问题的一半。

所有指标都缩放到范围 [0, 1],值越高表示性能越好。

RAGA 还为您提供评估 RAG系统的指标端到端,例如答案语义相似性答案正确性。本文主要讨论的是组件层面的评价指标。

使用 RAGAs 评估 RAG 应用

本节将通过 RAGAs 工具来评估一个最基础的 RAG(检索增强生成)流程。目的是向您展示如何使用 RAGA 并让您直观地了解其评估指标。

准备工作

请确保你已经安装了以下 Python 包:

  • langchainopenai 和 weaviate-client,用于搭建 RAG 流程
  • ragas,用于评估 RAG 流程
!pip install langchain openai weaviate-client ragas

此外,你需要在根目录下的 .env 文件中设置相关环境变量。要获取 OpenAI 的 API 密钥,你需要注册 OpenAI 账号,并在 API keys 页面创建新的密钥。

OPENAI_API_KEY="\<YOUR_OPENAI_API_KEY>"

搭建 RAG 应用

在评估 RAG 应用之前,首先需要进行设置。我们这里使用一个基础版的 RAG 流程。关于详细的设置过程,可以参考以下链接中的文章。

检索增强生成 (RAG): 从理论到 LangChain 实现

首先,准备数据,包括加载文档和进行数据分块。

  1. import requests
  2. from langchain.document_loaders import TextLoader
  3. from langchain.text_splitter import CharacterTextSplitter
  4. url = "https://raw.githubusercontent.com/langchain-ai/langchain/master/docs/docs/modules/state_of_the_union.txt"
  5. res = requests.get(url)
  6. with open("state_of_the_union.txt", "w") as f:
  7. f.write(res.text)
  8. # Load the data
  9. loader = TextLoader('./state_of_the_union.txt')
  10. documents = loader.load()
  11. # Chunk the data
  12. text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
  13. chunks = text_splitter.split_documents(documents)

然后,使用 OpenAI 的嵌入模型为每个数据块生成向量嵌入,并存储在向量数据库中。

  1. from langchain.embeddings import OpenAIEmbeddings
  2. from langchain.vectorstores import Weaviate
  3. import weaviate
  4. from weaviate.embedded import EmbeddedOptions
  5. from dotenv import load_dotenv,find_dotenv
  6. # Load OpenAI API key from .env file
  7. load_dotenv(find_dotenv())
  8. # Setup vector database
  9. client = weaviate.Client(
  10. embedded_options = EmbeddedOptions()
  11. )
  12. # Populate vector database
  13. vectorstore = Weaviate.from_documents(
  14. client = client,
  15. documents = chunks,
  16. embedding = OpenAIEmbeddings(),
  17. by_text = False
  18. )
  19. # Define vectorstore as retriever to enable semantic search
  20. retriever = vectorstore.as_retriever()

最后,创建一个提示模板和 OpenAI 的大语言模型 (LLM),并将它们与检索组件整合成一个 RAG 流程。

  1. from langchain.chat_models import ChatOpenAI
  2. from langchain.prompts import ChatPromptTemplate
  3. from langchain.schema.runnable import RunnablePassthrough
  4. from langchain.schema.output_parser import StrOutputParser
  5. # Define LLM
  6. llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
  7. # Define prompt template
  8. template = """You are an assistant for question-answering tasks.
  9. Use the following pieces of retrieved context to answer the question.
  10. If you don't know the answer, just say that you don't know.
  11. Use two sentences maximum and keep the answer concise.
  12. Question: {question}
  13. Context: {context}
  14. Answer:
  15. """
  16. prompt = ChatPromptTemplate.from_template(template)
  17. # Setup RAG pipeline
  18. rag_chain = (
  19. {"context": retriever, "question": RunnablePassthrough()}
  20. | prompt
  21. | llm
  22. | StrOutputParser()
  23. )

准备评估数据

RAGAs 作为一个无需参照的评估框架,其评估数据集的准备相对简单。你需要准备一些 question 和 ground_truths 的配对,从中可以推导出其他所需信息,操作如下:

  1. from datasets import Dataset
  2. questions = ["What did the president say about Justice Breyer?",
  3. "What did the president say about Intel's CEO?",
  4. "What did the president say about gun violence?",
  5. ]
  6. ground_truths = [["The president said that Justice Breyer has dedicated his life to serve the country and thanked him for his service."],
  7. ["The president said that Pat Gelsinger is ready to increase Intel's investment to $100 billion."],
  8. ["The president asked Congress to pass proven measures to reduce gun violence."]]
  9. answers = []
  10. contexts = []
  11. # Inference
  12. for query in questions:
  13. answers.append(rag_chain.invoke(query))
  14. contexts.append([docs.page_content for docs in retriever.get_relevant_documents(query)])
  15. # To dict
  16. data = {
  17. "question": questions,
  18. "answer": answers,
  19. "contexts": contexts,
  20. "ground_truths": ground_truths
  21. }
  22. # Convert dict to dataset
  23. dataset = Dataset.from_dict(data)

将字典转换为数据集

dataset = Dataset.from_dict(data)

如果你不关注 context_recall 指标,就不必提供 ground_truths 数据。在这种情况下,你只需准备 question 即可。

评估 RAG 应用

首先,从 ragas.metrics 导入你计划使用的所有度量标准。然后,使用 evaluate() 函数,简单地传入所需的度量标准和已准备好的数据集即可。

  1. from ragas import evaluate
  2. from ragas.metrics import (
  3. faithfulness,
  4. answer_relevancy,
  5. context_recall,
  6. context_precision,
  7. )
  8. result = evaluate(
  9. dataset = dataset,
  10. metrics=[
  11. context_precision,
  12. context_recall,
  13. faithfulness,
  14. answer_relevancy,
  15. ],
  16. )
  17. df = result.to_pandas()

下方展示了示例中的 RAGAs 分数:

RAGAs 分数涵盖了上下文精确度、上下文回忆率、答案的忠实度和相关性。

我们可以做出以下几点观察:

  • context_relevancy(检索上下文的相关性与噪声比):尽管大语言模型 (LLM) 认为最后一个问题的所有上下文都相关,但它也指出第二个问题检索到的大多数上下文是不相关的。基于这一指标,你可以尝试调整检索上下文的数量以降低噪声。
  • context_recall(是否检索到回答问题所需的所有相关信息):LLMs 认为检索到的上下文包含了正确回答问题所需的全部相关信息。
  • faithfulness(生成答案的事实准确性):虽然 LLM 认为第一个和最后一个问题的答案是正确的,但它对第二个问题的答案(错误地声称总统没有提到英特尔的 CEO)的准确性评分为 0.5。
  • answer_relevancy(生成答案与问题的相关性):所有生成的答案都被评估为与问题高度相关。

正如 评估数据 一文中所述,利用大语言模型 (LLM) 进行无参考评估是当前研究的热点。我对这个领域的未来发展充满期待。

总结

虽然快速搭建一个概念验证阶段的 RAG 应用相对简单,但要提升其到生产级别的性能却颇具挑战。这类似于在机器学习项目中,需要借助验证数据集和评估标准来全面审视 RAG 流程的效能。

但由于 RAG 流程涉及多个组件,这些组件不仅要单独评估,还需联合考量,因此需要多种评估标准。而且,依靠人工标注创建高品质的验证数据集既耗时又成本高昂。

本文向大家介绍了 RAGAs [1] 这一评估框架。该框架定义了四个核心评估指标——context_relevancy(上下文相关性)、context_recall(上下文召回率)、faithfulness(真实性)和 answer_relevancy(答案相关性)——这四个指标共同构成了 RAGAs 评分体系。此外,RAGAs 还巧妙利用了大语言模型 (LLM) 进行无参考评估,以降低成本。

现在,你已经掌握了评估 RAG 应用性能的必要工具,我建议你构建一个实验流程,并根据以下调优策略来逐步提升应用的表现:

A Guide on 12 Tuning Strategies for Production-Ready RAG Applications​towardsdatascience.com/a-guide-on-12-tuning-strategies-for-production-ready-rag-applications-7ca646833439

生成这些数据集的代码可以在这个 GitHub 仓库中找到。

References

[1] Es, S., James, J., Espinosa-Anke, L., & Schockaert, S. (2023). RAGAs: Automated Evaluation of Retrieval Augmented Generation. arXiv preprint arXiv:2309.15217.

[2] RAGAs Documentation (2023). Documentation (accessed Dec 11, 2023)

[3] Wang, P., Li, L., Chen, L., Zhu, D., Lin, B., Cao, Y., … & Sui, Z. (2023). Large language models are not fair evaluators. arXiv preprint arXiv:2305.17926.

[4] Liu, Y., Iter, D., Xu, Y., Wang, S., Xu, R., & Zhu, C. (2023). G-eval: Nlg evaluation using gpt-4 with better human alignment, may 2023. arXiv preprint arXiv:2303.16634, 6.

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/356505
推荐阅读
  

闽ICP备14008679号