AI 평가 시리즈 (03): LLM-as-Judge — LLM을 사용하여 LLM을 올바르게 평가하는 방법
요약
LLM-as-Judge의 작동 방식인 점수 산정 방식과 쌍체 비교 방식을 설명하고, 평가 과정에서 발생할 수 있는 세 가지 주요 편향(위치, 장황함, 프레이밍)을 실험을 통해 분석합니다.
핵심 포인트
- LLM-as-Judge는 점수 산정(Pointwise)과 쌍체 비교(Pairwise) 방식으로 나뉩니다.
- 위치 편향(Position Bias)으로 인해 답변 순서에 따라 결과가 왜곡될 수 있습니다.
- 장황함 편향(Verbosity Bias)은 내용이 같더라도 긴 답변에 더 높은 점수를 주는 경향이 있습니다.
- 프레이밍 편향(Framing Bias) 실험을 통해 모델의 엄격함 반응성을 검증합니다.
LLM-as-Judge의 작동 방식
LLM-as-Judge는 한 LLM의 출력물에 대한 품질 평가를 다른 LLM(또는 동일한 LLM)에게 위임합니다.
두 가지 기본 형태:
점수 산정 방식 (Pointwise scoring, 단일 답변)
JUDGE_PROMPT = """이 AI 응답을 평가하세요 (차원별 1-10점):
차원: 정확성 (accuracy), 관련성 (relevance), 명확성 (clarity)
질문: {question}
...
쌍체 비교 방식 (Pairwise comparison, 두 답변)
COMPARE_PROMPT = """어떤 답변이 더 나은가요?
질문: {question}
답변 A: {answer_a}
...
쌍체 비교(Pairwise)는 두 가지 버전(프롬프트 A vs 프롬프트 B)을 비교할 때 효과적입니다. 점수 산정 방식(Pointwise)은 단일 시스템의 품질 트렌드를 시간에 따라 모니터링하는 데 더 적합합니다.
세 가지 실험: 편향(Bias)은 얼마나 심각한가?
실험 1: 위치 편향 (Position Bias)
설계: 동일한 답변 쌍을 두 번 평가합니다. 처음에는 A를 먼저 보여주고, 그다음에는 B를 먼저 보여줍니다. 편향이 없다면 승자는 순서와 무관해야 하며, 첫 번째 위치의 승률은 약 50%여야 합니다.
def experiment_position_bias():
for pair in answer_pairs:
winner_order1 = judge_pairwise(question, answer_a, answer_b) # A가 먼저
...
결과:
첫 번째 위치 승률: 67% (편향 없는 기준선: 50%)
두 번째 위치 승률: 33%
일관성 비율 (Consistency rate): 67% (편향 없는 기준선: 100%)
...
67%의 일관성 비율은 동일한 답변 쌍의 순서가 바뀔 때 판단의 33%가 뒤집힌다는 것을 의미합니다. 만약 이 Judge를 A/B 테스트에 사용한다면, 결과의 3분의 1은 답변의 품질이 아니라 제시 순서를 따르게 됩니다.
실험 2: 장황함 편향 (Verbosity Bias)
설계: 동일한 질문에 대해 두 가지 답변 버전을 준비합니다. 하나는 간결한 버전(2-3문장)이고, 다른 하나는 핵심 내용은 동일하지만 미사여구, 반복, 상세 설명이 추가된 장황한 버전입니다. 내용은 동일하며 길이만 다릅니다.
간결한 버전:
리스트는 가변적(add/remove/change)이며, 튜플은 불변(immutable)입니다.
튜플은 더 빠르고 메모리를 적게 사용하며, 딕셔너리 키나 다중 반환 값으로 작동합니다.
...
**결과:
평균 간결한 답변 점수: 7.5/10
평균 상세한 답변 점수: 8.0/10
상세도 보너스 (Verbosity bonus): +0.5 점
...
내용은 동일하지만, 더 긴 버전이 0.5점 더 높게 측정되었습니다. 하나는 간결한 답변을 생성하고 다른 하나는 상세한 답변을 생성하는 두 프롬프트를 평가했을 때, Judge(판사)는 어떤 버전이 실제로 사용자에게 더 도움이 되는지와 관계없이 체계적으로 상세함(verbosity)을 선호합니다.
실험 3: 프레이밍 편향 (Framing Bias)
설계 (Design): 동일한 답변을 두 가지 프롬프트로 평가 — 표준 Judge 프롬프트 vs 엄격한 전문가 프롬프트 (일반적인 답변은 6/10을 넘지 못하며, 오직 탁월한 답변만이 8+에 도달한다고 명시적으로 언급).
결과 (Results):
표준 프롬프트 평균 점수: 8.0/10
엄격한 전문가 프롬프트 평균 점수: 8.0/10
프레이밍 차이 (Framing delta): +0.00 점
의미: glm-4-flash는 프롬프트에 명시된 엄격함 수준에 반응하지 않습니다 — 명시적으로 더 높은 기준을 제시했음에도 점수는 동일하게 유지됩니다. 이는 유용한 정보입니다. 이 모델의 경우, 프롬프트의 문구가 점수를 체계적으로 부풀리거나 낮출까 봐 걱정할 필요가 없습니다. 하지만 더 강력한 모델들(GPT-4, Claude)은 더 높은 프레이밍 민감도(framing sensitivity)를 보일 수 있습니다. 가정하기 전에 항상 테스트하십시오.
세 가지 완화 전략 (Three Mitigation Strategies)
위치 편향 완화: 다회차 무작위화 (Multi-Round Randomization)
33%의 뒤집기 비율(flip rate)을 보이는 단일 평가는 신뢰할 수 없습니다. 해결책: 무작위 순서로 각 쌍을 여러 번 평가하십시오.
import random
def pairwise_with_randomization(judge, question, answer_a, answer_b, rounds=5):
...
5회의 무작위화를 거치면 위치 편향(position bias)이 평균 50%로 수렴합니다. 비용은 API 호출이 5배 증가하지만, 신뢰도는 실질적으로 훨씬 높아집니다.
상세도 편향 완화: 차원별 점수 산정 + 상세도 억제 지침 (Per-Dimension Scoring + Anti-Verbose Instructions)
옵션 A: 통합 점수 없이 각 차원을 별도로 점수 산정
ANTI_VERBOSE_JUDGE = """이 응답을 평가하십시오. 각 차원을 1-5점으로 독립적으로 점수 매기십시오:
1. 정확성 (Accuracy): 기술적 내용이 정확한가? (길이와 무관)
...
옵션 B: 프롬프트 내 명시적 선언
"참고: 응답 길이는 점수에 영향을 미치지 않습니다. 간결하고 정확한 답변과 상세하고 정확한 답변은 동일한 점수를 받아야 합니다."
자기 편향 (Self-Bias) 완화: 더 강력하거나 다른 판사 (Judge) 모델 사용
하나의 모델로 생성하고 동일한 모델로 평가하면, 자기 편향 (Self-bias)으로 인해 체계적인 과대평가가 발생합니다.
# 더 저렴한 모델로 생성
generator = ChatOpenAI(model="glm-4-flash", ...)
...
비용은 증가하지만, 평가의 신뢰도는 향상됩니다. 중요한 출시 결정을 내릴 때는 자기 평가 (Self-evaluation) 대신 Claude를 사용하여 GPT의 출력을 평가하거나(또는 그 반대로) 하십시오.
프로덕션 준비 완료된 판사 프롬프트 템플릿 (Production-Ready Judge Prompt Template)
세 가지 완화 조치를 모두 포함:
PRODUCTION_JUDGE_PROMPT = """당신은 엄격한 기술 콘텐츠 검토자입니다.
채점 규칙:
...
설계 선택 사항 (Design choices):
- 1-10이 아닌 1-5 사용: 분산 (Variance)을 줄입니다. LLM은 미세한 차이(예: 7점과 8점)를 구분하는 데 일관성이 떨어집니다.
- "3점 = 기대치 충족": LLM이 3점을 부정적으로 취급하여 전체적으로 점수가 인플레이션되는 현상을 방지합니다.
- 추론 (Reasoning) 요구: 판사 (Judge)가 가장 낮은 점수를 받은 차원에 대해 설명하도록 강제하여, 임의적인 채점을 줄입니다.
- 장황함 방지 선언 (Anti-verbosity declaration): 장황함 편향 (Verbosity bias)에 명시적으로 대응합니다.
실무 권장 사항
단일 평가는 신뢰도가 제한적입니다: 위치 편향 (Position bias)으로 인한 33%의 뒤집기 확률(Flip probability)을 고려할 때, 단일 결과만으로는 의사 결정을 내리기에 충분하지 않습니다. 중요한 비교를 수행할 때는 최소 3라운드를 실행하고, 단일 결과가 아닌 승률 (Win rates)을 보고하십시오.
확장하기 전에 보정(Calibrate)하십시오: 새로운 판사 프롬프트 (Judge Prompt)를 대규모로 실행하기 전에, 사람이 주석을 단(Human-annotated) 20~30개의 샘플로 테스트하십시오. 판사 점수와 인간 평가 사이의 스피어만 상관계수 (Spearman correlation)가 의사 결정에 사용하기 전 0.7을 초과해야 합니다.
점수 분포를 모니터링하십시오: 만약 판사가 출력물의 90%에 7~8점을 부여한다면, 분포가 너무 집중되어 있으며 판사가 변별력 (Discriminative power)을 갖추지 못한 것입니다. 프롬프트를 조정하거나 더 강력한 모델을 사용하십시오.
시나리오별 특화된 판사(Judge) 사용: 코드 생성 판사(Code generation Judge)는 정확성(Correctness)과 실행 가능성(Runnability)에 집중해야 하며, 요약 판사(Summarization Judge)는 충실도(Faithfulness)에 집중해야 하고, 대화형 AI 판사(Conversational AI Judge)는 유용성(Helpfulness)에 집중해야 합니다. 모든 시나리오에 적용되는 범용 판사(Generic Judge)는 평가 정밀도(Evaluation precision)를 떨어뜨립니다.
요약 (Summary)
세 가지 실험을 통해 세 가지 구체적인 실행 항목(Action items)이 도출되었습니다:
- 위치 편향 (Position bias, 첫 번째 위치 승률 67%): 쌍체 비교 평가(Pairwise evaluation) 시 여러 라운드에 걸쳐 순서를 무작위로 섞어야 합니다. 33%의 뒤집기 확률(Flip probability)이 없다면 단판 승부(Single-shot) 결과는 신뢰할 수 없습니다.
- 장황함 편향 (Verbosity bias, +0.5점): 프롬프트에 "길이는 점수에 영향을 미치지 않는다"라고 명시하고, 이를 상쇄하기 위해 간결성(Conciseness) 차원을 추가하십시오.
- 프레이밍 편향 (Framing bias, glm-4-flash에서 변화량 0.0): 이 모델은 프롬프트의 엄격함 수준(Strictness level)에 반응하지 않습니다. 하지만 모델마다 다르게 동작하므로, 가정하기 전에 항상 검증하십시오.
참고 문헌 (References)
- Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena (Zheng et al., 2023)
- 전체 데모 코드: eval-03-llm-judge
실제 기업급 워크플로우에서 검증된 AI 에이전트와 기술의 큐레이션 마켓플레이스인 PrimeSkills를 확인해 보세요. 군더더기 없이 실제로 작동하는 것들만 제공합니다.
저의 홈페이지에서 더 유용한 지식과 흥미로운 제품들을 찾아보세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기