168 深入探讨RAG管道基准测试:使用LabelledRagDataset

引言

在自然语言处理(NLP)领域,检索增强生成(Retrieval-Augmented Generation, RAG)管道是一种强大的工具,它结合了信息检索和文本生成技术,以提供更准确和上下文相关的答案。为了评估和优化RAG管道的性能,我们需要一个高质量的数据集来进行基准测试。本文将深入探讨如何使用LabelledRagDataset来构建和评估RAG管道。

什么是LabelledRagDataset?

LabelledRagDataset是一个用于评估RAG管道的数据集,类似于传统机器学习中的数据集,其中特征(X)用于预测真实标签(y)。在RAG管道中,查询(query)和检索到的上下文(retrieved contexts)作为特征,而查询的答案(reference_answer)作为真实标签。

前置知识

在深入探讨之前,我们需要了解以下几个概念:

  1. RAG管道:RAG管道结合了检索和生成两个步骤。首先,系统从大量文档中检索相关信息,然后使用这些信息生成答案。
  2. Pydantic模型:Pydantic是一个用于数据验证和设置管理的Python库。它允许我们定义数据模型,并确保数据的类型和结构符合预期。
  3. WikipediaReader:一个用于从维基百科获取数据的工具,常用于获取文本数据。

构建LabelledRagDataExample

LabelledRagDataExampleLabelledRagDataset的基本单元。每个示例包含一个查询、查询的生成者、参考答案、参考答案的生成者以及相关的上下文。

代码示例

from llama_index.core.llama_dataset import (
    LabelledRagDataExample,
    CreatedByType,
    CreatedBy,
)

# 构建一个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,
)

# 打印JSON格式的LabelledRagDataExample
print(rag_example.json())

解释

  • query:测试查询。
  • query_by:查询的生成者,这里是一个AI模型(gpt-4)。
  • reference_answer:查询的参考答案。
  • reference_answer_by:参考答案的生成者,这里是一个人类。
  • reference_contexts:与查询相关的上下文。

构建LabelledRagDataset

LabelledRagDataset是由多个LabelledRagDataExample组成的集合。我们可以通过将多个示例传递给LabelledRagDataset来构建数据集。

代码示例

from llama_index.core.llama_dataset import LabelledRagDataset

# 构建第二个LabelledRagDataExample
query = "This is a test query, is it so?"
reference_answer = "I think yes, it is."
reference_contexts = ["This is a second sample context"]

rag_example_2 = LabelledRagDataExample(
    query=query,
    query_by=query_by,
    reference_contexts=reference_contexts,
    reference_answer=reference_answer,
    reference_answer_by=reference_answer_by,
)

# 构建LabelledRagDataset
rag_dataset = LabelledRagDataset(examples=[rag_example, rag_example_2])

# 将数据集转换为pandas DataFrame
print(rag_dataset.to_pandas())

解释

  • LabelledRagDataset:包含多个LabelledRagDataExample的数据集。
  • to_pandas():将数据集转换为pandas DataFrame,便于查看和分析。

序列化与反序列化

为了持久化数据集并从磁盘加载数据集,我们可以使用save_jsonfrom_json方法。

代码示例

# 将数据集保存为JSON文件
rag_dataset.save_json("rag_dataset.json")

# 从JSON文件加载数据集
reload_rag_dataset = LabelledRagDataset.from_json("rag_dataset.json")

# 打印重新加载的数据集
print(reload_rag_dataset.to_pandas())

解释

  • save_json:将数据集保存为JSON文件。
  • from_json:从JSON文件加载数据集。

构建合成LabelledRagDataset

在某些情况下,我们可能需要使用合成数据来构建数据集。例如,我们可以使用GPT-4生成查询和参考答案。

代码示例

import nest_asyncio
nest_asyncio.apply()

!pip install wikipedia -q

from llama_index.readers.wikipedia import WikipediaReader
from llama_index.core import VectorStoreIndex

cities = ["San Francisco"]
documents = WikipediaReader().load_data(pages=[f"History of {x}" for x in cities])
index = VectorStoreIndex.from_documents(documents)

from llama_index.core.llama_dataset.generator import RagDatasetGenerator
from llama_index.llms.openai import OpenAI

llm = OpenAI(model="gpt-3.5-turbo", temperature=0.3)
dataset_generator = RagDatasetGenerator.from_documents(
    documents,
    llm=llm,
    num_questions_per_chunk=2,
    show_progress=True,
)

rag_dataset = dataset_generator.generate_dataset_from_nodes()
print(rag_dataset.to_pandas())

解释

  • WikipediaReader:从维基百科加载数据。
  • RagDatasetGenerator:生成合成数据集。
  • generate_dataset_from_nodes:从文档节点生成数据集。

结论

通过本文,我们深入探讨了如何使用LabelledRagDataset来构建和评估RAG管道。我们学习了如何构建LabelledRagDataExample,创建LabelledRagDataset,以及如何使用合成数据生成数据集。这些技术可以帮助我们更好地理解和优化RAG管道的性能。

希望本文对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值