RAG Re-ranker, Bi-encoder vs Cross-encoder: 당신의 RAG 시스템을 더 똑똑하게!
안녕하세요! 요즘 인공지능 분야에서 가장 뜨거운 키워드 중 하나는 바로 RAG (Retrieval Augmented Generation)입니다. 대규모 언어 모델(LLM)의 환각(Hallucination) 문제를 줄이고 답변의 정확도를 높이는 데 핵심적인 기술이죠. RAG는 크게 세 단계로 나뉩니다: 검색 (Retrieval) - 재랭킹 (Re-rank) - 생성 (Generation).
오늘은 이 중에서 '재랭킹(Re-rank)' 단계의 핵심인 Bi-encoder와 Cross-encoder에 대해 자세히 알아보고, 실제 RAG 시스템에서 이 두 가지를 어떻게 활용하면 되는지 상세한 사용 사례와 함께 알려드리겠습니다.
1. RAG Re-ranker는 왜 필요할까요?
RAG 시스템의 첫 번째 단계인 '검색(Retrieval)'에서는 수많은 문서 중에서 사용자의 질문과 관련된 문서를 찾아냅니다. 이때 주로 Bi-encoder와 같은 효율적인 모델을 사용해 수십~수백 개의 후보 문서를 빠르게 가져오죠.
하지만 이렇게 1차로 검색된 문서들은 완벽하지 않을 수 있어요. 질문과 미묘하게 관련이 없거나, 정말 중요한 내용이 뒤쪽에 있을 수도 있습니다. 이때 필요한 것이 바로 Re-ranker입니다. Re-ranker는 1차로 검색된 문서들 중에서 가장 관련성이 높은 문서를 다시 선별하여 LLM에 전달함으로써, LLM이 더 정확하고 핵심적인 정보를 바탕으로 답변을 생성하도록 돕는 역할을 합니다.
2. Bi-encoder: 빠르고 넓게!
개념
Bi-encoder (쌍방 인코더)는 이름처럼 쿼리(질문)와 각 문서(Passage)를 독립적으로 인코딩하여 각각의 벡터(숫자 배열) 표현을 만듭니다. 그리고 이 두 벡터 간의 유사도(코사인 유사도 등)를 계산해서 관련성을 측정하죠.
- 구조: 질문을 인코딩하는 모델과 문서를 인코딩하는 모델이 각각 따로 있습니다. (예: BERT, RoBERTa 같은 트랜스포머 기반 모델)
- 학습: 주로 '(질문, 긍정 문서)' 쌍을 이용해, 긍정 문서의 유사도를 높이고 부정 문서의 유사도를 낮추도록 학습됩니다.
장점
- 놀라운 속도: 모든 문서를 미리 인코딩해서 벡터 데이터베이스에 저장해둘 수 있어요. 질문이 들어오면 질문만 인코딩해서 저장된 문서 벡터와 비교하면 되니, 실시간 검색에 매우 유리합니다.
- 뛰어난 확장성: 문서의 수가 아무리 많아도 효율적으로 처리할 수 있습니다. 수억 개의 문서도 문제없어요.
- 상대적으로 낮은 비용: 대규모 문서 집합에 대해 초기 검색 단계에서 사용하기 적합합니다.
단점
- 정확도 한계: 질문과 문서가 독립적으로 인코딩되다 보니, 둘 사이의 미묘한 상호작용(Interaction)을 직접적으로 파악하기 어렵습니다. 이 때문에 Cross-encoder보다는 정확도가 떨어질 수 있습니다.
- 문맥 이해 부족: 질문과 문서 전체의 문맥을 깊이 이해하는 능력이 상대적으로 부족합니다.
실제 사용 사례
Bi-encoder는 주로 1차 필터링(Initial Retrieval) 단계에서 사용됩니다.
- 대규모 문서 검색: 수많은 문서 중에서 빠르게 상위 N개(예: 100~1000개)의 후보 문서를 가져올 때 사용됩니다.
- 벡터 데이터베이스 연동: ElasticSearch, Apache Solr 같은 검색 엔진의 랭킹 기능이나 Faiss, HNSWlib, Pinecone 같은 벡터 데이터베이스에서 유사도 검색 시 Bi-encoder로 생성된 임베딩이 활용됩니다.
3. Cross-encoder: 깊고 정확하게!
개념
Cross-encoder (교차 인코더)는 쿼리와 문서를 하나의 시퀀스로 결합하여 단일 모델에 입력합니다. 모델은 쿼리와 문서 내의 모든 토큰(단어 조각) 간의 상호작용을 직접 학습하여 관련성 점수를 출력합니다.
- 구조:
[CLS] 질문 [SEP] 문서 [SEP]와 같은 형태로 질문과 문서를 한 줄로 합쳐서 BERT, RoBERTa 같은 트랜스포머 기반 모델에 넣습니다. 모델은 최종적으로 관련성 점수를 예측합니다. - 학습: '(질문, 문서)' 쌍에 대한 관련성 점수(예: 0~1 사이의 확률)를 예측하도록 학습됩니다.
장점
- 압도적인 정확도: 질문과 문서 간의 풍부한 상호작용을 모델링하므로 관련성 평가의 정확도가 Bi-encoder보다 훨씬 높습니다. 문맥적 이해도가 뛰어나 미묘한 관련성도 놓치지 않고 포착합니다.
- 정교한 순위 지정: 재랭킹 단계에서 Top-K 문서에 대한 매우 정교한 순위 지정에 탁월한 성능을 보입니다.
단점
- 느린 추론 속도: 질문이 들어올 때마다 각 후보 문서와 질문을 하나하나 합쳐서 모델에 넣고 개별적으로 점수를 계산해야 합니다. 이는 많은 계산 비용과 시간을 필요로 합니다.
- 낮은 확장성: 처리해야 할 문서의 수가 많아질수록 계산 시간이 선형적으로 증가하여, 대규모 문서 집합에 직접 적용하기는 어렵습니다.
- 높은 계산 비용: Bi-encoder보다 훨씬 많은 GPU/CPU 자원을 소모합니다.
실제 사용 사례
Cross-encoder는 주로 2차 필터링(Re-ranking) 단계에서 사용됩니다.
- 최종 후보군 선별: Bi-encoder로 1차 검색된 Top-N (예: 100 ~ 1000개)의 후보 문서들을 Cross-encoder에 입력하여 최종적으로 Top-K (예: 3 ~ 10개)의 가장 관련성 높은 문서를 선정합니다.
- 높은 정확도가 필요한 분야: 법률 문서 검색, 의료 정보 검색, 전문 지식 질의응답 시스템 등 정확한 정보가 필수적인 애플리케이션에서 Re-ranker로 활용됩니다.

4. RAG 시스템에서 Bi-encoder와 Cross-encoder의 환상적인 조합!
대부분의 실제 RAG 시스템에서는 Bi-encoder와 Cross-encoder를 계층적으로 조합하여 사용하는 것이 가장 효과적입니다.
- 🔍 검색 (Retrieval) 단계 - Bi-encoder 활용:
- 사용자의 쿼리가 들어오면, 미리 임베딩되어 벡터 데이터베이스에 저장된 수많은 문서 중에서 Bi-encoder를 활용해 가장 관련성이 높은 초기 후보군(Top-N)을 빠르게 검색합니다.
- 이 단계에서 수십만, 수억 개의 문서 중 수십~수백 개의 후보 문서를 효율적으로 찾아냅니다.
- ✨ 재랭킹 (Re-rank) 단계 - Cross-encoder 활용:
- Bi-encoder로 검색된 초기 후보군(Top-N)은 아직 노이즈가 있거나 미묘한 관련성을 놓칠 수 있습니다.
- 이 후보군에 대해 Cross-encoder를 사용하여 쿼리와 각 문서 간의 정교한 상호작용을 분석하고, 가장 관련성이 높은 최종 후보군(Top-K)을 선정합니다.
- Cross-encoder는 계산 비용이 높지만, 처리해야 할 문서의 수가 Bi-encoder 단계에서 크게 줄어들었기 때문에 현실적으로 적용 가능합니다.
- ✍️ 생성 (Generation) 단계:
- 재랭킹 단계를 거쳐 최종적으로 선정된 Top-K 문서를 LLM에 Context로 제공하여 사용자 쿼리에 대한 답변을 생성합니다.
실제 사용 사례로 더 자세히 알아볼까요?
1. 고객 서비스 챗봇 (FAQ 및 지식 기반)
- 목표: 고객 질문에 대해 방대한 FAQ 및 지식 기반 문서에서 가장 정확한 답변을 찾아 제공합니다.
- 활용:
- Bi-encoder: 모든 FAQ 문서를 미리 임베딩하여 벡터 데이터베이스(예: ChromaDB)에 저장합니다. 고객 질문이 들어오면 Bi-encoder로 Top-50의 유사 문서를 빠르게 검색합니다.
- Cross-encoder: 검색된 Top-50 문서들을 Cross-encoder에 입력하여 고객 질문과의 관련성 점수를 계산하고, 이를 기반으로 Top-3~5의 핵심 문서를 최종 선정합니다.
- LLM: 최종 선정된 문서들을 LLM에 전달하여 고객 질문에 대한 정확하고 자연스러운 답변을 생성합니다.
- 효과: Bi-encoder로 대규모 문서를 빠르게 필터링하고, Cross-encoder로 핵심 문서를 정확하게 재선정하여 빠르면서도 정확한 답변을 제공합니다.
2. 기업 내부 문서 검색 시스템
- 목표: 직원들이 사내 방대한 보고서, 기술 문서 등에서 필요한 정보를 빠르게 찾을 수 있도록 돕습니다.
- 활용:
- Bi-encoder: 사내 모든 문서를 Bi-encoder로 임베딩하여 벡터 인덱스(예: Elasticsearch)를 구축합니다. 직원이 검색어를 입력하면 Bi-encoder를 통해 Top-100~200개의 관련 문서를 1차로 가져옵니다.
- Cross-encoder: 이 Top-100~200개 문서에 대해 Cross-encoder를 적용하여 검색어와의 문맥적 관련성을 깊이 파악하고, Top-10의 최종 검색 결과를 선정합니다.
- 결과 제시: 선정된 Top-10 문서를 직원에게 리스트 형태로 보여주고, 필요시 LLM을 통해 문서 내용을 요약하여 함께 제시합니다.
- 효과: 대규모 사내 문서에서 신속하게 후보군을 추출하고, Cross-encoder의 정밀한 재랭킹으로 사용자가 원하는 정확한 정보를 찾을 확률을 높여줍니다.
3. 법률 질의응답 시스템
- 목표: 특정 법률 질문에 대해 방대한 법률 데이터베이스에서 정확한 관련 조항이나 판례를 찾아 사용자에게 제공합니다.
- 활용:
- Bi-encoder: 모든 법률 문서를 법률 도메인에 특화된 Bi-encoder로 임베딩하여 벡터 데이터베이스를 구축합니다. 사용자의 법률 질문에 대해 Bi-encoder를 사용하여 Top-N(예: 50개)의 관련 법률 문서를 검색합니다.
- Cross-encoder: 검색된 Top-N 문서를 법률 도메인에 특화된 Cross-encoder로 다시 랭킹하여 Top-K(예: 5개)의 가장 정확한 문서를 선별합니다.
- LLM/결과 제시: 선정된 법률 문서를 바탕으로 LLM이 법률 질문에 대한 답변을 생성하거나, 해당 법률 문서의 원문과 주요 내용을 함께 제시합니다.
- 효과: 법률 분야는 높은 정확도를 요구하므로, Bi-encoder의 속도와 Cross-encoder의 정확도를 결합하는 것이 필수적입니다. 미묘한 법률 용어와 문맥을 정확히 이해하여 올바른 정보를 제공하는 데 기여합니다.
결론: 두 마리 토끼를 잡는 지혜로운 전략
| 특징 | Bi-encoder | Cross-encoder |
|---|---|---|
| 개념 | 쿼리/문서 독립 인코딩 후 유사도 계산 | 쿼리/문서 결합 후 단일 모델 인코딩 및 점수 예측 |
| 속도 | 매우 빠름 (미리 임베딩 가능) | 느림 (쿼리마다 재계산) |
| 정확도 | 상대적으로 낮음 (상호작용 부족) | 매우 높음 (풍부한 상호작용 모델링) |
| 확장성 | 높음 (대규모 문서 집합에 적합) | 낮음 (처리 문서 수에 비례하여 비용 증가) |
| 주요 사용처 | 초기 검색, 대규모 필터링, 빠른 응답 시스템 | 재랭킹, 높은 정확도 요구 시스템 |
RAG 시스템의 재랭킹 단계에서는 Bi-encoder의 빠른 속도와 확장성을 이용해 방대한 문서에서 1차 후보군을 빠르게 선별하고, Cross-encoder의 높은 정확도와 문맥 이해력을 이용해 선별된 후보군 중 최종적으로 가장 관련성 높은 문서를 찾아내는 '투 스테이지 랭킹(Two-Stage Ranking)' 전략이 가장 효과적입니다.
'Machine Learning' 카테고리의 다른 글
| RAG (Retrieval Augmented Generation) 심층 분석 (2) | 2025.07.26 |
|---|---|
| 프롬프트 엔지니어링 완벽 가이드 (0) | 2025.07.26 |
| Preference learning with automated feedback for cache eviction (0) | 2023.07.08 |
| 머신러닝 모델의 성능 평가 지표 (0) | 2020.01.20 |
| 그리드 서치를 이용한 하이퍼파라미터 튜닝 (0) | 2020.01.20 |