Ragas Ragas
stable · 中文译文
中文译文 · 原文:https://docs.ragas.io/en/stable/concepts/datasets/ · 许可证 Apache-2.0

数据集与实验结果

评测 AI 系统时,我们通常处理两类主要数据:

  1. 评测数据集:存储在 datasets 目录下。
  2. 评测结果:存储在 experiments 目录下。

评测数据集

用于评测的数据集包含:

  1. Inputs(输入):系统将处理的一组输入。
  2. Expected outputs(期望输出,可选):系统对给定输入应给出的期望输出或回复。
  3. Metadata(元数据,可选):可与数据集一并存储的附加信息。

例如,在检索增强生成(RAG)系统中,可能包括 query(系统输入)、Grading notes(用于给系统输出打分),以及 query complexity 等元数据。

元数据尤其适合对数据集进行切片和拆分,让你可以跨不同维度分析结果。例如,你可能想看系统在复杂查询与简单查询上的表现差异,或它如何处理不同语言。

实验结果

实验结果包括:

  1. 数据集中的全部属性。
  2. 被评测系统的回复。
  3. 指标结果。
  4. 可选元数据,例如指向给定输入的系统 trace 的 URI。

例如,在 RAG 系统中,结果可能包括 Query、Grading notes、Response、Accuracy score(指标)、系统 trace 链接等。

在 Ragas 中使用数据集

Ragas 提供 Dataset 类来处理评测数据集。用法如下:

创建数据集

from ragas import Dataset

# Create a new dataset
dataset = Dataset(name="my_evaluation", backend="local/csv", root_dir="./data")

# Add a sample to the dataset
dataset.append({
    "id": "sample_1",
    "query": "What is the capital of France?",
    "expected_answer": "Paris",
    "metadata": {"complexity": "simple", "language": "en"}
})

加载已有数据集

# Load an existing dataset
dataset = Dataset.load(
    name="my_evaluation",
    backend="local/csv",
    root_dir="./data"
)

数据集结构

Ragas 中的数据集很灵活,可以包含评测所需的任何字段。常见字段包括:

  • id:每个样本的唯一标识符
  • query 或 input:AI 系统的输入
  • expected_output 或 ground_truth:期望回复(如有)
  • metadata:关于该样本的附加信息

数据集创建最佳实践

  1. 有代表性的样本:确保数据集能代表你的 AI 系统在真实世界中会遇到的场景。
  2. 均衡分布:覆盖不同难度、主题和边界情况的样本。
  3. 质量优于数量:少量高质量、精心整理的样本,好过大量低质量样本。
  4. 元数据丰富:包含相关元数据,以便你跨不同维度分析性能。
  5. 版本控制:跟踪数据集随时间的变化,以确保可复现性。

数据集存储与管理

本地存储

对于本地开发和小型数据集,可以使用 CSV 文件:

dataset = Dataset(name="my_eval", backend="local/csv", root_dir="./datasets")

云存储

对于更大的数据集或团队协作,可考虑云后端:

# Google Drive (experimental)
dataset = Dataset(name="my_eval", backend="gdrive", root_dir="folder_id")

# Other backends can be added as needed

数据集版本管理

跟踪数据集版本,以便实验可复现:

# Include version in dataset name
dataset = Dataset(name="my_eval_v1.2", backend="local/csv", root_dir="./datasets")

与评测工作流集成

数据集可以与 Ragas 评测工作流无缝集成:

from ragas import experiment, Dataset

# Load your dataset
dataset = Dataset.load(name="my_evaluation", backend="local/csv", root_dir="./data")

# Define your experiment
@experiment()
async def my_experiment(row):
    # Process the input through your AI system
    response = await my_ai_system(row["query"])

    # Return results for metric evaluation
    return {
        **row,  # Include original data
        "response": response,
        "experiment_name": "baseline_v1"
    }

# Run evaluation on the dataset
results = await my_experiment.arun(dataset)

这种集成让你可以在测试数据(datasets)和评测结果(experiments)之间保持清晰分离,从而更容易跟踪进度并比较不同方案。