본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 06. 15. 10:03

RAG-Fusion

요약

RAG-Fusion은 다중 질의 생성과 상호 순위 결합(RRF)을 통해 검색 성능을 극대화하는 방법론입니다. 단일 질의의 한계를 넘어 사용자 의도의 다양한 측면을 포착함으로써 검색 재현율을 높이고 더 정확한 답변 생성을 지원합니다.

핵심 포인트

  • 다중 질의 생성과 RRF를 통한 검색 결과 재순위화
  • 사용자 용어와 인덱싱 용어 간 불일치 문제 해결
  • 하이브리드 변형(BM25 + 벡터 검색) 사용 권장
  • 재현율(Recall)이 중요한 학술 및 전문 분야에 최적

RAG-Fusion은 전통적인 검색 패러다임과 인간 질의의 다면적인 차원 사이의 간극을 메우는 것을 목표로 하는 검색 방법론입니다. 검색 증강 생성 (RAG)이 벡터 검색 (Vector Search)을 생성 모델 (Generative Models)과 결합하는 반면, RAG-Fusion은 한 단계 더 나아가 — 다중 질의 생성 (Multiple Query Generation)과 상호 순위 결합 (Reciprocal Rank Fusion, RRF)을 사용하여 검색 결과의 순위를 재조정 (Re-rank)합니다. 그 목적은 특히 사용자의 어휘가 코퍼스 (Corpus)의 인덱싱 방식과 일치하지 않을 때, 단일 질의 문구로는 놓칠 수 있는 관련 자료를 표면화하는 것입니다.

이 접근 방식의 전체 배경에 대해서는 다음 기사를 참조하십시오: Forget RAG, the Future is RAG-Fusion.

이 기술이 어디에 해당하는지 한 줄로 요약하면 다음과 같습니다: 적절하게 구성된 RAG-Fusion (hybrid_diverse+rerank : BM25 + 벡터 검색 × LLM 재작성, RRF를 통해 결합, 이후 교차 인코더 (Cross-encoder)로 재순위화)은 강력한 재순위화 모델 (Reranker)을 사용하더라도, 모든 난이도 구간에서 적절한 표본 크기와 신뢰 구간을 바탕으로 기본 검색 (Baseline Retrieval)보다 측정 가능한 수준으로 더 나은 검색 순위와 더 나은 생성 답변을 만들어냅니다. 벡터 전용 결합 (Vector-only fusion) 변형은 이야기가 다릅니다. 이는 평균적으로 거의 차이가 없으며, 답변 수준에서 풍부한 질의 (Rich queries)에 대해서는 순손실 (Net-negative)을 기록합니다. 결합 (Fusion)을 배포한다면, 하이브리드 변형 (Hybrid variant)을 배포하십시오. arXiv 2603.02153v1의 재현을 포함하여 n=200 쌍별 부트스트랩 신뢰 구간 (Paired-bootstrap CIs), 3개의 재순위화 모델 (Rerankers), 6개의 결합 변형, 엔드투엔드 LLM-판사 (LLM-judge) 답변 평가를 포함한 상세한 실증적 기술은 다음 경로에 있습니다:

experiments/arxiv-2603-02153-replication/

flowchart TD
Q[Original Query] --> L[LLM generates multiple queries]
L --> V1[Vector Search 1]
...

Query Generation (질의 생성)— 사용자의 질의를 가져와 OpenAI의 GPT를 사용하여 원래 의도의 다양한 측면을 포착하는 여러 검색 질의 변형을 생성합니다. -
Vector Search (벡터 검색)— 각 질의에 대해 ChromaDB를 사용하여 벡터 기반 검색을 수행하며, 문서 공간 전체에 걸쳐 더 넓은 그물을 던집니다. -
Reciprocal Rank Fusion (상호 순위 결합)— 모든 검색에서 얻은 순위가 매겨진 결과들을 결합하여, 여러 질의 관점에서 일관되게 나타나는 문서들의 순위를 높입니다. -
Output Generation (출력 생성)— 최종적으로 재순위화된 문서 목록을 생성하며, 선택적으로 LLM을 통해 자연어 답변으로 합성합니다.

이 기술은 다음 세 가지 조건이 충족될 때 그 가치를 발휘합니다:

사용자 질의와 인덱싱된 텍스트 간의 용어 불일치(일반 명칭 대 기술 명칭, 전문 용어, 의역 등).
정밀도(Precision)보다 재현율(Recall)이 더 중요함— 관련 문서를 놓치는 것이 미미한 문서를 포함하는 것보다 더 큰 비용이 발생합니다.
하위 소비자(Downstream consumer)가 주제적으로 넓은 컨텍스트를 처리할 수 있음— 강력한 합성 능력을 가진 LLM을 사용하거나, 하나의 정형화된 답변 대신 여러 후보를 제시하는 UI를 사용하는 경우입니다.

적합한 사례:

  • 학술 / 과학 문헌 검색, 생물 의학 연구
  • 특허 선행 기술 검색, 법률 e-discovery, 규제 검토
  • 롱테일(Long-tail) 이커머스 ("자동차용 핸드폰 거치대 같은 거" → "자기식 송풍구 마운트")
  • 임베딩 모델이 학습하지 못한 전문 코퍼스(Corpora)에 대한 콜드 스타트(Cold-start) 검색
  • 탐색적 / "무엇이 있는지 보여달라"는 식의 워크플로

부적합한 사례:

  • FAQ 챗봇 및 큐레이션된 고객 지원 지식 베이스
  • 지연 시간(Latency)이 중요한 검색 (음성, 자동 완성, sub-second-p95 채팅)
  • 대량의 트래픽 / 낮은 마진의 소비자 검색
  • 코드 또는 식별자 검색 (정밀도가 지배적인 경우)
  • 구조화된 데이터, 지식 그래프, SQL 기반 검색

혼합 워크로드(mixed workloads) — 대부분의 프로덕션 검색(production retrieval) — 의 경우, 적절한 패턴은 **적응형 라우팅 (adaptive routing)**입니다. 모든 쿼리에 대해 베이스라인(baseline) + 재순위화 (rerank)를 실행하고, 저렴한 약점 신호(weakness signal)가 트리거될 때만 퓨전 (fusion)을 실행하십시오. 이는 롱테일(long-tail)의 이득을 포착하고, 쉬운 쿼리에서의 성능 퇴보(regression) 사례를 제거하며, 퓨전의 연산 비용을 그 가치를 창출하는 트래픽에 대해서만 지불하게 합니다. 코퍼스(corpus) 크기 및 데이터 유형에 따른 비용과 지연 시간 (latency) 분석을 포함하여, 이러한 권장 사항의 근거가 되는 데이터는 experiments/arxiv-2603-02153-replication/를 참조하십시오.

├── main.py # 핵심 RAG-Fusion 파이프라인
├── evaluate.py # 평가 CLI (baseline + fusion 변형, 선택 사항 --rerank)
├── test_main.py # 단위 테스트 (Unit tests)
...

의존성 설치:

pip install openai chromadb python-dotenv tqdm tabulate rank_bm25

OpenAI API 키 설정:

cp .env.example .env

그 다음 .env 파일을 편집하여 your-key-here를 실제 키로 교체하십시오.

데모 실행:

python main.py

테스트 실행 (API 키 불필요):

python -m pytest test_main.py -v

단순한 예제를 넘어, 이 리포지토리(repo)에는 실제 데이터셋에서 여러 검색 전략을 비교하는 정량적 평가 하네스 (evaluation harness)가 포함되어 있습니다. 이는 BEIR 벤치마크의 NFCorpus (3,633개의 의료/영양 문서, 등급별 관련성 판단이 포함된 323개의 테스트 쿼리)를 사용합니다.

아래 표는 검색 전용 (retrieval-only) 결과입니다 — 교차 인코더 (cross-encoder) 재순위화나 엔드 투 엔드 (end-to-end) 답변 품질 평가는 포함되지 않았습니다. 이는 퓨전 변형들이 순수 검색 형태에서 어떻게 배치되는지를 빠르게 시각적으로 보여주기 위한 것입니다. 프로덕션 관련 비교 (교차 인코더 재순위화, 하이브리드 변형, LLM-judge 답변 품질, 그리고 비용 / 지연 시간 / 코퍼스 / 데이터 유형별 운영 분석 포함)를 보려면 experiments/arxiv-2603-02153-replication/를 참조하십시오. 가장 오른쪽 열의 상승 수치는 95% 신뢰 구간 (CI)이 0을 포함하지 않을 때 굵게 표시됩니다.

MetrickBM25BaselineHybridRAG-Fusion+DiverseHybrid+DiverseHybrid+Diverse lift over Baseline [95% CI]
Precision50.2550.2830.2720.3020.3070.324+0.041 [+0.020, +0.062]
Precision100.1850.2280.2180.2390.2460.258+0.030 [+0.016, +0.044]
Precision200.1310.1680.1680.1800.1860.194+0.026 [+0.017, +0.035]
Recall50.1100.1170.1160.1220.1290.141+0.024 [+0.004, +0.045]
Recall100.1300.1510.1550.1650.1680.185+0.034 [+0.018, +0.053]
Recall200.1470.1880.1920.2050.2030.219+0.032 [+0.019, +0.047]
NDCG50.2950.3210.3220.3370.3440.383+0.062 [+0.037, +0.087]
NDCG100.2620.3010.3020.3190.3220.357+0.057 [+0.038, +0.077]
NDCG200.2420.2860.2910.3050.3090.340+0.055 [+0.039, +0.071]
MRR-0.4610.4880.5130.5040.5050.577+0.089 [+0.051, +0.128]

비교된 여섯 가지 방법:

BM25— NFCorpus의 의학 용어에 대한 정확한 용어 일치 덕분에 작은 k 값에서 우수한 성능을 보이는 클래식 키워드 검색 방식이지만, 의미론적 이해가 더 중요해지는 높은 k 값에서는 성능이 저하됩니다.Baseline— ChromaDB의 기본 임베딩 모델(all-MiniLM-L6-v2)을 사용하여 원본 쿼리로 수행하는 단일 벡터 검색입니다.

).Hybrid— BM25와 벡터 검색 (vector search)을 RRF (Reciprocal Rank Fusion)를 통해 결합합니다 (LLM 호출 없음). 강력한 "공짜 점심 (free lunch)"입니다. API 비용 없이 베이스라인 (baseline)만큼 빠르게 실행되면서, 베이스라인 대비 MRR (Mean Reciprocal Rank)을 눈에 띄게 향상시킵니다.

RAG-Fusion— 원본 쿼리와 LLM이 생성한 4개의 쿼리를 Reciprocal Rank Fusion을 통해 결합합니다.

RAG-Fusion +Diverse— 다양한 관점, 유의어, 그리고 다양한 구체성을 명시적으로 요구하도록 개선된 프롬프트를 사용한 RAG-Fusion입니다. 이 샘플 크기에서는 표준 RAG-Fusion보다 완만한 개선을 보입니다.

Hybrid+Diverse— 두 방식의 장점을 결합한 최상의 방식입니다. RAG-Fusion (diverse 프롬프트)을 실행하되, 각 쿼리를 BM25와 벡터 검색 모두로 검색한 다음 모든 결과를 RRF를 통해 결합합니다. 베이스라인 대비 NDCG@10 +19% 및 **MRR +18%**를 기록하며 전체적으로 가장 뛰어난 성능을 보였으며, 모든 지표에서 0을 제외한 95% 신뢰 구간 (CIs)을 나타냅니다.

적절한 샘플 크기와 신뢰 구간 (CIs)을 고려했을 때 세 가지 통찰이 도출됩니다. 첫째, 하이브리드 검색 (hybrid search)은 공짜 점심입니다. BM25와 벡터 검색 결과를 RRF를 통해 결합하는 것은 추가 비용이 들지 않으며, 특히 랭킹 상단에서 랭킹 품질을 향상시킵니다. 둘째, **다양성 프롬프트 (diverse prompt)**는 LLM이 진정으로 다른 관점을 탐색하도록 유도함으로써 표준 RAG-Fusion 프롬프트보다 약간 더 나은 성능을 보입니다. 셋째, 이 두 기술은 상호 보완적입니다. 하이브리드의 키워드 정밀도와 다양성 프롬프트의 의미론적 폭이 RRF를 통해 결합되어 가장 강력한 검색 전용 (retrieval-only) 결과를 만들어냅니다.

주의사항: 검색 (retrieval)이 곧 프로덕션 (production)은 아닙니다. 실제 RAG 스택은 검색 이후에 크로스 인코더 리랭킹 (cross-encoder reranking) 단계를 추가하며, 단순히 랭킹뿐만 아니라 생성된 답변의 품질에도 신경을 씁니다. 리랭킹을 추가하고 n=200에서 엔드 투 엔드 (end-to-end) LLM-judge 평가를 실행했을 때, 성능 향상 폭은 줄어들지만 (hybrid_diverse+rerank가 벡터 베이스라인+리랭킹 대비: NDCG@10 +0.021 [+0.007, +0.036], LLM-judge 평균 점수 +0.10) 통계적으로는 여전히 유의미합니다. 벡터 전용 퓨전 변체들 (RAG-Fusion, +Diverse)은 강력한 리랭커가 추가되면 성능 향상이 거의 0에 수렴합니다. 이 검색 전용 (retrieval-only) 표만 보고 배포하지 마십시오. 실험/arxiv-2603-02153-replication/ 기록이 프로덕션에 적합한 버전입니다.

# 프로덕션 스타일 비교: 50개의 후보 풀(candidate pool)을 생성한 후 재순위화(reranked) 및 절단(truncated)
python evaluate.py --sample 200 --rerank --candidate-pool 50 \
--methods baseline hybrid rag-fusion rag-fusion-diverse hybrid-diverse
...
# Baseline 전용 (API 키 불필요)
python evaluate.py --sample 10 --methods baseline
# 기본 비교 (OPENAI_API_KEY 필요)
...

NFCorpus 데이터셋 (~3MB)은 첫 실행 시 자동으로 다운로드됩니다. ChromaDB 임베딩 (embeddings)은 로컬에 저장되므로, 이후 실행 시 데이터 주입 (ingestion) 과정을 건너뜁니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0