使用 LabelledRagDataset 进行评估#
我们已经介绍了评估模块中的核心抽象概念,这些概念支持对基于LLM的应用程序或系统(包括RAG系统)进行各种评估方法。当然,要评估系统,需要评估方法、系统本身以及评估数据集。最佳实践是在来自不同来源和领域的多个不同数据集上测试LLM应用程序。这样做有助于确保系统的整体鲁棒性(即系统在未见过的、新情况下的工作水平)。
为此,我们在库中包含了LabelledRagDataset抽象。其核心目的是通过使这些数据集易于创建、使用和广泛可用,促进系统在各种数据集上的评估。
该数据集由示例组成,其中每个示例包含一个query、一个reference_answer以及reference_contexts。使用LabelledRagDataset的主要目的是通过首先预测对给定query的响应,然后将预测(或生成)的响应与reference_answer进行比较,来测试RAG系统的性能。
from llama_index.core.llama_dataset import (
LabelledRagDataset,
CreatedBy,
CreatedByType,
LabelledRagDataExample,
)
example1 = LabelledRagDataExample(
query="This is some user query.",
query_by=CreatedBy(type=CreatedByType.HUMAN),
reference_answer="This is a reference answer. Otherwise known as ground-truth answer.",
reference_contexts=[
"This is a list",
"of contexts used to",
"generate the reference_answer",
],
reference_by=CreatedBy(type=CreatedByType.HUMAN),
)
# a sad dataset consisting of one measely example
rag_dataset = LabelledRagDataset(examples=[example1])
构建 LabelledRagDataset#
正如我们在上一节末尾看到的,我们可以通过逐个构建LabelledRagDataExample来手动构建LabelledRagDataset。然而,这有点繁琐,虽然人工标注的数据集非常有价值,但由强大的LLM生成的数据集也非常有用。
因此,llama_dataset模块配备了RagDatasetGenerator,它能够在一组源Document上生成LabelledRagDataset。
from llama_index.core.llama_dataset.generator import RagDatasetGenerator
from llama_index.llms.openai import OpenAI
import nest_asyncio
nest_asyncio.apply()
documents = ... # a set of documents loaded by using for example a Reader
llm = OpenAI(model="gpt-4")
dataset_generator = RagDatasetGenerator.from_documents(
documents=documents,
llm=llm,
num_questions_per_chunk=10, # set the number of questions per nodes
)
rag_dataset = dataset_generator.generate_dataset_from_nodes()
使用 LabelledRagDataset#
如前所述,我们希望使用LabelledRagDataset来评估基于相同源Document构建的RAG系统的性能。这样做需要执行两个步骤:(1) 对数据集进行预测(即生成对每个示例查询的响应),(2) 通过将预测响应与参考答案进行比较来评估预测响应。在步骤(2)中,我们还评估RAG系统检索的上下文,并将其与参考上下文进行比较,以获得对RAG系统检索组件的评估。
为了方便起见,我们有一个名为RagEvaluatorPack的LlamaPack,可以简化此评估过程!
from llama_index.core.llama_pack import download_llama_pack
RagEvaluatorPack = download_llama_pack("RagEvaluatorPack", "./pack")
rag_evaluator = RagEvaluatorPack(
query_engine=query_engine, # built with the same source Documents as the rag_dataset
rag_dataset=rag_dataset,
)
benchmark_df = await rag_evaluator.run()
上面的benchmark_df包含先前介绍的评估指标的平均分数:Correctness、Relevancy、Faithfulness以及Context Similarity,它测量参考上下文与RAG系统检索的上下文之间的语义相似性,以生成预测响应。
在哪里找到 LabelledRagDataset#
您可以在llamahub找到所有的LabelledRagDataset。您可以浏览每一个数据集,如果您决定使用它来基准测试您的RAG工作流,那么您可以通过以下两种方式之一方便地下载数据集以及源Document:使用llamaindex-cli或通过Python代码使用download_llama_dataset实用函数。
# using cli
llamaindex-cli download-llamadataset PaulGrahamEssayDataset --download-dir ./data
# using python
from llama_index.core.llama_dataset import download_llama_dataset
# a LabelledRagDataset and a list of source Document's
rag_dataset, documents = download_llama_dataset(
"PaulGrahamEssayDataset", "./data"
)
贡献 LabelledRagDataset#
您也可以向llamahub贡献LabelledRagDataset。贡献LabelledRagDataset涉及两个高级步骤。一般来说,您必须创建LabelledRagDataset,将其保存为json文件,并将此json文件和源文本文件提交到我们的llama_datasets Github仓库。此外,您还需要提交一个拉取请求,将数据集的必要元数据上传到我们的llama_hub Github仓库。
请参考下面链接的“LlamaDataset Submission Template Notebook”。
现在,去构建健壮的LLM应用程序#
本页面希望为您提供一个良好的起点,以创建、下载和使用LlamaDataset来构建健壮且高性能的LLM应用程序。要了解更多信息,我们建议阅读下面提供的笔记本指南。