Skip to content

LLM-as-Judge 캘리브레이션

하나 이상의 LLM 심판으로 데이터를 자동 레이블링한 뒤, 블라인드 사람 캘리브레이션 패스를 실행해 정확도, 일치도, 캘리브레이션 오차를 측정합니다. 이 LLM 심판을 믿어도 될까? 라는 질문에 변호 가능하고 재현 가능한 워크플로로 답합니다.

심판 캘리브레이션은 하나 이상의 LLM 심판으로 데이터를 자동 레이블링한 다음, 이를 블라인드 사람 레이블과 대조해 캘리브레이션합니다. 이를 통해 LLM 심판을 어느 정도까지 신뢰할지 정량화할 수 있습니다. 심판 프롬프트를 작성하고 모델을 고르면, Potato가 각 모델로 데이터를 k번 샘플링합니다. 이후 모델의 답을 보지 않고 표본을 블라인드 레이블링하면, Potato가 모델별 정확도, 사람↔모델 및 모델↔모델 일치도, 캘리브레이션 오차, 혼동 행렬을 보고합니다.

LLM으로 모델 출력을 채점하는 것은 이제 에이전트 및 모델 평가에서 흔한 일이지만, 심판은 그것이 사람의 판단을 얼마나 잘 따라가는지 알아야 비로소 유용합니다. 캘리브레이션은 그 신뢰를 변호 가능하게 만드는 측정 단계입니다.

동작 방식

text
SETUP → GENERATING → HUMAN_CALIBRATION → REPORT → COMPLETED
  1. 생성 — 각 모델은 항목마다 k번 질의됩니다. 최빈 레이블이 예측이 되고, 그 예측에 동의하는 k 표본의 비율이 모델의 신뢰도입니다. 결과는 전용 저장소로 들어가며 주석 데이터에 절대 섞이지 않으므로 사람은 이를 볼 수 없습니다.
  2. 사람 캘리브레이션 — Potato가 레이블링된 항목에서 무작위 또는 층화 표본을 추출하고, 한 명 이상의 사람이 일반 주석 인터페이스를 통해 이를 블라인드 레이블링합니다.
  3. 보고서 — 지표는 사람∩모델 교집합에 대해 계산되어 출력 디렉터리에 기록됩니다.

모델 레이블은 별도 저장소에 있고 UI에 절대 주입되지 않으므로, 블라인드는 주석자의 규율에 달린 것이 아니라 구조적으로 보장됩니다.

빠른 시작

저장소 루트에서 포함된 예제를 실행합니다.

bash
python potato/flask_server.py start examples/ai-assisted/judge-calibration/config.yaml -p 8000 --debug
  • 설정 및 실행을 위해 http://localhost:8000/judge_calibration/admin 을 엽니다.
  • 생성이 끝나면 http://localhost:8000/annotate 에서 표본을 블라인드 레이블링합니다.
  • Build report 를 클릭한 다음 http://localhost:8000/judge_calibration/report 을 엽니다.

이 예제는 로컬 Ollama 모델을 사용하므로 API 키가 필요 없습니다. 먼저 Ollama를 시작하고 ollama pull llama3.2:3b 를 실행하세요.

설정

yaml
judge_calibration:
  enabled: true
  prompt: |                       # supports {text}, {labels}, {description}
    You are an impartial expert annotator. Classify the sentiment as exactly
    one of: positive, negative, neutral.
  models:
    - endpoint_type: openai        # openai | anthropic | ollama | vllm | gemini | openrouter | huggingface
      model: gpt-4o-mini
      api_key: ${OPENAI_API_KEY}   # env-var expansion supported
      temperature: 0.7             # must be > 0 so the k samples vary
    - endpoint_type: ollama
      model: llama3.1:8b
      base_url: http://localhost:11434
      temperature: 0.7
  k_samples: 5                     # samples per model per item
  max_items: 1000                  # cap on items the LLMs label (null = all)
  sampling:
    strategy: stratified           # random | stratified | all
    sample_size: 200               # how many items humans blind-label
    seed: 42
  human:
    num_raters: 1                  # 1 = solo researcher; N adds human-human IAA
    gold: single                   # single | majority
  schemas: [sentiment]             # annotation_scheme names to evaluate ([] = all)
  output:
    dir: judge_calibration_output

이들 대부분은 관리 마법사에서 재정의하고 다시 실행할 수 있습니다.

temperature > 0 으로 설정하세요. k_samples > 1 이면서 온도가 0이면 표본이 모두 동일해지고 신뢰도는 항상 1.0이 되어 캘리브레이션 보고서가 무의미해집니다. 이 경우 Potato는 시작 시 경고를 출력합니다.

지원되는 주석 유형

유형상태지표
radio / select지원됨정확도, P/R/F1, Cohen/Fleiss κ, Krippendorff α, ECE, 혼동 행렬
likert지원됨위의 항목에 더해 MAE 및 순서형 Krippendorff α
multiselect지원됨레이블별 P/R/F1, 평균 Jaccard, 정확 일치 정확도, 캘리브레이션
span실험적IoU 매칭 P/R/F1, 평균 IoU, span-F1 일치도, span 수준 캘리브레이션

span 지원은 심판의 문자 오프셋 스팬을 k 표본에 걸쳐 군집화하고, 교집합 대 합집합으로 골드에 매칭합니다. 그 휴리스틱은 방향성이 있으며 정확하지는 않습니다.

보고서에 포함되는 내용

  • 각 모델의 사람 골드 레이블 대비 정확도, 정밀도, 재현율, F1.
  • 사람↔모델, 모델↔모델, 사람↔사람 쌍으로 분할된 Cohen κ.
  • 모든 평가자에 걸친 Fleiss κKrippendorff α.
  • 기대 캘리브레이션 오차 (ECE), 신뢰도 빈, Brier 점수. 투표 비율 신뢰도가 정답 여부를 얼마나 잘 따라가는지 보여줍니다.
  • 각 모델의 사람 골드 대비 혼동 행렬.

지표는 교집합에 대해 계산됩니다. 즉, 모델과 사람이 모두 레이블링한 항목이며, 캘리브레이션 표본이 추출된 경우 그 표본으로 제한됩니다.

출력은 output.dir 아래에 기록됩니다. llm_labels.jsonl (모델, 항목, 스키마별 한 줄), report.json, 그리고 사람이 읽을 수 있는 report.html 입니다.

심판 캘리브레이션 대 심판 정렬

심판 캘리브레이션은 여러 심판과 경험적 신뢰도(k 표본에 걸친 투표 비율)를 사용하며 사람을 엄격히 블라인드 상태로 유지합니다. 심판 정렬단일 심판을 기존 사람 골드 레이블과 대조해 캘리브레이션하고, 주석 중에 그 판정을 인라인으로 표시하며, 루브릭을 반복 개선하는 데 초점을 둡니다. 후보 심판을 검증할 때는 캘리브레이션을, 고정된 골드 세트에 대해 하나의 심판을 튜닝할 때는 정렬을 선택하세요.

관련 항목

구현 세부 사항은 원본 문서를 참조하세요.