
세 번째 판결자 추가하기: 교차 LLM 평가가 승자에 대해 변화시킨 것
요약
Jira 백로그 자동 정리를 위한 LLM 평가 파이프라인의 고도화 과정을 다룹니다. Gemini의 환각 문제를 해결하기 위해 Claude와 GPT를 활용한 교차 평가(Cross-evaluation) 방식을 도입하고, 인간의 검토를 포함한 가중치 기반 종합 점수 산출법을 제안합니다.
핵심 포인트
- LLM 판결자의 편향을 확인하기 위해 교차 평가 방식 도입
- Gemini가 산술 계산을 환각으로 오인하는 문제 식별
- 인간(50%), Gemini(25%), 교차 판결자(25%)의 가중치 적용
- 모델 간의 엄격함/관대함 차이를 분석하여 평가 신뢰도 향상
ML 및 LLM을 활용한 Jira 백로그 자동 정리 시리즈의 파트 3입니다. 원래의 파이프라인과 첫 번째 Gemini 대 인간 평가에 대한 파트 1 및 파트 2를 읽어보세요.
파트 2에서 이어지는 내용
파트 2에서는 두 개의 클러스터링 (Clustering) 파이프라인을 두 개의 LLM을 통해 비교하였고, Gemini가 판결을 내린 후 저의 자체 검토를 통해 확인했습니다. 제 기억에 남는 결과는 Gemini가 올바른 산술 계산을 환각 (Hallucination)으로 계속 표시했다는 점입니다. 특히 모델이 단순히 내용을 인용하는 것이 아니라 무언가를 계산해야 하는 출력물에서 그러했습니다.
그 결과는 명백한 후속 질문을 던졌습니다. 이것이 Gemini 특유의 기벽인지, 아니면 LLM 판결자들이 일반적으로 보이는 현상인지 말입니다. 이를 확인하는 유일한 방법은 다른 종류의 판결자를 추가하는 것입니다. 또 다른 중립적인 제3자가 아니라, 평가 대상인 두 LLM이 서로의 작업에 점수를 매기게 하는 방식입니다. 따라서 저는 Claude Sonnet 4.5가 GPT-5.5의 6개 출력물 모두에 점수를 매기게 했고, GPT-5.5가 Claude의 6개 출력물 모두에 점수를 매기게 했습니다. 이때 Gemini가 사용했던 것과 동일한 루브릭 (Rubric)을 사용했습니다.
이렇게 하면 모든 출력물에 대해 두 개가 아닌 세 개의 독립적인 점수를 얻게 됩니다: Gemini, 저, 그리고 해당 출력을 생성하지 않은 모델입니다. 이는 파트 2에서 답할 수 없었던 두 가지 사항, 즉 제가 신뢰할 수 있는 카파 계수 (Kappa score)와 "매니저에게 어떤 것을 가져가야 하는가"에 대한 실제적인 답변을 얻기에 충분합니다.
자기 평가가 아닌 교차 판결을 하는 이유
이 설정이 무엇을 테스트하고 무엇을 테스트하지 않는지 명확히 하자면, Claude는 자신의 출력을 점수 매기지 않으며 GPT-5.5 또한 마찬가지입니다. 이것은 모델이 자신에게 유리하게 점수를 주는지 확인하는 것이 아닙니다. 저에게는 그 데이터가 없습니다. 이것은 모델이 중립적인 판결자와 인간에 비해 _경쟁자_의 출력물에 대해 더 엄격한지 또는 더 관대한지를 확인하는 것입니다. 질문은 다르지만, 여전히 유용합니다.
세 판결자의 가중치 설정
세 점수를 모두 동일하게 평균 내는 것은 생각하자마자 잘못된 방식이라는 느낌이 들었습니다. Gemini와 교차 판결자(cross-judge)는 모두 LLM이며, 파트 2에서 이미 이들이 가장 중요한 기준(데이터 합성 (Data Synthesis), 연령 인지 추론 (Age-Aware Reasoning))에 대해 특정 사각지대(검증되지 않은 추론을 환각 (hallucination)으로 취급하는 것)를 공유한다는 점을 보여주었습니다. 만약 세 명의 평가자 중 두 명이 상관관계가 있는 편향 (bias)을 공유한다면, 그 편향은 상쇄되지 않습니다. 오히려 3분의 2의 투표권을 갖게 됩니다.
따라서 여기서 종합 점수 (composite score)는 가중치가 부여됩니다: 인간 50%, Gemini 25%, 교차 판결자 25%. 구체적으로, 모든 출력물의 모든 기준에 대해 다음과 같이 계산합니다:
composite = 0.5 × Human_score + 0.25 × Gemini_score + 0.25 × Cross-judge_score
그런 다음, 모든 기준이 모든 출력 유형에 적용되는 것은 아니므로, 실제로 적용되는 기준들에 대해 종합 점수를 합산하고 적용 가능한 최대치로 나누었습니다:
% score = sum(composite scores across applicable criteria) / (5 × count of applicable criteria)
이것이 아래 승자 표에 있는 수치입니다. 이 수치는 인간의 판단에 가장 큰 가중치를 두었을 때, _이 출력물이 얼마나 좋은가_라는 질문에 답합니다. 또한 환각 플래그 (hallucination flags)는 조용히 평균화되어 사라지지 않습니다. 만약 제가 특정 주장을 이미 검토하고 정당하다고 판단했다면 (파트 2의 GPT-5.5 PM 보고서와 같이), 그 결정은 유지됩니다. 만약 제가 명시적으로 확인하지 않은 주장에 대해 플래그가 발생한다면, 그것은 다수결로 해결되는 대신 미결 상태의 주의 사항으로 남습니다.
충분한 데이터와 함께하는 Kappa
파트 2에서는 코헨의 카파 (Cohen's Kappa)를 생략했습니다. 모델당 6개의 출력물로는 계수 (coefficient)를 신뢰하기에 충분하지 않았기 때문입니다. 이제 세 쌍의 판결자가 생기면서, 두 모델을 통합하면 비교당 48개의 평가된 기준-출력 쌍을 얻을 수 있습니다. 이는 과도하게 해석하지 않고도 이차 가중 카파 (quadratic-weighted Kappa)를 실행하기에 충분한 양입니다 (이 점수들은 단순 카테고리가 아닌 1~5점 사이의 서열 척도 (ordinal scores)이므로, 1점 차이의 오류가 4점 차이의 오류와 동일하게 취급되지 않아야 하기에 여기서 적절합니다).
이 숫자가 실제로 무엇에 답하고 있는지 정확히 짚고 넘어갈 가치가 있습니다. 왜냐하면 이는 앞서 언급한 종합 점수 (composite score)와는 다른 질문이기 때문입니다. 종합 점수는 '이 출력물이 얼마나 좋은가'를 묻습니다. 카파 (Kappa)는 더 좁은 범위를 묻습니다: '두 판결자가 동일한 대상을 평가할 때, 단순히 우연히 일치할 확률을 넘어 얼마나 자주 같은 결론에 도달하는가?' 한 판결자가 다른 판결자와 지속적으로 일치할 수 있지만, 두 판결자 모두 틀릴 수도 있습니다. 카파 (Kappa)는 어떤 판결자가 진실에 더 가까운지는 알지 못하며 상관하지도 않습니다. 이는 오직 일관성 (consistency)만을 측정합니다.
매번 통합된 48개 쌍의 리스트를 사용하여 세 판결자 쌍 각각에 대해 sklearn.metrics.cohen_kappa_score(weights='quadratic')를 실행하였으며, 결과에 Landis & Koch의 표준 구간(0.21–0.40 = "fair", 0.41–0.60 = "moderate")을 라벨링했습니다. 이는 단순히 소수점 수치를 인용하는 대신 카파 (Kappa) 값을 읽는 관례적인 방식입니다:
| 판결자 쌍 | 가중 카파 (Weighted Kappa) | 일치도 (Agreement) |
|---|---|---|
| Gemini vs. 나 | 0.365 | Fair |
| ... |
저는 두 LLM 판결자가 저와 일치하는 정도보다 서로 더 많이 일치할 것이라고 예상했습니다. 하지만 결과는 달랐습니다. 교차 계열 판결자(cross-family judge) — 즉 Claude가 GPT의 결과물을 평가하고, GPT가 Claude의 결과물을 평가하는 방식 — 가 Gemini보다 저의 평가에 더 가깝게 나타났습니다. 왜 그런지에 대한 확신 있는 설명은 없습니다. 두 판결자 모두 정확히 동일한 루브릭 (rubric)과 프롬프트 (prompt)로 실행되었으므로 프롬프트의 차이는 아닙니다. 이는 교차 평가 설정 자체의 특수성이라기보다, 증거를 가중하는 방식에서 나타나는 이 특정 모델들의 특성일 수 있습니다. 이 결과에 큰 의미를 부여하기 전에 다른 데이터셋에서 이 현상이 반복되는지 확인하고 싶습니다.
그래서, 누가 승자인가?
위의 가중치를 적용하여 세 판결자를 모두 결합했을 때, Claude Sonnet 4.5가 모든 아티팩트 (artifact) 유형에서 앞섰으며, 각 모델 내에서는 TF-IDF 파이프라인이 문장 임베딩 (sentence embeddings)을 매번 이겼습니다:
| Artifact | 승리 조합 | 종합 점수 |
|---|---|---|
| Duplicate List | Claude + TF-IDF | 55.0% |
| ... |
이는 제가 예상했던 것보다 더 깔끔한 결과입니다. 파트 1에서 암시했던 것처럼 아티팩트 (artifact) 유형에 따라 파이프라인 결과가 나뉠 것이라고 가정했었습니다. 대신, TF-IDF의 단순함이 전반적으로 유지되었는데, 이는 이것이 임베딩 (embeddings) 대 TF-IDF에 대한 일반적인 판결이라기보다 키워드가 밀집된 백로그 (backlog)라는 점을 시사합니다.
하지만 이를 확정된 것으로 간주하기 전에 고려할 점이 있습니다. 승리한 PM 보고서는 교차 판결 (cross-judging) 과정에서 GPT-5.5가 지적한 두 개의 Claude 출력물 중 하나였습니다. GPT-5.5는 "확인된 중복 쌍 8개", "미결 TLS/SASL 버그 39개", "6개 클러스터 중 4개가 높은 정렬 (alignment)을 가짐"과 같은 구체적인 수치들이 원문 텍스트에서 직접적으로 입증되지 않는다고 언급했습니다. Gemini는 이 부분을 지적하지 않았으며, 저 또한 GPT의 파트 2 사례에서 했던 것처럼 스스로 판단을 내리지 않은 상태였습니다.
다시 돌아가 확인해 보았습니다. "확인된 중복 쌍 8개"와 "미결 TLS/SASL 버그 39개"는 모두 원본 티켓 데이터와 일치했습니다. 즉, 조작된 것이 아니라 정당한 내용입니다. 하지만 "6개 클러스터 중 4개가 높은 정렬을 가짐"이라는 부분은 동일한 확신을 가지고 어느 쪽인지 확인할 수 없었습니다. 따라서 해당 지적은 부분적으로 해결되었습니다. 세 가지 주장 중 두 가지는 환각 (hallucination)이 아닌 올바른 추론이었고, 나머지 하나는 미결 질문으로 남았습니다. 위의 재지정 (override) 규칙에 따라, 해결된 부분만 통과됩니다. 이 보고서가 관리자에게 전달되기 전, 클러스터 정렬에 대한 주장은 여전히 면밀한 검토가 필요합니다.
내가 실제로 이것을 어떻게 활용할 것인가
세 가지 산출물(중복 목록, 클러스터, PM 보고서) 모두에 대해 Claude Sonnet 4.5 + TF-IDF 버전을 주요 권장 사항으로 제시합니다. PM 보고서 내의 중복 쌍(duplicate-pair) 및 버그 수(bug-count) 수치는 원시 데이터(raw data)와 일치했습니다. 클러스터 정렬(cluster-alignment) 주장은 동일한 확인을 거치지 못했으므로, 보고서를 공유하기 전에 해당 문구를 완화하거나 클러스터 출력값과 직접 먼저 대조하여 검증하겠습니다.
앞으로 무엇이 바뀌는가
Kappa 수치는 다음번에 판정자(judge)를 선정하는 방식을 재정립합니다. 서류상으로는 중립적인 제3자 판정자가 더 엄격한 선택처럼 들리지만, 여기서는 바로 이런 종류의 결과물을 생성한 직접적인 경험이 있는 판정자보다 인간과 덜 일치했습니다. 만약 더 큰 백로그(backlog)를 대상으로 이 작업을 다시 수행한다면, 기본적으로 Claude와 GPT가 서로의 작업을 교차 확인(cross-check)하게 하고, 완전한 중립적 판정자는 기본 점수가 아닌 타이브레이커(tiebreaker, 결정적 판단자)로 취급하겠습니다.
또 다른 교훈은 다음과 같습니다. 아무도 구체적으로 해결하지 않은 환각(hallucination) 플래그는 마치 단순한 데이터 포인트인 것처럼 종합 점수(composite score)에 평균을 내어 포함시켜서는 안 됩니다. 그것은 숫자가 아니라 처리해야 할 작업 항목(to-do item)입니다.
다음 단계
이 패턴이 일회성 결과가 아닌 일반적인 규칙인지 신뢰하기 전에, "교차 판정자가 인간과 더 많이 일치한다"는 패턴이 두 번째 데이터셋에서도 유지되는지 확인하고 싶습니다. 그리고 남아 있는 하나의 미결 사항인 승리한 PM 보고서 내의 클러스터 정렬(cluster-alignment) 주장은 작은 확인 절차이지만, 이 프레임워크의 첫 번째 실제 권장 사항이 관리자에게 전달되기 전에 마무리할 가치가 있습니다.
두 모델 모두에 대한 세 판정자의 전체 점수 테이블은 Github에서 확인할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기