数据集和实验结果
在评估 AI 系统时,我们通常会处理两种主要类型的数据
- 评估数据集:这些数据存储在
datasets目录下。 - 评估结果:这些数据存储在
experiments目录下。
评估数据集
用于评估的数据集包含
- 输入:系统将处理的一组输入。
- 预期输出(可选):系统针对给定输入的预期输出或响应。
- 元数据(可选):可与数据集一同存储的附加信息。
例如,在检索增强生成(RAG)系统中,它可能包括查询(对系统的输入)、评分说明(用于对系统输出进行评分)以及查询复杂度等元数据。
元数据对于对数据集进行切片和细分特别有用,使您能够分析不同方面的结果。例如,您可能想了解您的系统在处理复杂查询与简单查询时的表现,或者它如何处理不同的语言。
实验结果
实验结果包括
- 数据集中的所有属性。
- 来自被评估系统的响应。
- 指标的结果。
- 可选的元数据,例如指向给定输入的系统跟踪的 URI。
例如,在 RAG 系统中,结果可能包括查询、评分说明、响应、准确率分数(指标)、系统跟踪链接等。
在 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 文件
云存储
对于更大型的数据集或团队协作,可以考虑使用云后端
# 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)
这种集成使您能够清晰地分离测试数据(数据集)和评估结果(实验),从而更容易地跟踪进度和比较不同的方法。