-
채점자도 AI라면 — LLM-as-judge로 답변 품질을 자동 평가할 때 빠지는 함정IT 2026. 7. 29. 22:00
개인 로컬 AI 서버에서 챗봇 하나를 굴리다 보면 금세 부딪히는 벽이 있다. 답변이 좋아졌는지를 어떻게 아느냐는 것이다. 프롬프트를 한 줄 바꾸고, 모델을 다른 버전으로 갈아끼우고, 검색해 온 문서를 끼워 넣는 방식을 바꿨다. 그래서 답이 나아졌는가? 직접 100개를 읽어 보면 알겠지만, 매번 그러기엔 양이 너무 많다.
여기서 흔히 쓰는 카드가 LLM-as-judge다. 한국어로 풀면 "LLM에게 채점관 역할을 맡기는 패턴" — 평가하려는 답변을 또 다른 LLM에게 보여 주고 "이 답이 얼마나 좋은가"를 점수로 매기게 한다. 사람이 일일이 안 봐도 되니 확장 가능하다. 문제는, 그 채점관도 결국 LLM이라는 점이다. 채점자 자신이 편향되어 있으면 평가 결과가 통째로 오염된다.
왜 채점을 LLM에게 맡기는가
AI 출력은 비결정적이다 — 같은 질문을 두 번 던져도 글자 단위로 똑같은 답이 나오지 않는다. 그래서 "정답과 글자가 일치하는가" 같은 결정적 채점(exact match, 정답 문자열과 1:1 비교)이 통하지 않는다. 요약문이 잘 됐는지, 설명이 친절한지, 코드 리뷰가 핵심을 짚었는지 — 이런 건 정답표 한 장으로 맞다/틀리다를 가를 수 없다.
사람이 직접 보는 방법(human evaluation, 사람이 답변을 읽고 점수 매기기)은 가장 믿을 만하지만 느리고 비싸다. 답변 1,000개에 평가자 한 명이 붙으면 며칠이 걸린다. LLM-as-judge는 그 채점 노동을 LLM에게 떠넘겨, 1,000개를 몇 분 만에 점수화한다. 가격은 사람의 수십 분의 일이다.
다이어그램 설명. 위 그림은 LLM-as-judge의 가장 기본 골격이다. 사람이 답변을 읽는 자리에 채점관 LLM이 들어가고, 그 채점관에게는 "무엇을 기준으로 점수를 줄지"를 적은 기준표가 함께 주어진다. 핵심은 채점관이 단순히 점수만 뱉는 게 아니라 점수와 함께 그 근거를 내놓게 한다는 점이다 — 근거를 남기면 나중에 채점이 이상할 때 어디서 틀렸는지 추적할 수 있다. 이 그림만 보면 "LLM 하나 더 붙이면 끝"처럼 보이지만, 함정은 바로 그 채점관이 사람처럼 객관적이지 않다는 데 있다. 다음 절이 그 이야기다.
채점관도 편향되어 있다
채점관이 LLM이라는 건, 채점관 자신도 비결정적이고 편향(bias, 특정 방향으로 일관되게 치우치는 성향)을 가진다는 뜻이다. 대표적인 세 가지가 실제 연구와 운영에서 반복 확인됐다.
길이 편향(length bias). 채점관 LLM은 긴 답을 후하게 주는 경향이 있다. 내용이 같아도 문장이 길고 항목이 많으면 "더 충실하다"고 착각한다. 사람도 두꺼운 보고서를 보면 일을 많이 했겠거니 하는 것과 비슷하다 — 분량과 품질을 헷갈린다.
자기 편향(self-preference bias). 채점관은 자기 스타일과 닮은 답에 점수를 후하게 준다. 같은 계열 모델이 쓴 답, 자기가 즐겨 쓰는 표현·구조를 따르는 답을 "잘 썼다"고 평가하기 쉽다. 채점관과 평가 대상이 같은 모델이면 이 편향이 특히 커진다.
순서 편향(position bias). 두 답을 나란히 놓고 "A와 B 중 어느 쪽이 나은가"를 물으면, 채점관은 먼저 제시된 쪽을 고르는 쏠림이 있다. 내용과 무관하게 자리 순서가 표를 가른다.
다이어그램 설명. 위 그림은 채점관이 가진 세 가지 편향과, 각 편향을 누르는 통제 기법을 짝지은 것이다. 왼쪽 위에서 아래로 길이·자기 스타일·순서 세 편향이 갈라져 나오고, 각 편향 오른쪽에 그에 대응하는 처방이 붙어 있다. 핵심은 편향마다 약점이 다르므로 처방도 달라야 한다는 점이다 — 긴 답 선호는 길이를 정규화(normalize, 길이 차이의 영향을 수치적으로 깎아 내는 처리)하고 기준표에서 "분량" 같은 항목을 빼면 줄고, 자기 스타일 선호는 채점관과 평가 대상을 아예 다른 모델로 갈라 놓으면 줄고, 순서 쏠림은 같은 쌍을 자리를 바꿔 두 번 평가해 상쇄한다. 흔한 오해는 "프롬프트에 '공정하게 채점해'라고 적으면 된다"는 것인데, 편향은 모델의 학습된 성향이라 그 한 줄로는 거의 사라지지 않는다.
편향을 다수로 누른다 — 단일 채점관 vs 다수결
채점관 하나의 판단을 그대로 믿으면, 그 채점관의 편향과 그날의 변덕이 평가에 통째로 박힌다. 가장 효과 좋은 처방은 단순하다 — 여러 채점관에게 같은 답을 채점시키고 다수결로 묶는 것이다. 비결정성은 여러 표본을 모아 평균 내면 잦아든다. 한 사람의 변덕은 흔들리지만 열 명의 평균은 잘 안 흔들리는 것과 같은 원리다.
▲ 단일 채점관 — 한 명의 점수를 그대로 신뢰
다이어그램 설명. 위 그림은 채점관 한 명에게 의존하는 가장 단순한 구성이다. 답변이 채점관 한 명을 거쳐 점수 하나가 나오고, 그게 곧 결론이 된다. 문제는 그 점수가 채점관의 진짜 판단인지, 아니면 그 회차의 우연한 흔들림인지 구별할 방법이 없다는 점이다. 채점관이 마침 그 답의 길이에 흔들렸거나 순서에 쏠렸어도, 단일 점수만 보면 알아챌 수 없다.
▲ 다수결 채점 — 여러 채점관의 표를 묶음
다이어그램 설명. 위 그림은 같은 답변을 여러 채점관이 따로 채점한 뒤 그 표를 묶는 구성이다. 세 채점관의 점수가 한곳으로 모여 평균이나 다수결로 최종 점수가 정해진다. 여기서 진짜 값어치는 최종 점수 자체보다 표가 얼마나 갈렸는가에 있다 — 세 명이 7, 6, 7로 모이면 믿을 만하고, 2, 7, 9로 흩어지면 그 항목은 채점관도 헷갈린다는 신호다. 이렇게 흩어진 항목만 골라 사람에게 넘기면, 사람의 검수 노동을 전체가 아니라 정말 애매한 소수에만 집중시킬 수 있다. 단일 채점관 구성에서는 이 "얼마나 갈렸나" 신호 자체가 없으니, 어떤 답을 사람이 다시 봐야 하는지도 알 수 없다.
적대적 반증 — "이 답이 왜 틀렸는지" 먼저 시켜 본다
점수를 후하게 주는 쏠림을 막는 또 다른 방법은, 채점관에게 칭찬 대신 흠집부터 찾게 하는 것이다. 이걸 적대적 검증(adversarial verification)이라 부른다 — 평가자가 "이 답이 맞다"를 증명하는 대신 "이 답이 왜 틀렸을 수 있는가"를 먼저 시도한다. 반증을 못 찾을 때 비로소 점수를 인정한다.
다이어그램 설명. 위 그림은 답변을 먼저 공격해 보고, 그 결과로 점수를 보정하는 흐름이다. 답변이 들어오면 곧장 점수를 주는 게 아니라 "이 답의 허점은 무엇인가"를 먼저 캐묻고, 치명적 허점이 나오면 감점하고 그 근거를 남기며, 못 찾으면 점수를 인정한다. 이 방식이 좋은 이유는 채점관의 기본 성향이 칭찬 쪽으로 기울어 있기 때문이다 — 그냥 "점수를 매겨"라고 하면 적당히 후하게 주지만, "허점을 찾아"라고 시키면 표면적으로 그럴듯한 답에 숨은 사실 오류나 빠진 전제를 더 자주 잡아낸다. 놓치기 쉬운 함정은, 반증을 시키면 채점관이 트집을 위한 트집을 잡아 멀쩡한 답까지 깎을 수 있다는 점이다. 그래서 "치명적 허점"의 기준을 기준표에 명시해, 사소한 흠과 진짜 결함을 구분하게 해야 한다.
순서·길이 편향을 직접 통제한다
순서 편향은 가장 깔끔하게 상쇄할 수 있는 편향이다. 두 답 A, B를 비교할 때, (A 먼저, B 나중)으로 한 번, (B 먼저, A 나중)으로 한 번, 이렇게 자리를 바꿔 두 번 평가한다. 두 번의 결과가 일치하면 그 판단은 순서와 무관하게 견고한 것이고, 자리를 바꿨다고 승자가 바뀌면 그 비교는 순서 편향에 오염된 것이라 버리거나 무승부 처리한다.
다이어그램 설명. 위 그림은 답변 쌍을 자리를 바꿔 두 번 평가해 순서 편향을 걸러 내는 흐름이다. 같은 쌍을 자리만 바꿔 양방향으로 평가한 뒤, 두 번의 승자가 같으면 견고한 판단으로 채택하고 다르면 순서에 휘둘린 것으로 보아 무승부로 처리한다. 이 방법의 장점은 편향을 "줄이는" 게 아니라 측정해서 골라낸다는 데 있다 — 어떤 비교가 순서에 오염됐는지를 데이터로 드러내므로, 오염된 비교를 결과에서 명시적으로 제외할 수 있다. 길이 편향은 이만큼 깔끔하진 않지만, 비교하는 두 답의 길이를 비슷하게 맞추거나 점수에서 길이 효과를 수치적으로 깎아 내는 식으로 비슷하게 완화한다. 호출이 두 배로 드는 게 비용이지만, 순서 하나에 승부가 뒤집히는 평가를 신뢰하는 것보다는 싸다.
효과와 트레이드오프 — 대체가 아니라 1차 필터
지금까지의 네 가지 처방 — 기준표로 일관성 높이기, 다수결로 변덕 누르기, 적대적 반증으로 후함 깎기, 양방향 평가로 순서 상쇄하기 — 를 합치면, 채점관 하나를 그냥 믿는 것보다 훨씬 신뢰할 만한 자동 평가가 된다. 사람이 1,000개를 다 안 봐도 답변 품질을 수치로 추적할 수 있고, 프롬프트를 바꿨을 때 점수가 오르는지 떨어지는지를 몇 분 만에 확인한다. 확장 가능한 품질 측정이라는 게 이 패턴의 가장 큰 값어치다.
다만 공짜는 아니다. 채점관을 여러 번, 양방향으로 호출하니 비용과 지연이 늘어난다 — 답변 1,000개를 3명의 채점관이 양방향으로 보면 호출이 수천 번이다. 그리고 더 중요한 한계가 있다. 이 모든 처방을 동원해도 채점관의 편향을 완전히 없애지는 못한다. 다수결은 편향을 줄이지만, 세 채점관이 모두 같은 길이 편향을 공유하면 다수결로도 안 걸러진다. 적대적 반증도 채점관이 못 보는 결함은 못 잡는다.
그래서 LLM-as-judge는 사람 검수의 대체가 아니라 1차 필터로 자리매김해야 한다. 수천 개의 답을 자동으로 거른 뒤, 채점관들이 표가 갈렸다고 표시한 소수의 애매한 답만 사람이 본다. 사람의 눈을 가장 가치 있는 곳 — 자동 채점이 헷갈린 자리 — 에 집중시키는 것, 그것이 채점자도 AI인 시대에 품질을 지키는 현실적인 방법이다.
이 글은 생성형 AI의 도움을 받아 작성되었습니다. 원본 자료를 기반으로 AI가 초안을 생성하고, 작성자가 검토·편집하였습니다.
'IT' 카테고리의 다른 글
산문은 손실 압축, 코드는 무손실 — 무엇을 지킬 수 있는지는 '중요도'가 아니라 '식별 가능성'이 정한다 (0) 2026.07.31 축약어는 토큰을 아끼지 못한다 — caveman의 규칙 (0) 2026.07.31 AI 코딩 에이전트의 토큰 절약 — 뇌가 아니라 입을 줄인다 (0) 2026.07.31 자율 에이전트인가, 통제된 하네스인가 — LLM을 부리는 두 가지 모델 (0) 2026.07.30 AI 시스템 테스트, 무엇을 가짜로 두고 무엇을 진짜로 돌릴까 — mock 경계 원칙 (0) 2026.07.29 스킬이 50개 넘으니 엉뚱한 게 불렸다 — 겹침을 임베딩으로 자동 탐지하기 (0) 2026.07.29 스킬은 키워드가 아니라 '의미'로 불려 온다 — 의미 기반 매칭의 양날 (0) 2026.07.28 어떤 모델보다 '얼마나 깊게 생각하게 할까' — model × effort 2축으로 LLM 제어하기 (0) 2026.07.28 에이전트 셋을 동시에 풀었더니 서로의 코드를 덮어썼다 — git worktree로 푼 병렬 격리 (0) 2026.07.28 Docker 없이 격리하기 — 단일 로컬 서버에서 사고 반경을 줄이는 네 가지 경량 수단 (0) 2026.07.27