RAG 효과는 어떻게 정량 평가하는가 — 검색·생성 지표 분리와 LLM-as-Judge

← 전체 목차 · 이전: 검색은 완벽했는데 답은 왜 틀리나 · 다음: 지식베이스 갱신 시 인덱스는 어떻게 동기화하나

"상용 후 사용자가 답이 부정확하다고 신고하면, 검색 문제인지 생성 문제인지 어떻게 특정하고, 어떤 지표로 개선을 증명하나?" — 이 질문에 **"평가셋을 만들어 사람이 정답을 라벨링하고 Rouge·BLEU로 채점한다"**고 답하면 절반짜리다. RAG 효과는 하나의 이산 점수로 압축할 수 없다.

왜 Rouge·BLEU가 실패하나

Rouge·BLEU는 글자 겹침을 잰다. 그런데 RAG의 정답은 어의 생성형이라 표현 방식이 무수히 많다. 글자가 안 겹치는 것과 뜻이 틀린 것은 전혀 다른 문제인데, 이 두 지표는 이 둘을 구별하지 못한다. 표기 데이터를 더 늘리거나 평가셋을 키운다고 해결되지 않는다 — 애초에 재고 있는 차원 자체가 틀렸다.

실패 원인구체적 양상
어의 등가성 무시정답을 다른 표현으로 말하면 오답으로 채점됨
평가셋 규모·분포 문제오프라인 점수는 올랐는데 온라인 클레임이 늘어남
검색·생성 결합 평가조각을 리콜했는데 안 썼는지, 애초에 못 찾았는지 구분 불가

핵심 경계: 검색층과 생성층을 분리해서 각자 채점한다

RAG 평가의 핵심은 생성 텍스트의 유사도 점수 하나가 아니라, 검색 환경의 명중율과 생성 환경의 충실도를 독립적으로 측정하고 독립적으로 귀인하는 것이다.

검색층(리콜)                          생성층(생성)
──────────────                      ──────────────
(query, 관련문서) 표기쌍             답변 + 검색 조각
  │                                   │
  ├─ 리콜율                          ├─ 충실도  (답이 조각에 근거했는가, 환각이 있는가)
  ├─ 명중율                          ├─ 상관성  (사용자 질문에 답했는가)
  ├─ MRR                             └─ 완전성  (핵심 정보를 다 커버했는가)
  └─ NDCG                                  세 차원을 각자 독립적으로 채점, 하나의 총점으로 합치지 않음

검색층은 생성 결과를 전혀 보지 않고 표기된 관련 문서만으로 평가한다. 이 분리가 되어야 "리콜은 됐는데 모델이 안 썼다"와 "애초에 리콜이 안 됐다"를 구분할 수 있다 — 후보의 답이 답하지 못한 바로 그 질문이다.

자동 평가의 편향 관리: LLM-as-Judge를 그대로 믿지 않는다

대규모 모델을 채점자로 쓰면 확장성은 얻지만, 위치 편향·장문 선호·자기 선호 같은 체계적 편향이 함께 따라온다. 해법은 채점자를 바꾸는 것이 아니라 채점 구조를 바꾸는 것이다.

다중 모델 교차 채점 + 투표     ─ 단일 모델의 편향을 상쇄
        +
일정 비율의 인간 라벨링 유지   ─ 금표준(gold standard) 역할
        +
금표준으로 자동 평가의 신뢰 임계값을 동적 보정

인간 라벨링을 없애는 것이 목표가 아니라, 인간의 역할을 "전수 채점자"에서 "계측기 보정자"로 옮기는 것이 목표다. 표기 예산은 전수 라벨링 대신 능동 학습으로 쓴다 — 모델이 불확실해하는 경계 케이스와 온라인 고빈도 badcase를 우선 라벨링해, 최소 표기량으로 최대 효과를 얻는다.

Badcase 자동 귀인 파이프라인

검색이 명중했는가?
 ├─ 아니오 → 검색측 문제 (리콜 / 청킹 / 인덱스)
 └─ 예 → 생성이 충실했는가?
          ├─ 아니오 → 생성측 문제 (환각)
          └─ 예 → 답이 상관 있는가?
                   ├─ 아니오 → 상관성 문제
                   └─ 예 → 통과

이 의사결정 트리를 badcase마다 자동으로 태그를 붙이는 데 쓰면, 유형별 비중이 곧바로 다음 이터레이션의 우선순위가 된다. 사례 하나하나를 보는 것이 아니라 유형 분포를 보는 것이 관건이다.

오프라인과 온라인이 어긋날 때: 온라인이 이긴다

정적 평가셋은 회귀 기준선으로만 쓴다 — 새 버전이 예전보다 나빠지지 않았는지 확인하는 안전망이다. 진짜 효과 검증은 온라인 A/B로 한다: 트래픽을 나눠 신·구 버전의 사용자 만족도·추가 질문율·인간 피드백율을 비교하고, 오프라인 결론과 충돌하면 온라인 지표를 우선한다. 정적 평가셋은 온라인 트래픽 분포가 흘러가면서 서서히 낡으므로, 지속적으로 최신 트래픽에서 표본을 보충해야 한다.

평가를 발행 프로세스에 묶는다

평가 결과와 버전 발행을 같은 파이프라인에 넣는다:

전량 발행 전제 조건 = 오프라인 회귀 임계값 통과 + 온라인 소규모 트래픽 검증 통과

                   지표 이상 시 자동 경보 + 자동 발행 중단

       (자동 평가 시스템 자체 장애 시) 핵심 시나리오 인간 샘플 검수 + 회색 방류로 강등, 사후 전량 평가 보완

평가는 리포트가 아니라 발행 관문이 되어야 강제력이 생긴다. 그리고 평가 시스템 자체도 장애에 대비한 강등 경로가 있어야 발행 프로세스가 멈추지 않는다.

핵심 통찰

  1. "회신이 부정확하다"는 지표 하나로 답할 문제가 아니라 먼저 위치를 특정할 문제다 — RAG가 두 단계 파이프라인인 이상, 평가 체계가 그 두 단계를 따라 갈라져 있지 않으면 총점의 등락은 어느 쪽을 고쳐야 하는지 아무것도 말해주지 않는다.
  2. 글자 겹침 지표는 정밀도 부족이 아니라 차원 자체가 틀렸다 — Rouge·BLEU가 재는 n-gram 중복과 RAG의 정답이 갖는 무한한 표현 가능성은 애초에 서로 다른 층위에 있다. 표기 데이터를 늘리는 것으로는 해결되지 않고, 재는 차원을 어의 등가성으로 바꿔야 한다.
  3. 평가셋은 한 번 만들고 끝나는 자산이 아니라 유행에 따라 낡는 자산이다 — 온라인 트래픽 분포가 바뀌면 고정 평가셋은 서서히 실효된다. 이것이 평가셋 동적 갱신을 회귀 기준선·A/B 실험과 나란히 기초 설비로 둬야 하는 이유다.
  4. 오프라인 지표의 지위는 "효과 결론"에서 "회귀 기준선"으로 강등되어야 한다 — 오프라인과 온라인이 어긋날 수 있다는 것을 인정하는 순간, 진짜 효과 판정은 온라인 트래픽 분산 실험과 사용자 측 지표(만족도·추가 질문율·인간 피드백율)로 넘어간다.
  5. 대규모 모델을 채점자로 쓰려면 그 채점자 자신이 편향 있다고 먼저 가정해야 한다 — 위치 편향·장문 선호·자기 선호는 이미 알려진 체계적 결함이다. 옳은 대응은 더 강한 모델로 바꾸는 것이 아니라 다중 모델 교차 + 투표 + 인간 금표준 교정이라는, 교정 회로가 있는 측정 체계로 바꾸는 것이다.
  6. 인간 라벨링은 없애는 것이 아니라 재배치하는 것이다 — 전량 인간 라벨링은 비용을 감당 못 하지만, 인간을 완전히 빼면 교정 기준점을 잃는다. 정답은 양끝을 좁히는 것이다 — 인간은 금표준 교정과 능동 학습이 골라낸 경계 케이스·고빈도 badcase만 맡아 최소 표기량으로 최대 효과 증분을 얻는다.
  7. 평가 체계는 발행 프로세스에 박혀야 비로소 구속력이 생긴다 — "오프라인 회귀 임계값 + 온라인 소량 검증"을 전량 발행의 전제 조건으로 걸고, 지표 이상 시 자동으로 발행을 중단하는 것 — 평가가 리포트에서 관문으로 바뀌는 지점이 바로 "평가 스크립트"와 "운영 체계"를 가르는 경계다.
  8. 측정 체계 자체도 가용성을 요구하는 시스템이다 — 자동 평가가 장애 났을 때 발행이 그대로 멈추면 안 된다. 핵심 시나리오 인간 샘플 검수 + 회색 방류라는 강등 경로를 품질 관문 자체에도 미리 준비해 두어야 한다.

엔지니어링 실전 Tips

  • 해결(분리)이 정밀도보다 먼저다: 어떤 지표가 정확한지 다투기 전에, 검색층과 생성층이 각자 독립적으로 점수를 낼 수 있는 구조부터 만들 것. 결합된 평가 체계는 아무리 정밀해도 최적화 방향을 가리키지 못한다.
  • 자동 채점자에게 인간 회로를 남겨둘 것: 일정 비율의 인간 라벨링을 금표준으로 유지하고, 그것으로 자동 평가의 신뢰 임계값을 동적 보정할 것 — 인간의 역할은 채점기를 대신하는 것이 아니라 계측기를 보정하는 것이다.
  • Badcase 분류는 사례가 아니라 비중을 산출물로 할 것: 귀인 파이프라인의 결과물은 "유형별 비중과 최적화 우선순위"여야 다음 이터레이션에서 어느 구간을 먼저 고칠지 정할 수 있다.
  • 오프라인·온라인 충돌 시 우선순위를 미리 못 박아 둘 것: "온라인 지표를 우선한다"를 사전에 규칙으로 정해두면 결론이 부딪힐 때마다 즉석 논쟁으로 결정하는 일을 막는다.
  • 회고 대조에는 실행 중인 실험 의존성을 확인할 것: 과거 평가 버전을 회고 대조할 때, 회고 기간에 진행 중인 실험이 낡은 데이터를 참조하고 있지 않은지 점검할 것.
  • 경보는 통지만이 아니라 손을 쓸 수 있어야 한다: 지표 이상 시 알림만 보내지 말고 자동으로 발행을 중단시켜야 관문으로서 닫힌 회로가 완성된다.
  • 품질 파이프라인에도 SLA를 둘 것: 자동 평가 시스템 자체의 강등 경로(핵심 시나리오 인간 샘플 검수 + 회색 방류)를 미리 준비해, 그것이 죽었을 때 발행 프로세스 전체가 멈추지 않게 할 것.
  • 더 파고들 방향: badcase 귀인 트리의 하위 분류 확장(검색 미명중을 다시 청킹 입도/인덱스 커버리지/Query 재작성 실패로 세분), 다중 모델 투표의 구체적 재정 규칙(분기 시 가중치·다수결), 신뢰 임계값 동적 보정 알고리즘, RAG01 5환 클로즈드 루프의 4환(평가 체계)과의 접점 — 그쪽이 "무엇을 쪼개 볼 것인가"의 큰 틀이라면 이 문서는 "각 구간을 구체적으로 어떤 지표·어떤 채점 구조로 잴 것인가"를 다룬다.