跳至内容

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

资源#

优云智算