Zettelkasten

검색에서 쿼리 표현이 결정적이지만 query rewriting보다 하이브리드 retrieval이 ROI가 크다

·수정 1

요약

  • BM25는 bag-of-words라 의미를 모르고 단어 매칭만 함 → 쿼리 단어와 문서 단어가 정확히 겹쳐야 점수가 나옴
  • 벡터 검색도 쿼리 표현이 임베딩을 결정하므로 표현 민감도가 여전히 큼 (HyDE, Query2Doc 같은 기법이 등장한 이유)
  • 그러나 금융 QA 벤치마크 결과, query rewriting(CRAG, RAG-Fusion)보다 단순 BM25+vector 하이브리드가 더 큰 recall 개선을 가져옴
  • 결론: "쿼리를 잘 만들라"보다 하이브리드 검색 + 동의어/형태소 처리 + 도구 스키마 설계가 비용 대비 효과적

본문

BM25에서 쿼리가 결정적인 이유

BM25는 의미 이해가 없는 bag-of-words 모델. 같은 뜻을 가진 다른 표현을 못 잡는다:

  • "장애 대응" vs "인시던트 핸들링" vs "IM" → 정확히 겹치는 토큰이 없으면 0점
  • "Car charging time" vs "EV battery refill duration" → 동일 의미라도 매칭 실패

따라서 BM25를 쓸 거면 다음이 사실상 필수:

  • 형태소 분석/stemming (한국어면 mecab/kiwi)
  • 동의어 사전 (incident → 장애, 인시던트, 이슈)
  • stopword 처리

벡터 검색이라고 쿼리가 안 중요한 건 아님

임베딩이 의미를 보긴 하지만, 쿼리 표현이 임베딩 결과를 바꾸기 때문에 여전히 민감. dense retriever에도 위치 편향, 어휘 편향 등 체계적 편향이 보고됨.

그래서 등장한 쿼리 재작성 기법:

  • HyDE (Hypothetical Document Embeddings): 원래 쿼리 대신 LLM이 생성한 가상 문서의 임베딩으로 검색
  • Query2Doc: LLM이 만든 의사 문서를 쿼리에 이어붙여 확장
  • Multi-turn rewriting: "그 timeout은 어때?" → "XYZ 서비스의 기본 timeout 값은?" 같이 대명사·암묵 참조 풀기 (self-contained, deictic-free)

벤치마크 현실: rewriting보다 하이브리드

금융 QA 23,088 쿼리 벤치마크 결과 (Recall@5):

방법 Recall@5 vs BM25
BM25 baseline
CRAG (쿼리 적응적 재작성) 0.658 +1.4pp
RAG-Fusion (multi-query) 0.640 ≈0
단순 hybrid fusion 0.695 +3.7pp

시사점:

  • 도메인 쿼리가 이미 구체적이고 잘 정의돼 있으면 multi-query는 수확 체감
  • Query rewriting만으로는 sparse(BM25)와 dense(vector) 검색의 상호보완성을 못 따라잡음
  • 인프라 자원은 rewriting 파이프라인보다 hybrid retrieval에 투자하는 게 ROI 큼

그래도 쿼리가 중요한 영역

자연어 RAG/agent 호출 시나리오에서는 쿼리 품질이 여전히 핵심:

  • Anthropic의 도구 작성 가이드: 도구 설명에 사용 패턴 명시 ("약어보다 풀어 쓴 용어를 우선") → agent의 쿼리 품질 향상
  • Server 측 쿼리 정규화 (동의어 확장, stemming, stopword 제거)로 agent의 쿼리 변동성 흡수
  • Multi-turn에서는 query resolution(대명사/생략 풀기)이 필수

MCP wiki 검색 도구 설계 함의

"쿼리가 중요하다"가 실무적으로 의미하는 결정 사항:

  1. 도구 설명에 사용 패턴 기술: agent가 어떤 쿼리를 보내는지가 결과를 좌우 → description에 "약어 풀어쓰기" 같은 지침 포함
  2. 서버 측 정규화 내장: 동의어/형태소 처리를 agent가 아닌 도구 안에서 처리해 변동성 흡수
  3. 하이브리드를 기본값으로: rewriting 파이프라인보다 BM25+vector 결합이 우선
  4. 입력 스키마로 강제: query만 받지 말고 must_include_terms, filters(부서/날짜/문서 타입) 같은 구조화 파라미터 추가 → 자연어 쿼리를 더 정밀하게 분해하도록 유도
  5. multi-turn 대응: 대화형 사용 시 query resolution 단계를 도구 내부 또는 host agent에서 처리

핵심 원칙: 쿼리 변동성을 agent에 맡기지 말고 도구 인프라가 흡수한다.

관련 노트

참고