본문으로 건너뛰기
실무 아키텍처트리 브랜치: RAG & 하이브리드 지식 검색게시일 2026-11-09 · 조회 2180회

BM25 키워드 + 벡터 임베딩 하이브리드 검색으로 RAG 정확도 40% 끌어올리기

단순 벡터 유사도 검색의 치명적 한계(고유명사, 코드 번호, 약어 오탐지)를 BM25 역색인과 결합해 해결한 하이브리드 RAG 아키텍처입니다.

최

최재훈

데이터 & 검색 엔진 스페셜리스트

👁️ 조회 2180❤️ 추천 134💬 댓글 1
스폰서 광고 영역 (Google AdSense)

📌실무 핵심 요약 (Key Engineering Takeaways)

  • ✔순수 벡터 검색 대비 전문 검색(BM25) 결합 시 문서 탐색 정밀도(MRR) 42% 향상
  • ✔RRF(Reciprocal Rank Fusion) 공식을 통해 별도의 가중치 튜닝 없이도 안정적인 랭킹 통합 가능
  • ✔최종 프롬프트에 투입되는 토큰 수를 1/4로 줄이면서도 답변 정확도는 최고 수준 유지

많은 팀들이 RAG(검색 증강 생성)를 구축할 때 OpenAI 임베딩과 코사인 유사도 검색만으로 시작합니다. 하지만 실무에서는 "규정 제3조 제2항", "오류코드 E-4091", "사번 K-8810" 같은 정밀 키워드 검색에서 벡터 검색이 심각한 오작동을 일으킵니다.

해결책은 **상호 순위 융합(Reciprocal Rank Fusion, RRF)** 기반의 하이브리드 검색입니다: 1. 희소 검색(Sparse Search / BM25): 키워드, 코드 번호, 정확한 단어 매칭에 강함 2. 밀집 검색(Dense Search / Vector): 문맥, 유의어, 의미적 유사성에 강함 3. RRF 알고리즘: 두 검색 결과의 랭킹을 정규화하여 가중 합산 4. Cross-Encoder Re-ranker: 상위 20개 문서를 심층 교차 평가하여 최종 3개 추출

🔄엔지니어링 아키텍처 흐름도 (Architecture Workflow)

사용자 질의 입력
➔
병렬 실행: BM25 형태소 검색 + 1536차원 벡터 검색
➔
RRF 알고리즘 기반 순위 융합
➔
Cross-Encoder Re-ranker 상위 재배열
➔
최적화된 문맥(Context) 주입 후 LLM 생성
sql 예제 코드HongLabAI Verified
-- PostgreSQL (pgvector + Full-Text Search) 하이브리드 검색 쿼리
WITH vector_matches AS (
  SELECT id, ROW_NUMBER() OVER (ORDER BY embedding <=> query_embedding) AS rank
  FROM documents
  ORDER BY embedding <=> query_embedding
  LIMIT 20
),
text_matches AS (
  SELECT id, ROW_NUMBER() OVER (ORDER BY ts_rank(content_tokens, to_tsquery('korean', query_text)) DESC) AS rank
  FROM documents
  WHERE content_tokens @@ to_tsquery('korean', query_text)
  LIMIT 20
)
SELECT COALESCE(v.id, t.id) AS document_id,
       COALESCE(1.0 / (60 + v.rank), 0.0) + COALESCE(1.0 / (60 + t.rank), 0.0) AS rrf_score
FROM vector_matches v
FULL OUTER JOIN text_matches t ON v.id = t.id
ORDER BY rrf_score DESC
LIMIT 5;
#RAG#HybridSearch#BM25#pgvector#ReRanking
스폰서 광고 영역 (Google AdSense)

💬트리 구조 기술 토론 (1)

해당 주제에 관한 질의응답 및 피드백은 계층형 트리 댓글로 정리됩니다.

정정다은AI 엔지니어
2026-11-09 18:30

실제로 법률 문서 RAG 프로젝트에서 조항 번호 못 찾는 문제로 고생했는데, 하이브리드 도입하고 나서 완전히 해결되었습니다. RRF 상수 k=60도 표준적으로 아주 잘 작동하네요.

같은 트리 브랜치의 추천 아티클