LLM-as-a-Judge는 어떤 LLM의 출력이 좋은지 나쁜지를 사람 대신 다른 LLM에게 채점시키는 평가 방법이다. 정답이 딱 떨어지지 않는 요약·상담 답변·번역 품질처럼 정규식이나 정확도로 잴 수 없는 출력을, 채점 기준(루브릭)과 함께 심판 모델에 넣어 점수나 승패를 받는다.
내가 이걸 진지하게 쓰기 시작한 건, 프롬프트를 고칠 때마다 매번 사람이 눈으로 100개씩 비교하는 게 도저히 지속 불가능했기 때문이다. 사람 평가는 정확하지만 느리고 비싸다. 그렇다고 BLEU 같은 지표는 챗봇 답변 품질과 상관이 거의 없었다. 그 사이 어딘가를 메워준 게 LLM 심판이다. 다만 이 심판은 편향 덩어리라, 그냥 믿으면 안 된다.
세 가지 채점 방식
쓰임에 따라 형태가 다르다.
| 방식 | 입력 | 출력 | 쓰임 |
|---|---|---|---|
| 단일 채점 | 답변 1개 + 루브릭 | 점수(1~5) | 절대 품질 모니터링 |
| 쌍 비교 | 답변 A vs B | 승자 | 두 프롬프트/모델 비교 |
| 기준 대조 | 답변 + 정답 예시 | 일치/불일치 | 사실성·정확도 검증 |
내 경험상 단일 절대 채점보다 쌍 비교가 훨씬 안정적이다. LLM은 "이 답이 5점인가 4점인가"는 오락가락하지만, "A와 B 중 뭐가 나은가"는 꽤 일관되게 고른다.
심판의 편향들 — 이걸 모르면 당한다
LLM 심판은 사람보다 더 노골적인 편향을 가진다. 나는 이걸 하나씩 밟으면서 배웠다.
- 위치 편향: 쌍 비교에서 그냥 앞에 놓인 답을 이기게 하는 경향. 순서만 바꿔도 승자가 바뀐다.
- 장황함 편향: 길고 화려한 답을 실제 품질과 무관하게 선호.
- 자기 편애: 같은 계열 모델이 쓴 답에 후한 점수. 심판과 피평가 모델이 같으면 특히.
- 서식 편향: 불릿·굵은 글씨 같은 겉모양에 점수를 얹음.
위치 편향은 실제로 나를 크게 속였다. A 프롬프트가 B를 이겼다고 신나서 배포하려다, 혹시나 해서 순서를 뒤집어 다시 돌렸더니 결과가 뒤집혔다. 심판이 내용이 아니라 위치를 보고 있었던 거다.
편향을 눌러 담는 실전 기법
def pairwise_judge(judge, question, a, b):
# 양방향으로 두 번 채점해 위치 편향 상쇄
r1 = judge.decide(question, first=a, second=b) # A,B 순
r2 = judge.decide(question, first=b, second=a) # B,A 순
# r1이 A승, r2도 A승이면 확실한 A. 엇갈리면 무승부 처리
if r1 == "first" and r2 == "second":
return "A"
if r1 == "second" and r2 == "first":
return "B"
return "tie" # 위치에 흔들린 판정은 신뢰 안 함
가장 효과 본 건 이 순서 뒤집기 이중 채점이다. 두 순서에서 판정이 일치할 때만 승패로 인정하고, 엇갈리면 무승부로 버린다. 이것만으로 위치 편향의 상당 부분이 걸러졌다. 그리고 루브릭에 "길이는 평가하지 말 것", "서식이 아니라 내용의 정확성만 볼 것"을 명시하면 장황함·서식 편향도 줄어든다.
점수만 받지 말고 근거를 먼저 받아라
심판에게 점수만 뱉으라고 하면 아무렇게나 찍는다. 먼저 판단 근거를 쓰게 하고 그 다음에 점수를 내게(일종의 사고 연쇄) 하면 채점이 눈에 띄게 일관돼진다. 근거를 남기면 나중에 "왜 이렇게 매겼지"를 감사할 수도 있다.
심판을 누가 채점하나 — 메타 평가
여기가 사람들이 자주 빠뜨리는 부분이다. 심판 자체가 믿을 만한지 확인해야 한다. 방법은 간단하다. 사람이 라벨링한 골든셋 수십~수백 개에 심판을 돌려, 심판의 판정이 사람 판정과 얼마나 일치하는지를 잰다. 일치율(혹은 상관)이 낮으면 그 심판 프롬프트는 배포할 자격이 없다.
LLM 심판은 무료 자동 평가가 아니라, 사람 평가와의 일치율로 검증받아야 하는 또 하나의 모델이다. 심판을 검증하지 않고 그 점수로 의사결정하면, 편향된 자를 진실로 착각하는 셈이다.
나는 심판 프롬프트도 버전 관리하고, 골든셋 일치율이 기준 아래로 떨어지면 배포를 막는다. 심판이 흔들리면 그 위에 쌓은 모든 A/B 결론이 모래성이니까.
비용과 심판 모델 선택
심판도 결국 LLM 호출이라 돈과 시간이 든다. 평가셋이 수천 건이면 실험 한 번 돌릴 때마다 비용이 쌓인다. 나는 두 단계로 나눈다. 일상적인 회귀 모니터링은 값싼 중형 모델로 넓게 돌리고, 최종 배포를 가르는 중요한 비교에서만 상위 모델 심판을 쓴다. 심판이 피평가 대상보다 반드시 더 똑똑할 필요는 없지만, 최소한 루브릭을 정확히 따라 읽을 만큼은 돼야 한다. 너무 작은 모델은 채점 지시 자체를 흘려버린다.
한 가지 더. 심판을 단일 모델에 의존하지 말라. 여유가 되면 서로 다른 계열의 심판 두셋을 앙상블해 다수결을 내면 자기 편애와 개별 모델의 버릇을 상당히 눌러준다. 물론 비용은 배로 드니, 이건 배포를 가르는 결정적 비교에만 아껴서 쓴다.
온라인 가드로도 쓴다
심판은 오프라인 평가만이 아니라 운영 중 실시간 가드로도 요긴하다. 사용자에게 답을 내보내기 직전, 값싼 심판으로 "이 답이 질문에 실제로 답하고 있는가, 근거 문서와 모순되지 않는가"를 빠르게 확인해 통과 못 하면 재생성하거나 안전한 기본 답으로 대체한다. 다만 지연이 늘어나니, 스트리밍 응답에는 부적합하고 배치성 응답이나 민감한 도메인에만 선택적으로 건다.
자주 묻는 질문
LLM-as-a-Judge가 사람 평가를 완전히 대체하나요?
대체가 아니라 보완입니다. 사람 평가는 정확하지만 느리고 비싸서 매 실험마다 하기 어렵습니다. LLM 심판은 빠르고 싸서 반복 실험에 적합하지만 편향이 있습니다. 실무에선 심판으로 넓게 거르고, 최종 의사결정 지점에서만 사람이 검수하는 조합을 씁니다. 그리고 심판 자체를 사람 골든셋으로 주기적으로 검증해야 합니다.
절대 점수와 쌍 비교 중 뭐가 낫나요?
대체로 쌍 비교가 더 안정적입니다. LLM은 "이 답이 3점이냐 4점이냐"는 일관성이 떨어지지만, "A와 B 중 무엇이 나은가"는 비교적 일관되게 판정합니다. 다만 쌍 비교는 위치 편향이 있으므로 순서를 뒤집어 두 번 채점하고 일치할 때만 승패로 인정하는 게 좋습니다.
심판의 편향은 어떻게 줄이나요?
순서 뒤집기 이중 채점으로 위치 편향을 상쇄하고, 루브릭에 길이·서식을 평가하지 말라고 명시해 장황함·서식 편향을 억제합니다. 점수만 받지 말고 판단 근거를 먼저 쓰게 하면 일관성이 오릅니다. 심판과 피평가 모델을 다른 계열로 두면 자기 편애도 줄일 수 있습니다.
심판이 믿을 만한지 어떻게 확인하나요?
사람이 라벨링한 골든셋에 심판을 돌려 사람 판정과의 일치율이나 상관을 측정합니다. 이 메타 평가에서 일치율이 낮으면 그 심판 프롬프트로 내린 A/B 결론은 신뢰할 수 없습니다. 심판 프롬프트도 버전 관리하고 일치율이 기준 아래로 떨어지면 사용을 중단하는 게 안전합니다.

댓글 0