使用 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="这是一些用户查询。",
query_by=CreatedBy(type=CreatedByType.HUMAN),
reference_answer="这是一个参考答案。也被称为地面真相答案。",
reference_contexts=[
"这是一个列表",
"用于生成参考答案的上下文",
],
reference_by=CreatedBy(type=CreatedByType.HUMAN),
)
# 一个包含一个可怜的示例的数据集
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 = ... # 通过例如阅读器加载的一组文档
llm = OpenAI(model="gpt-4")
dataset_generator = RagDatasetGenerator.from_documents(
documents=documents,
llm=llm,
num_questions_per_chunk=10, # 设置每个节点的问题数量
)
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, # 由与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
或通过使用 download_llama_dataset
实用函数在Python代码中。
# 使用命令行
llamaindex-cli download-llamadataset PaulGrahamEssayDataset --download-dir ./data
# 使用 Python
from llama_index.core.llama_dataset import download_llama_dataset
# 下载一个 LabelledRagDataset 和一个源文档列表
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应用程序提供了一个良好的起点。要了解更多信息,我们建议阅读下方提供的笔记本指南。