Optimizing RAG at Scale: Chunking, Retrieval, and the Bayesian Search That Cut Latency 40%

개요

RAG(Retrieval-Augmented Generation) 시스템의 성능을 최적화하기 위해 청킹(chunking), 검색(retrieval), 베이지안 최적화(Bayesian optimization)를 적용하여 지연 시간을 40% 단축하고 검색 정확도를 95%까지 향상시킨 방법에 대해 설명합니다.

주요 내용

* 청킹(Chunking) 전략:
* 기존의 고정된 토큰 크기(512 토큰) 청킹 방식은 법률 계약서의 절 중간, API 문서의 노이즈 증가, 고객 티켓의 대화형 맥락 손실 등 다양한 문서 유형에서 비효율적입니다.
* 문서 유형별로 최적화된 청킹 전략을 적용했습니다:
* 법률 계약서: Recursive Chunking (구조 인식, 1024 토큰, 100 오버랩, 94% Recall@10)
* API 레퍼런스: Recursive Chunking (함수 인식, 768 토큰, 50 오버랩, 96% Recall@10)
* 지원 티켓: Semantic Chunking + 대화 턴 고려 (512 토큰, 75 오버랩, 91% Recall@10)
* 내부 위키: Agentic Chunking (LLM 기반, 1500 토큰, 200 오버랩, 97% Recall@10)
* 하이브리드 검색(Hybrid Retrieval):
* 단일 검색 방식(순수 벡터 검색 또는 BM25)의 한계를 극복하기 위해 BM25, 벡터 검색, 그리고 cross-encoder 기반의 re-ranker를 결합했습니다.
* Reciprocal Rank Fusion (RRF)을 사용하여 여러 검색 결과를 융합하고, top 50개의 결과를 cross-encoder로 re-rank하여 최종 5개를 선택하는 방식으로 정확도를 크게 향상시켰습니다. (re-ranker 적용 시 Recall@10 15%p 증가)
* 쿼리 변환(Query Transformation):
* 사용자의 부정확하거나 모호한 쿼리를 LLM을 통해 여러 개의 검색 쿼리로 확장(query expansion)하거나, 다단계 질문을 하위 질문으로 분해(query decomposition)하여 검색의 효율성을 높입니다.
* 쿼리 확장 결과, 단일 쿼리 대비 Recall@10이 78%에서 96%까지 향상되었습니다.
* 베이지안 최적화(Bayesian Optimization)를 통한 하이퍼파라미터 튜닝:
* 청크 크기, 오버랩, top_k, 검색 가중치 등 다양한 하이퍼파라미터를 블랙박스 함수로 간주하고, 베이지안 최적화(Optuna 프레임워크 사용)를 통해 Recall@10 극대화와 지연 시간 최소화를 동시에 달성하는 최적의 설정을 탐색했습니다.
* 이를 통해 법률 문서의 경우 91% Recall@10에 180ms, 균형 잡힌 프로덕션 설정에서 95% Recall@10에 320ms, 공격적인 설정에서 97% Recall@10에 580ms의 성능을 얻었습니다.
* 프로덕션 환경 적용 및 측정:
* Prometheus 라이브러리를 활용하여 검색 지연 시간, Recall@K, 쿼리 확장 횟수, re-ranker 지연 시간 등을 측정하는 지표 시스템을 구축했습니다.
* Naive Baseline 대비 최적화된 시스템은 Recall@10을 17%p 향상(78% → 95%), p95 지연 시간을 62% 단축(850ms → 320ms), 환각(hallucination) 비율을 75% 감소(12% → 3%), 쿼리당 비용을 38% 절감($0.008 → $0.005)했습니다.
* RAG 최적화를 위한 체크리스트:
* 문서 구조 기반 청킹, 하이브리드 검색, 쿼리 확장, 버전 관리되는 골든 데이터셋 구축, 베이지안 하이퍼파라미터 최적화, 모든 검색에 대한 계측, A/B 테스트 프레임워크 활용 등을 권장합니다.

시사점

RAG 시스템은 단순히 기술을 통합하는 것을 넘어, 청킹 전략을 포함한 검색 파이프라인 전체를 코드로서 관리하고 자동화된 평가 및 최적화를 통해 지속적으로 개선해야 하는 인프라스트럭처로 인식되어야 합니다. 이를 통해 사용자에게 정확하고 빠른 답변을 제공하는 것을 최우선 목표로 삼을 수 있습니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions