数据集与实验结果
评测 AI 系统时,我们通常处理两类主要数据:
- 评测数据集:存储在
datasets目录下。 - 评测结果:存储在
experiments目录下。
评测数据集
用于评测的数据集包含:
- Inputs(输入):系统将处理的一组输入。
- Expected outputs(期望输出,可选):系统对给定输入应给出的期望输出或回复。
- Metadata(元数据,可选):可与数据集一并存储的附加信息。
例如,在检索增强生成(RAG)系统中,可能包括 query(系统输入)、Grading notes(用于给系统输出打分),以及 query complexity 等元数据。
元数据尤其适合对数据集进行切片和拆分,让你可以跨不同维度分析结果。例如,你可能想看系统在复杂查询与简单查询上的表现差异,或它如何处理不同语言。
实验结果
实验结果包括:
- 数据集中的全部属性。
- 被评测系统的回复。
- 指标结果。
- 可选元数据,例如指向给定输入的系统 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:关于该样本的附加信息
数据集创建最佳实践
- 有代表性的样本:确保数据集能代表你的 AI 系统在真实世界中会遇到的场景。
- 均衡分布:覆盖不同难度、主题和边界情况的样本。
- 质量优于数量:少量高质量、精心整理的样本,好过大量低质量样本。
- 元数据丰富:包含相关元数据,以便你跨不同维度分析性能。
- 版本控制:跟踪数据集随时间的变化,以确保可复现性。
数据集存储与管理
本地存储
对于本地开发和小型数据集,可以使用 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)之间保持清晰分离,从而更容易跟踪进度并比较不同方案。