使用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仓库。此外,你还需要
发起一个pull请求,将数据集的必要元数据上传到我们的llama_hub Github仓库。
请参考下方链接的"LlamaDataset提交模板笔记本"。
现在,去构建强大的LLM应用#
本页面希望能为您提供一个良好的起点,用于创建、下载和使用LlamaDataset
来构建强大且高性能的LLM应用程序。要了解更多信息,我们建议阅读下面提供的笔记本指南。