본문 바로가기
C.W.K.
Stream
Lesson 02 of 09 · published

LLM에서 평가란 무엇인가

~22 min · evals, definitions, fundamentals

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

평가는 테스트도, 벤치마크도 아니야

'평가'라는 한 단어에 서로 다른 세 가지 활동이 겹쳐 있어서 대화가 자꾸 엇갈려. 셋을 구분하지 않으면 상황에 맞지 않는 도구를 고르게 돼.

  • 테스트코드가 지시한 대로 동작하는가?에 답해. 입력과 출력이 결정론적이야. assert add(2, 3) == 5는 통과하거나 실패해.
  • 벤치마크 평가이 모델이 공개 데이터셋에서 다른 모델과 비교해 어느 수준인가?에 답해. 모델을 선택할 때는 유용하지만 제품의 실제 품질을 말해 주지는 않아.
  • 평가우리 시스템이 실제 사용자 입력과 비슷한 입력에 좋은 출력을 내는가?에 답해. 출력은 비결정론적이고, 무엇이 '좋은지'는 맥락에 따라 달라지며, 사용자의 기대도 계속 변해.

LLM 평가는 실제로 무엇을 측정할까?

평가는 다음 4가지 요소를 하나의 측정 체계로 묶어:

  1. 평가 데이터셋 — 실제 작업을 닮은 입력과 필요한 경우 참조 답안.
  2. 평가 대상 시스템 — 프롬프트, 모델, 검색 파이프라인, 반복적인 도구 실행, 다중 에이전트 시스템 또는 이들의 조합.
  3. 채점기 — 출력이 허용 가능한지 판단하는 함수. 완전 일치, 정규식, 임베딩 유사도, LLM 판정 모델, Python 검증기, 인간 평가자까지 모두 사용할 수 있어.
  4. 보고 계층 — 측정값을 의사결정에 활용할 수 있게 만드는 대시보드, CI 관문, 노트북.
원칙: 평가 결과의 신뢰도는 가장 약한 요소가 결정해. 완벽한 채점기 + 쓸모없는 데이터셋 = 실제로는 아무것도 측정하지 못해. 완벽한 데이터셋 + 엉성한 채점기 = 엉성한 채점 결과만 남아.

온라인 평가와 오프라인 평가

오프라인 평가는 배포 전에 고정된 데이터셋으로 실행해. CI/CD를 떠올리면 돼. 명백한 회귀를 막아 주지. 온라인 평가는 배포 후 실제 요청을 바탕으로 실행해. 운영 로그 표본, A/B 비교, 사용자 피드백, 관측 데이터 등을 활용하지. 오프라인 데이터셋이 대표하지 못하는 문제를 찾아내 줘. 둘 다 필요해. 오프라인 평가만 하는 팀은 분포 변화를 놓치고, 온라인 평가만 하는 팀은 사용자가 불평할 때까지 회귀를 알아차리지 못해.

Code

평가의 구조 — 의사 코드·python
# The four ingredients in their simplest form.
def run_eval(system, dataset, grader):
    results = []
    for case in dataset:
        output = system(case["input"])
        score, reason = grader(output, case.get("reference"))
        results.append({"input": case["input"], "output": output, "score": score, "reason": reason})
    return summarize(results)


def summarize(results):
    pass_rate = sum(r["score"] >= 1.0 for r in results) / len(results)
    avg = sum(r["score"] for r in results) / len(results)
    return {"pass_rate": pass_rate, "avg_score": avg, "n": len(results)}
세 가지 채점기, 세 가지 측정 철학·python
def exact_match_grader(output, reference):
    score = 1.0 if output.strip() == reference.strip() else 0.0
    return score, f"exact match: {score==1.0}"


def contains_grader(output, reference):
    score = 1.0 if reference.lower() in output.lower() else 0.0
    return score, f"reference appears in output: {score==1.0}"


def llm_judge_grader(output, reference, judge_model):
    prompt = f"Output: {output}\nReference: {reference}\nIs the output factually consistent with the reference? Reply 'yes' or 'no' followed by one sentence."
    verdict = judge_model.complete(prompt).lower()
    score = 1.0 if verdict.startswith("yes") else 0.0
    return score, verdict

External links

Exercise

지난 한 달 동안 팀에서 '평가'라고 부른 활동 세 가지를 적어 봐. 각각 테스트, 벤치마크 평가, 실제 제품 평가로 분류하고, 그 활동으로 정말 확인하려던 것이 무엇인지 한 문장씩 써.

Progress

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

댓글 0

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

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