Skip to content

使用 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系统检索组件的评估。

为了方便起见,我们有一个名为RagEvaluatorPackLlamaPack,可以简化此评估过程!

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包含先前介绍的评估指标的平均分数:CorrectnessRelevancyFaithfulness以及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应用程序。要了解更多信息,我们建议阅读下面提供的笔记本指南。

资源#