매번 다른 답변을 내놓는 대상을 어떻게 측정할 것인가?
요약
LLM의 비결정론적 특성으로 인해 발생하는 답변 불일치 문제를 해결하기 위한 측정 방법론을 소개합니다. 자기 일관성(Self-consistency)과 교차 일관성(Cross-consistency) 지표를 통해 모델 간의 차이가 단순 노이즈인지 실제 성능 차이인지 구분하는 실험 설계를 제안합니다.
핵심 포인트
- LLM의 답변은 실행 시마다 달라질 수 있어 단일 샘플링은 위험함
- 자기 일관성(Self-consistency)을 통해 모델 자체의 노이즈를 측정해야 함
- 교차 일관성(Cross-consistency)과 비교하여 모델 간의 진정한 차이를 검증함
- 자카드 유사도를 활용하여 인용된 도메인 간의 겹침 정도를 정량화함
저는 단순해 보이는 질문을 하나 던졌습니다: "ChatGPT가 이 업체를 추천하나요?"
그냥 물어보면 될 것 같다고 생각할 수도 있습니다. ChatGPT에게 "뉴욕시 최고의 개인 상해 전문 법률 사무소"라고 묻고, 해당 업체가 이름에 포함되는지 확인하여 예 또는 아니오로 기록하는 식이죠.
하지만 이 방식은 단 한 번만 작동합니다. 한 시간 뒤에 다시 물어보면 다른 답변을 얻을 수도 있습니다. 단순히 약간 다른 것이 아니라, 잠재적으로 완전히 다른 법률 사무소 목록과 완전히 다른 인용 출처를 받게 될 수도 있습니다.
이는 이 측정 방식의 순진한 버전이 가치가 없음을 의미합니다. 당신은 가시성 (visibility)을 측정하는 것이 아니라, 분포 (distribution)를 단 한 번 샘플링하고 그것을 사실이라고 부르고 있는 것입니다.
이것은 LLM (Large Language Model) 기반 기능을 테스트하려는 사람이라면 누구나 겪게 되는 동일한 문제입니다. 동일한 입력에 대해 출력을 검증하는 일반적인 테스트 본능이 적용되지 않습니다. 그래서 제가 이를 어떻게 설계하여 해결했는지, 그리고 저를 놀라게 했던 결과 수치들은 어떠했는지 소개하고자 합니다.
설정 (The setup)
저는 한 산업 분야 내의 10가지 구매 의도 질문 (buyer-intent questions)을 대상으로 네 가지 어시스턴트 (GPT-4o, Claude Haiku 4.5, Gemini 2.5 Flash, Perplexity Sonar, 모두 웹 검색 기능 활성화 상태)를 비교하고 싶었습니다. 다음과 같은 질문들입니다:
"뉴욕시 최고의 개인 상해 전문 법률 사무소는 어디인가요?"
"뭄바이의 최고의 이민 변호사는 누구인가요?"
각 응답에 대해 저는 두 가지를 기록했습니다: 어떤 업체가 언급되었는지, 그리고 어떤 URL이 인용되었는지입니다. 인용된 출처는 각 API 자체의 인용 메타데이터 (citation metadata)에서 가져오므로, 본문을 스크래핑할 필요 없이 구조화된 데이터를 사용했습니다.
첫 번째 단계에서 결과는 극적였습니다. 네 가지 어시스턴트는 거의 어떤 것에도 동의하지 않았습니다. 서로 다른 업체, 서로 다른 출처, 겹치는 부분이 거의 없었습니다.
훌륭한 발견이었습니다. 하지만 저는 이를 발표할 수 없었습니다. 왜냐하면 제가 답할 수 없는 명백한 반론이 있었기 때문입니다:
어쩌면 그들이 서로 의견이 다른 것이 아닐지도 모릅니다. 어쩌면 각 모델이 자기 자신과 의견이 다른 것일 수도 있습니다.
만약 단일 어시스턴트가 실행할 때마다 매우 다른 출처를 반환한다면, "이 네 모델은 서로 다른 것을 인용한다"라는 문장은 무의미한 진술이 됩니다. 당신은 노이즈 (noise)를 측정하고 그것을 신호 (signal)라고 부르고 있는 셈입니다.
대조군 (The control)
해결책은 대조군 (control group)과 같은 아이디어입니다. 걱정되는 요소를 별도로 측정하여, 그것이 결과에 영향을 미치는지 확인하는 것입니다.
따라서 다음과 같이 진행합니다: 모든 10개의 질문을 어시스턴트당 3회씩 다시 실행하고, 두 가지 서로 다른 수치를 계산합니다.
- 교차 일관성 (Cross-consistency) — 서로 다른 두 어시스턴트가 동일한 질문에 대해 얼마나 겹치는가?
- 자기 일관성 (Self-consistency) — 동일한 어시스턴트가 동일한 질문을 다시 받았을 때 자신과 얼마나 겹치는가?
만약 이 두 수치가 비슷하다면, 그 차이는 단순한 비결정론 (non-determinism)일 뿐이며 저에게는 아무런 의미가 없습니다. 만약 자기 일관성이 훨씬 높다면, 모델들이 진정으로 서로 다르다는 뜻입니다.
"겹침 (overlap)"을 측정하기 위해 저는 인용된 도메인 집합에 대해 자카드 유사도 (Jaccard similarity) — 합집합에 대한 교집합의 비율 — 를 사용했습니다. 이는 표준적이고 지루하지만, 누군가 물었을 때 방어하기 쉬운 방식입니다:
function jaccard(setA, setB) {
const a = new Set(setA);
const b = new Set(setB);
...
질문에 대한 교차 일관성은 6개의 어시스턴트 쌍 사이의 평균 쌍별 (mean pairwise) 자카드 유사도입니다. 자기 일관성은 단일 어시스턴트의 3회 실행 사이의 평균 쌍별 자카드 유사도입니다. 그런 다음 질문 전체에 대해 평균을 냅니다.
function meanPairwise(runs) {
const scores = [];
for (let i = 0; i < runs.length; i++) {
...
들리는 것보다 더 중요한 두 가지 정규화 (normalisation) 세부 사항이 있습니다:
등록 가능한 도메인으로 정규화하십시오. www.example.com/page-a와 example.com/page-b는 이 목적을 위해 동일한 출처입니다. 만약 이들을 하나로 합치지 않는다면, 출처의 겹침이 아니라 URL 형식을 측정하게 되어 결과값이 엉망이 될 것입니다.
무엇을 출처로 간주할지 결정하고 기록하십시오. 저는 본문에 언급된 도메인이 아니라, API의 인용 메타데이터 (citation metadata)에 나타난 도메인만을 계산했습니다. 어느 쪽이든 방어 가능하지만, 하나를 선택하고 그것이 무엇인지 명시해야 합니다.
결과
- 어시스턴트 간 겹침: ~7%. 서로 다른 두 어시스턴트에게 동일한 질문을 했을 때, 거의 완전히 다른 출처를 인용했습니다.
- 자기 일관성: ~51%. 동일한 어시스턴트에게 동일한 질문을 다시 했을 때, 출처의 약 절반이 반복되었습니다.
따라서 어시스턴트는 자신의 라이벌들보다 자기 자신과 약 7.5배 더 일관적입니다. 모델 간의 차이는 실재합니다. 통제 변수가 제 역할을 한 것입니다.
하지만 저 자기 일관성(self-consistency) 수치를 다시 한번 보십시오. 이것이 더 흥미로운 부분입니다. 동일한 모델에게 동일한 질문을 두 번 던지면, 인용된 출처의 절반이 바뀝니다.
그리고 이 현상은 균일하지 않습니다:
| 어시스턴트 | 두 번째 질문 시 반복되는 출처 |
|---|---|
| Perplexity | ~72% |
| ... |
ChatGPT가 인용하는 내용의 약 3분의 2가 동일한 두 질문 사이에서 바뀝니다. Perplexity는 그보다 두 배 이상 안정적입니다.
이러한 편차는 실질적으로 유용한 발견입니다. 만약 여러분이 검색 일관성 (retrieval consistency)에 의존하는 무언가를 구축하고 있다면, 여러분이 코드를 한 줄도 작성하기 전에, 제공업체(provider)의 선택만으로 시스템의 재현성 (reproducibility)이 2배 차이 나게 됩니다.
일반화 가능한 부분
LLM 기반의 무언가를 테스트하고 있다면, 단 한 번의 실행 결과(single-run assertions)는 여러분을 속이고 있는 것입니다. 유사한 문제에 직면했을 때 제가 적용할 몇 가지 원칙은 다음과 같습니다:
n번 실행하고 값이 아닌 분포 (distribution)를 보고하십시오. 여기서는 신호와 소음을 구분하기 위해 n=3이면 충분했습니다. 모든 경우에 다 그런 것은 아닙니다. 효과 크기 (effect size)가 더 작다면 더 많은 실행 횟수가 필요합니다. n을 늘려보며 핵심 수치가 변하는지 확인하는 방식으로 건전성 검사 (sanity-check)를 수행하십시오.
노이즈 플로어 (noise floor)를 명시적으로 측정하십시오. 자기 일관성 수치가 바로 노이즈 플로어입니다. 비교하는 두 대상 사이의 차이는 의미를 갖기 위해 반드시 이 노이즈 플로어를 넘어서야 합니다. 대부분의 "모델 A와 B를 비교했다"는 게시물들은 이 과정을 생략하며, 이것이 대부분의 비교가 신뢰할 수 없는 이유입니다.
정확한 출력값이 아닌 속성 (properties)에 대해 단언하십시오. "응답이 허용된 목록에서 최소 하나 이상의 출처를 인용한다"는 비결정론 (non-determinism) 속에서도 살아남습니다. 반면 "응답이 이 문자열과 일치한다"는 살아남지 못합니다.
가능한 것은 고정(pin)하십시오. 모델 버전, temperature, 웹 검색 활성화 여부, 지역 등입니다. 저의 가장 큰 후회는 모델 버전을 더 엄격하게 고정하지 않은 것입니다. 연구 도중에 제공업체가 모델을 업데이트했다면 조용히 모든 결과를 무효화했을 것이고, 사후에 이를 감지할 방법이 없었을 것입니다.
제가 주장할 수 없는 것
이 분야에는 과장된 주장이 가득하기 때문에, 명확히 짚고 넘어가야 할 두 가지가 있습니다.
이것은 스냅샷(snapshot)입니다. 2026년 7월, 하나의 수직 시장(vertical), 10개의 질문을 대상으로 한 결과입니다. 검색 동작(Retrieval behaviour)은 모델 업데이트에 따라 변합니다. ChatGPT의 32%라는 수치는 자연의 상수(constant of nature)가 아니라, 해당 기간에 해당 방법론으로 제가 측정한 값입니다.
더 많은 실행(runs)이 이루어지는 것이 좋습니다. n=3은 자기 일관성(self-consistency)이 교차 일관성(cross-consistency)보다 훨씬 크다는 점을 입증하기에는 충분하며, 이것이 제가 주장하는 바입니다. 하지만 Claude의 54%가 Gemini의 42%와 유의미하게 다르다고 말하기에는 충분하지 않습니다. 샘플링을 더 많이 한다면 이 두 수치는 쉽게 뒤바뀔 수 있으며, 저는 그러한 순위를 옹호하지 않을 것입니다.
만약 누군가 n=20으로 실행해 보고 제가 틀렸다고 말해주고 싶다면, 진심으로 환영합니다. 그것은 제 데이터셋보다 더 나은 데이터셋일 것입니다.
데이터
10개의 모든 질문, 언급된 모든 기업명, 인용된 모든 출처, 그리고 더 자세한 방법론이 포함된 전체 보고서는 다음에서 확인할 수 있습니다:
https://greaterthanservices.com/blog/ai-search-study-law-firms
공개 사항: 저는 이러한 측정을 제품으로 제공하는 Greater Than Services를 운영하고 있습니다. 분산 제어(variance control)가 존재하는 이유는 고객들이 "이것이 무작위(random)가 아니라는 것을 어떻게 아느냐?"라고 합리적으로 질문했기 때문입니다. 위의 방법론이 그에 대한 답변이며, 이는 독점적인 기술이 아니므로 유용하다고 판단된다면 가져가서 귀하의 수직 시장(vertical)에 직접 적용해 보셔도 좋습니다.
만약 LLM 의존적 시스템을 위한 분산 제어(variance controls)를 구축해 보셨다면, 어떻게 처리하셨는지 듣고 싶습니다. 특히 제가 가장 확신이 없는 부분인 n을 어떻게 선정하셨는지 궁금합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기