使用 LabelledRagDataset
进行评估#
我们已经介绍了评估模块中的核心抽象,这些抽象支持对基于 LLM 的应用程序或系统(包括 RAG 系统)进行各种评估方法。当然,要评估系统,需要评估方法、系统本身以及评估数据集。最佳实践认为,应在来自不同来源和域的几个不同数据集上测试 LLM 应用程序。这样做有助于确保系统的整体鲁棒性(即系统在未见过的新用例中的工作能力)。
为此,我们在库中包含了 LabelledRagDataset
抽象。它们的核心目的是通过使其易于创建、易于使用和广泛可用,从而促进对各种数据集上的系统进行评估。
此数据集包含示例,每个示例包含一个 query
、一个 reference_answer
以及 reference_contexts
。使用 LabelledRagDataset
的主要原因是测试 RAG 系统的性能,方法是首先预测对给定 query
的响应,然后将该预测(或生成)的响应与 reference_answer
进行比较。在步骤 (2) 中,我们还评估了 RAG 系统检索到的上下文,并将其与参考上下文进行比较,以评估 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
或使用 download_llama_dataset
实用函数通过 Python 代码下载。
# 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 提交模板 Notebook”。
现在,去构建健壮的 LLM 应用吧#
希望此页面能为您提供一个良好的起点,以便创建、下载和使用 LlamaDataset
来构建健壮且高性能的 LLM 应用。要了解更多信息,我们建议您阅读下面提供的 Notebook 指南。