본문 바로가기
C.W.K.
Stream
Lesson 01 of 07 · published

평가 데이터셋이란?

~22 min · datasets, fundamentals

Level 0추측자
0 XP0/55 lessons0/10 achievements
0/150 XP to next level150 XP to go0% complete

데이터셋이 평가의 한계를 정해

평가 모음은 평가에 사용하는 데이터셋만큼만 좋아질 수 있어. 채점기가 완벽하고 프레임워크가 최고이며 판정 모델이 GPT-5라 해도, 입력이 실제 운영 요청을 대표하지 못하면 모두 무의미해.

평가 데이터셋은 의도적으로 선별한 입력 모음이야. 필요에 따라 참조 답안 (좋은 결과가 무엇인지 보여 주는 기준)과 메타데이터 태그 (나중에 평가 결과를 부분별로 분석하기 위한 정보)를 함께 넣어. 구조는 단순해 보이지만, 제대로 만드는 데 필요한 규율이 핵심이야.

세 가지 데이터셋, 세 가지 역할

  1. 빠른 점검 모음 — 정상 경로를 확인하는 5~20개 사례야. 몇 초 안에 실행되며, 푸시하기 전에 파이프라인을 망가뜨린 버그를 잡아.
  2. 회귀 모음 — 보호하기로 한 동작을 다루는 100~500개 사례야. PR마다 실행하며, 눈에 잘 띄지 않는 품질 회귀를 잡아.
  3. 적대적·경계 사례 모음 — 어렵거나 이상하거나 악의적이거나 발생 빈도가 낮은 사례야. 실행 빈도는 낮지만, 사용자가 실제로 마주쳤을 때 치명적인 실패를 찾아내.
원칙: 크기보다 대표성과 적용 범위가 중요해. 서로 다른 동작 20가지를 다루는 200개 사례 데이터셋이 정상 경로 하나만 집중적으로 확인하는 5,000개 사례 데이터셋보다 나아.

데이터는 어디서 가져올까?

  • 운영 로그 — 개인정보를 보호하며 수집한 실제 사용자 표본이야. 대표성이 가장 높은 출처야.
  • 분야 전문가 — 아직 마주치지 못한 실패 양상을 알고 있어.
  • 합성 생성 — LLM으로 입력을 확장해 만들어. 적대적 사례와 드문 조합을 구성할 때 유용해.
  • 공개 벤치마크 — 기초 역량을 확인할 때는 유용하지만, 제품별 평가만으로는 절대 충분하지 않아.

Code

JSONL 데이터셋 형식 — 표준 평가 구조·json
{"id": "qa.001", "input": "What is the capital of France?", "reference": "Paris", "tags": ["qa", "easy", "english"]}
{"id": "qa.002", "input": "Who wrote Hamlet?", "reference": "William Shakespeare", "tags": ["qa", "easy", "english"]}
{"id": "qa.003", "input": "Capital of South Sudan?", "reference": "Juba", "tags": ["qa", "medium", "geography"]}
{"id": "qa.004", "input": "En quelle année est mort Napoléon?", "reference": "1821", "tags": ["qa", "french", "date"]}
실행을 위한 데이터 불러오기와 층화·python
import json
from collections import Counter

def load_jsonl(path):
    with open(path) as f:
        return [json.loads(line) for line in f]

dataset = load_jsonl("datasets/regression.jsonl")
print(f"loaded {len(dataset)} cases")
print("tag distribution:", Counter(t for case in dataset for t in case["tags"]).most_common())

# Stratify — sample evenly across tags rather than picking the first 50
def stratified_sample(dataset, n_per_tag=10):
    by_tag = {}
    for case in dataset:
        for tag in case["tags"]:
            by_tag.setdefault(tag, []).append(case)
    out = []
    seen = set()
    for tag, cases in by_tag.items():
        for c in cases[:n_per_tag]:
            if c["id"] not in seen:
                out.append(c)
                seen.add(c["id"])
    return out

External links

Exercise

제품에서 요청이 가장 많은 기능을 하나 고르고, 실제 운영 환경 입력에서 가져온 30개 사례로 JSONL 데이터셋을 만들어. 각 사례에 동작 범주 태그를 하나 이상 붙여. datasets/regression.jsonl에 저장해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.