
Jerry Liu • 2023-12-04
隆重推出 Llama 数据集 🦙📝
(作者:Andrei Fajardo 和 Jerry Liu @ LlamaIndex)
今天我们激动地宣布推出 Llama 数据集 🦙 📝——这是一系列社区贡献的数据集,允许用户轻松地针对不同用例对他们的 RAG 流水线进行基准测试。一个数据集包含问题-答案对以及源上下文。要使用它们,请从 LlamaHub 下载;然后使用数据集 + 一组评估指标评估您的 RAG 流水线。
我们首批推出了 10 个评估数据集,并将继续增加更多!我们也使得贡献您自己的数据集变得超级简单——上传您的源文档 + QA 对(手动或合成生成)。
背景
构建生产级 RAG 的一个大问题是评估。与传统软件系统不同,LLM 系统(以及更广泛的 ML 系统)是用于模拟嘈杂现实世界信号的随机黑箱。这意味着开发者无法轻松定义断言确定性行为的单元测试——可能总是存在导致错误的输入。由于开发者不完全清楚给定输入会产生什么输出,他们需要定义一个能够反映其生产用例的评估数据集,并使用一组评估指标在此数据集上评估其系统。
我们广泛地介绍过这个主题——每个 AI 工程师在尝试使用高级技术优化其 LLM 或 RAG 应用之前,都应该先设置评估。
但我们越来越发现,定义正确的评估数据集既困难又依赖于具体用例。使用学术基准(如 BEIR 和 HotpotQA)进行评估往往无法泛化到特定用例。在某些数据领域(例如 SEC 文件)效果良好的某些参数,可能在其他领域(例如研究论文)上失效。
这就是启发我们创建 Llama 数据集的原因。我们没有规定您必须使用哪些数据,而是决定创建一个中心,让您可以轻松为您的用例选择合适的数据集!

概述
今天的发布包括 LlamaHub 上的一系列 Llama 数据集,一个配套的 RagEvaluatorPack
用于帮助计算数据集上的指标,以及您可以独立使用的配套数据集抽象。
- 要使用 Llama 数据集,请从 LlamaHub 下载并运行我们的
RagEvaluatorPack
(或运行您自己的评估模块)。 - 要生成 Llama 数据集,请定义一个
LabelledRagDataset
,其中包含一组LabelledRagDataExample
对象。 - 要贡献 Llama 数据集,请向 LlamaHub 提交一个“数据卡”,并将您的原始数据集文件上传到我们的
llama_datasets
仓库。
请查看以下章节,了解示例数据集的演练过程。
我们首批推出了 10 个数据集
- 区块链 Solana 数据集
- Coda 帮助台数据集 (与 Braintrust 合作)
- FinanceBench 数据集 (Patronus AI)
- Paul Graham 论文数据集
- Llama 2 论文数据集
- Uber/Lyft 2021 年 10K 文件数据集
- Mini Truthful QA 数据集 (Arize AI)
- Mini Squad V2 数据集 (Arize AI)
- COVID-19 的起源
- LLM 调查论文数据集

示例演练
让我们演练一下使用/贡献 Llama 数据集的各个步骤。
1. 下载和使用 Llama 数据集
下载数据集很简单,执行以下命令(这里我们下载 Paul Graham)。
from llama_index.llama_dataset import download_llama_dataset
# download and install dependencies
rag_dataset, documents = download_llama_dataset(
"PaulGrahamEssayDataset", "./paul_graham"
)
这将下载一个包含 QA 对(+ 参考上下文)的 rag_dataset
,以及作为源文档语料库的 documents
。
让我们用 to_pandas()
检查 rag_dataset
rag_dataset
的示例行
对 RAG 数据集生成预测非常简单。您可以轻松地将任何查询引擎接入 amake_predictions_with
from llama_index import VectorStoreIndex
# a basic RAG pipeline, uses service context defaults
index = VectorStoreIndex.from_documents(documents=documents)
query_engine = index.as_query_engine()
# generate prediction dataset
prediction_dataset = await rag_dataset.amake_predictions_with(
query_engine=query_engine, show_progress=True
)
prediction_dataset
是一个 RagPredictionDataset
对象,如下所示

给定 rag_dataset
和 prediction_dataset
,您可以使用我们的评估模块来衡量各种指标(例如忠实度、正确性、相关性)的性能。
for example, prediction in tqdm.tqdm(
zip(rag_dataset.examples, prediction_dataset.predictions)
):
correctness_result = judges["correctness"].evaluate(
query=example.query,
response=prediction.response,
reference=example.reference_answer,
)
为了消除编写所有这些评估模块的样板代码,我们还提供了一个 LlamaPack,可以为您完成这一切!
from llama_index.llama_pack import download_llama_pack
RagEvaluatorPack = download_llama_pack("RagEvaluatorPack", "./pack")
rag_evaluator = RagEvaluatorPack(
query_engine=query_engine, rag_dataset=rag_dataset
)
benchmark_df = await rag_evaluator.arun()
2. 生成 Llama 数据集
您可以使用我们的 LabelledRagDataExample
和 LabelledRagDataset
抽象来创建您自己的数据集。
这是一个手动添加示例的例子。
from llama_index.llama_dataset import (
LabelledRagDataExample,
CreatedByType,
CreatedBy,
)
# constructing a LabelledRagDataExample
query = "This is a test query, is it not?"
query_by = CreatedBy(type=CreatedByType.AI, model_name="gpt-4")
reference_answer = "Yes it is."
reference_answer_by = CreatedBy(type=CreatedByType.HUMAN)
reference_contexts = ["This is a sample context"]
rag_example = LabelledRagDataExample(
query=query,
query_by=query_by,
reference_contexts=reference_contexts,
reference_answer=reference_answer,
reference_answer_by=reference_answer_by,
)
from llama_index.llama_dataset.rag import LabelledRagDataset
rag_dataset = LabelledRagDataset(examples=[rag_example, rag_example_2])
您还可以使用 GPT-4 在任何文档语料库上合成生成数据集
# generate questions against chunks
from llama_index.llama_dataset.generator import RagDatasetGenerator
from llama_index.llms import OpenAI
from llama_index import ServiceContext
# set context for llm provider
gpt_4_context = ServiceContext.from_defaults(
llm=OpenAI(model="gpt-4", temperature=0.3)
)
# instantiate a DatasetGenerator
dataset_generator = RagDatasetGenerator.from_documents(
documents,
service_context=gpt_4_context,
num_questions_per_chunk=2, # set the number of questions per nodes
show_progress=True,
)
3. 贡献 Llama 数据集
我们在此处提供了一个现成的提交 Notebook 模板——只需用您的数据集填充空白即可!
如果您有兴趣贡献数据集,我们非常乐意展示它!您只需遵循以下步骤:
- 创建数据集:要创建一个
LabelledRagDataset
,您可以从头开始手动或使用合成生成的示例创建它,或者从现有数据集创建它。 - 生成基准评估数据集:在您的数据集上对一个基本的 top-k RAG 流水线进行基准测试,并报告结果。这将为其他人提供参考点。您可以使用
RagEvaluatorPack
来达到此目的。 - 准备数据集卡片(
card.json
)和README.md
:这些将显示在 LlamaHub 上此数据集的页面上。如果您想根据某些输入自动生成这些文件,请查看我们的LlamaDatasetMetadata
LlamaPack。 - 向
llama-hub
提交一个 PR 以注册LlamaDataset
。 - 向
llama-datasets
提交一个 PR 以上传LlamaDataset
及其源文件。
您可以在上面提供的Notebook 模板中遵循所有这些步骤——只需替换您自己的数据即可。
结论
我们很高兴您能查看我们的数据集并向我们提供反馈!我们也欢迎您的贡献。
资源
以下是博客文章中提到的资源。
- LlamaHub 上的 Llama 数据集(请务必从下拉菜单中选择“Llama Datasets”)
- 下载 Llama 数据集 Notebook
- 创建 Llama 数据集 Notebook
- 贡献 Llama 数据集 Notebook 模板
- 关于贡献 Llama 数据集的 README