2026년 8월 30일 일요일

RAG 종류 총정리 ② — 하이브리드 검색과 리랭킹: BM25는 왜 아직 안 죽었나

RAG 개선안 중 가장 싼 것부터 쓰는 게 맞다. 그리고 가장 싼 것은 LLM 호출을 늘리지 않는 것들 — 순서 바꾸기, 하이브리드 검색, 리랭킹이다. 이 글은 검색 레이어 자체를 다룬다. 결론부터 말하면 BM25는 아직 안 죽었고, 한국어에서는 더 안 죽었다.

같은 모델로 통제한 비교: 하이브리드는 언제 이기나

BGE-M3는 하나의 모델이 dense·sparse·multi-vector 세 점수를 동시에 내기 때문에, 모델을 바꾸지 않고 검색 방식만 바꾼 비교가 가능하다. nDCG@10 기준:

벤치마크BM25DenseSparseDense+Sparse
MIRACL (짧은 질의)31.969.253.970.4
MLDR (장문 문서)53.652.562.264.8

짧은 질의에서 하이브리드 이득은 +1.2점뿐이지만 장문 문서에서는 dense 52.5 → 64.8로 +12.3점이고, 무엇보다 BM25(53.6)가 dense(52.5)를 이긴다. 사내 위키·계약서·매뉴얼처럼 문서가 긴 RAG라면 하이브리드는 선택이 아니다. Fudan의 전수 비교도 같은 방향이다 — TREC DL19 mAP가 BM25 30.13에서 하이브리드 47.14로 오르는데 지연은 0.07초 → 3.20초, 그리고 여기에 HyDE를 얹으면 52.13이지만 11.16초다(④편).

dense가 구조적으로 못 잡는 것들

Azure의 문서는 키워드가 유리한 경우를 못 박아 뒀다 — 제품 코드, 고도로 전문화된 은어, 날짜, 사람 이름. 국내 사례가 더 생생하다. 컬리가 사내 문서 RAG를 두 번 갈아엎은 기록에서:

  • 역인덱스만 쓰던 1차에서는 "샛별"과 "새벽배송"이 매칭되지 않았다 — dense가 필요한 지점.
  • 임베딩만 쓴 2차에서는 "DOS-bot", "TICKET-1234" 같은 약어·식별자가 서브워드로 분해되며 의미를 잃었다 — BM25가 필요한 지점.
  • 결정적으로, 문서의 약 85%가 임베딩 모델의 512토큰 한도를 넘어 앞부분만 색인되고 있었다.
  • 최종안은 요약 임베딩 + 본문 BM25 하이브리드(시맨틱 top3 + 키워드 top2 병합).

마지막 항목이 한국어의 함정이다. 한글은 토큰 효율이 나빠 900자만 넘어도 512토큰을 넘긴다. 임베딩 모델을 고를 때 컨텍스트 길이도 기준이어야 한다 — gemini-embedding-001은 2,048토큰, BGE-M3는 8,192, voyage-4는 32,000이다.

합치는 방법: RRF는 기본값이지 정답이 아니다

Elasticsearch의 RRF1/(60+rank)로 두 순위를 합치고 "튜닝이 필요 없다"고 홍보한다. 그런데 Amazon의 융합 함수 분석은 반대 결론이다 — RRF가 오히려 파라미터에 민감하고, 가중 점수 합(convex combination)이 도메인 안팎 모두에서 더 강건하며 튜닝할 파라미터가 하나뿐이라 소량 샘플로 맞출 수 있다. Weaviate는 v1.24부터 relativeScoreFusion을 기본값으로 바꾸며 FIQA에서 recall 약 +6%를 근거로 들었다. 평가셋 100~200건만 있으면 가중치 하나 튜닝으로 얻는 공짜 이득이다.

리랭커: 후보를 좁힌 뒤에만

  • 한계효용: Anthropic 측정에서 top-20 검색 실패율은 임베딩만 5.7% → 하이브리드 2.9% → 리랭킹 1.9%. 하이브리드가 절반을 줄이고 리랭커가 남은 것의 1/3을 더 줄인다. 순서는 반드시 하이브리드 먼저.
  • 리랭커는 정확도가 아니라 지연으로 고른다: 같은 Fudan 실험에서 TILDEv2 MRR@10 27.83에 0.02초, monoT5 31.78에 4.5초, RankLLaMA 32.35에 82.4초. 제일 정확한 모델이 온라인 서빙 불가다.
  • 작아도 된다: Qwen3-Reranker는 4B(MTEB-R 69.76)와 8B(69.02)가 사실상 동급이고, 0.6B만으로도 같은 크기 임베딩 대비 MTEB-R +4.0, 장문(MLDR) +17.0을 얹는다.
  • 과금 단위를 확인하라: Cohere는 건당(Bedrock 기준 1,000쿼리당 $2.00)인데 "1 search = 질의 1 + 문서 최대 100개"이고 500토큰 넘는 문서는 청크마다 1문서로 카운트된다. Voyage는 토큰당(rerank-2.5 $0.05/1M). 긴 청크를 많이 넣으면 유불리가 뒤집힌다.

한국어 검색의 두 갈래 준비물

BM25 쪽은 형태소 분석기가 곧 품질이다. Nori(mecab-ko-dic)는 Elasticsearch 기본이지만 사전이 고정적이고, Kiwi는 오타 교정과 사전 갱신이 있으며 정확도는 웹문서 약 87%·문어체 약 94%다. LY의 일본어 사례가 교훈적이다 — 모델번호 "AW-10DP3"이 "AW/10/DP/3"으로 쪼개졌다. 상품코드·티켓번호·식별자는 형태소 분석에서 빼고 keyword 필드로 따로 색인해야 한다.

Dense 쪽은 기본값을 의심해야 한다. 고려대 KURE 리더보드의 한국어 8종 평균 nDCG@10은 KURE-v1 0.695 > BGE-m3 0.687 > multilingual-e5-large 0.664 > OpenAI text-embedding-3-large 0.617. 다만 평균으로 고르지 말 것 — 데이터셋별 편차가 모델 편차보다 훨씬 크고(XPQA는 최고가 0.444, Belebele은 최저가 0.895), 상위 두 모델 격차는 0.3% 수준이라 임베딩 교체로 얻을 게 많지 않다. 예산은 파싱과 리랭커에 쓰는 편이 낫다(③편). 마지막으로 토스의 경고 — 임베딩 모델 교체는 인덱스 전면 리빌드이고, 호환 안 되는 벡터가 섞이지 않게 버전 관리 인프라가 따로 필요하다. 다음 글은 색인 단위를 손보는 계층이다.

— RAG 종류 총정리 시리즈 ② / 다음 글: 청킹·Contextual Retrieval·파싱 — 색인 단위를 똑똑하게

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

독파모 평가 해부 ⑫ (완결) — 청구서: 방어 가능한 평가는 첫해 2,580만 원이다

마지막 편이다. 열한 편의 비판을 한 장의 설계도로 바꾼다. 우리 회사(그리고 어느 회사든)가 그대로 실행할 수 있는 평가 프로토콜과 그 원화 가격표다. 환율 1,380원/USD, 전부 가정을 명시한 필자 계산이며, 국내 어노테이션 업체들이 문항당 단...