데이터셋과 실험 결과(Datasets and Experiment Results)

데이터셋과 실험 결과(Datasets and Experiment Results)

AI 시스템을 평가할 때 우리는 보통 두 가지 주요 유형의 데이터를 다뤄요. 테스트에 쓸 평가 데이터셋과, 평가가 끝난 뒤 쌓이는 실험 결과죠. Ragas에서는 이 둘을 명확히 구분해서 관리해요. 각각이 무엇이고 어떻게 다루는지 이번에 살펴볼게요.

출처: 문서

본문

  1. 평가 데이터셋(Evaluation Datasets): datasets 디렉토리에 저장돼요.
  2. 평가 결과(Evaluation Results): experiments 디렉토리에 저장돼요.

평가 데이터셋(Evaluation Datasets)

평가용 데이터셋은 다음을 포함해요:

  1. 입력(Inputs): 시스템이 처리할 입력 집합.
  2. 기대 출력(Expected outputs, 선택): 주어진 입력에 대해 시스템이 내야 하는 기대 출력 또는 응답.
  3. 메타데이터(Metadata, 선택): 데이터셋과 함께 저장할 수 있는 추가 정보.

예를 들어 RAG(Retrieval-Augmented Generation) 시스템에서는 query(시스템 입력), Grading notes(시스템 출력을 평가하기 위한 메모), query complexity 같은 메타데이터가 포함될 수 있어요.

메타데이터는 데이터셋을 다양한 기준으로 잘라 분석할 때 특히 유용해요. 예를 들어 복잡한 쿼리에서 시스템 성능이 어떤지, 단순한 쿼리에서는 어떤지, 혹은 서로 다른 언어를 어떻게 처리하는지 보고 싶을 수 있죠.

실험 결과(Experiment Results)

실험 결과는 다음을 포함해요:

  1. 데이터셋의 모든 속성.
  2. 평가된 시스템의 응답.
  3. 지표(Metrics)의 결과.
  4. 주어진 입력에 대한 시스템 트레이스를 가리키는 URI 같은 선택적 메타데이터.

예를 들어 RAG 시스템에서 결과에는 Query, Grading notes, Response, Accuracy score(지표), 시스템 트레이스 링크 등이 포함될 수 있어요.

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: 샘플에 대한 추가 정보

데이터셋 생성 모범 사례(Best Practices)

  1. 대표 샘플(Representative Samples): 데이터셋이 AI 시스템이 실제로 만날 현실 세계 시나리오를 대표하도록 해요.

  2. 균형 잡힌 분포(Balanced Distribution): 서로 다른 난이도, 주제, 엣지 케이스에 걸쳐 샘플을 포함해요.

  3. 양보다 질(Quality Over Quantity): 질 낮은 샘플을 많이 두는 것보다, 잘 큐레이션된 고품질 샘플을 적게 두는 게 낫다는 말이에요.

  4. 메타데이터 풍부(Metadata Rich): 서로 다른 차원에서 성능을 분석할 수 있게 관련 메타데이터를 포함해요.

  5. 버전 관리(Version Control): 재현성을 보장하려면 시간에 따라 데이터셋의 변경 사항을 추적해요.

데이터셋 저장과 관리(Dataset Storage and Management)

로컬 저장(Local Storage)

로컬 개발과 작은 데이터셋에는 CSV 파일을 쓸 수 있어요:

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

클라우드 저장(Cloud Storage)

더 큰 데이터셋이나 팀 협업에는 클라우드 백엔드를 고려해요:

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

# Other backends can be added as needed

데이터셋 버전 관리(Dataset Versioning)

재현 가능한 실험을 위해 데이터셋 버전을 추적하세요:

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

평가 워크플로와의 통합(Integration with Evaluation Workflows)

데이터셋은 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)

이 통합 덕분에 테스트 데이터(데이터셋)와 평가 결과(실험)를 명확히 분리해서 유지할 수 있어요. 진행 상황을 추적하고 서로 다른 접근법을 비교하기가 한결 수월해지죠.

더 알아보기 (Learn more)