프롬프트를 고치다 보면 어느 쪽이 나은지 판단해야 하는 순간이 계속 온다. 사람이 매번 읽기엔 양이 많아서 LLM에게 두 결과를 보여 주고 고르게 했다. 흔히 LLM-as-a-judge라고 부르는 방식이다.
몇 주 써 보고 내린 결론은 이렇다. 판정자 점수는 참고용으로는 쓸 만했지만, 그걸 결론으로 삼았다가 두 번 틀렸다. 판정자는 자기와 같은 계열 모델의 글을 편애하는 것처럼 보였고, 같은 조건을 반복해도 결과가 꽤 흔들렸다. 아래는 내 실험에서 본 것이다. 과제 성격이나 모델 조합이 다르면 다르게 나올 수 있다.
어떤 실험이었나
과제는 긴 서술형 문장 생성이었다. 같은 입력에 대해 프롬프트와 모델 조합을 바꿔 가며 출력을 만들고, 두 출력을 블라인드로 나란히 놓고 판정자에게 어느 쪽이 나은지 고르게 했다. 위치 편향을 줄이려고 좌우 순서는 번갈아 바꿨다.
비교 대상에는 사람이 직접 손본 기준 답안도 넣었다. 판정자가 제대로 고르는지 가늠하는 기준점 역할이다. 판정자는 처음엔 한 계열 모델만 썼다.
판정자 계열을 바꾸니 순위가 바뀌었다
처음 결과는 깔끔했다. 기준 답안이 거의 항상 이겼고, 판정 근거도 그럴듯했다. 점수가 너무 한쪽으로 몰려 있는 게 조금 이상하긴 했다.
판정 근거 문구를 모아 보니 신호가 하나 있었다. 지는 쪽에 “흔한 표현”, “같은 틀"이라는 지적이 유독 자주 붙었다. 그런데 지는 쪽은 대부분 판정자와 다른 계열 모델이 쓴 글이었다.
그래서 판정자를 바꿨다. 같은 쌍을 다른 계열 모델 판정자에게 다시 보였다. 결과가 크게 달라졌다. 한 계열 판정단에서 압도적으로 이기던 쪽이, 다른 계열 판정자에게는 반반 근처로 내려왔다. 같은 쌍인데 판정자에 따라 승률이 두 배 가까이 차이 났다.
판정자가 품질을 보는 것과 별개로, 자기 계열 문체를 알아보고 더 높게 치는 몫이 있는 것 같았다. 찾아보니 이건 나만 본 현상이 아니었다. 판정자가 자기 출력, 또는 자기에게 익숙한 출력을 선호하는 경향은 연구로도 보고돼 있다(Self-Preference Bias in LLM-as-a-Judge).
섞어서 낸 결론도 다시 뒤집혔다
편향을 알았으니 판정단을 섞었다. 서로 다른 계열 판정자의 결과를 같이 보고, 양쪽에서 모두 이기는 것만 인정했다. 그렇게 보니 차이를 만드는 건 모델이라는 결론이 나왔다. 어떤 모델로 생성하느냐가 격차의 대부분이라는 해석이었다.
이것도 일주일 안에 틀린 걸로 드러났다. 같은 모델을 그대로 두고 프롬프트만 손으로 정리해 봤더니, 그 모델이 기존 결과를 상당히 큰 차이로 이겼다. 모델 탓이라고 봤던 격차의 상당 부분이 사실은 프롬프트였다.
원인을 보니 프롬프트가 그동안 누적돼 있었다. 문제가 생길 때마다 “이렇게 하지 마라"는 문장을 덧붙였고, 그게 쌓여서 금지 문장이 수십 개, 서로 충돌하는 지시도 여러 쌍 있었다. 모델은 그 사이에서 눈치를 보며 쓰고 있었다. 판정단을 섞으면 판정 편향은 줄지만 실험 설계의 문제까지 잡아 주진 않는다. 모델 차이로 보이는 것이 프롬프트 차이일 수 있다는 걸 이때 배웠다.
판정 자체의 노이즈
그다음엔 판정을 얼마나 믿을지가 궁금해졌다. 그래서 같은 조건끼리 비교하는 A/A 테스트를 돌렸다. 똑같은 설정의 출력 두 묶음을 판정자에게 비교시키면 이론상 50% 근처가 나와야 한다.
실제로는 몇 번 돌릴 때마다 40%대 초반에서 50%대 중반까지 오갔다. 아무 차이가 없는데도 10%p 넘게 흔들린 것이다. 그전까지 “55% 이겼으니 개선"이라고 판단한 것들 중 일부는 노이즈였을 수 있었다. 실제로 그동안 반영한 변경 몇 개를 다시 판정해 보니 확실히 나아졌다고 말할 수 있는 건 많지 않았다.
이후로는 기준을 실험 전에 정해 두고 있다. 예를 들어 한 번 돌려서 62% 이상이면서 통계적으로 유의하거나, 두 번 돌린 합이 58% 이상일 때만 개선으로 본다. 숫자 자체는 A/A에서 본 흔들림 폭에 맞춘 것이라 환경마다 다를 것이다. 중요한 건 결과를 보고 나서 기준을 정하지 않는 것이다.
형식에 대한 편향도 있었다. 내 경우 판정자는 글 끝을 선택지로 닫는 형식을 내용과 상관없이 선호하는 경향을 두 번 보였다. 판정자가 좋아하는 형식이 실제 사용자가 좋아하는 형식이라는 보장은 없다.
가장 크게 어긋난 사례도 있었다. 판정자가 거의 만장일치로 이긴다고 한 변경을 실제로 내보냈는데, 사용자 쪽 지표는 차이가 없었다. 블라인드에서 압승한 것과 사람이 실제로 더 오래 쓰는 것은 다른 이야기였다.
지금 쓰는 방식
판정자를 버리진 않았다. 빠르게 많이 비교하는 데는 여전히 쓸 만하다. 다만 쓰는 방식을 바꿨다.
- 판정자 계열을 섞는다. 생성한 모델과 다른 계열 판정자를 반드시 하나 넣는다. 한쪽 판정단에서만 이기는 결과는 보류한다.
- 기준을 먼저 적는다. 몇 퍼센트 이상이면 채택인지 실험 전에 정한다.
- A/A로 노이즈 폭을 잰다. 판정 설정을 바꾸면 A/A부터 다시 돌린다.
- AI 점수를 목표로 두지 않는다. 판정 점수를 올리는 데 집중하면 판정자 취향에 맞추게 된다.
- 최종 판단은 실제 사용 지표와 사람 눈으로 한다. 판정자가 갈리는 지점에서는 직접 블라인드로 읽고 고른다.
전환이 거의 없는 상황에서 A/B 테스트를 어떻게 판정할지 고민했던 것과 비슷한 결론이다. 측정 도구가 편하다고 그 도구가 보여 주는 숫자를 목표로 삼으면, 언젠가 도구의 버릇을 최적화하고 있게 된다. AI가 잘 맞았던 일과 안 맞았던 일을 정리할 때도 비슷한 느낌이 있었다. AI는 많이 만들고 빨리 비교하는 데 강하지만, 무엇이 더 나은지 최종으로 정하는 일은 아직 사람 쪽에 남겨 두는 게 맞았다.