1차 검색(Retrieval)은 수백만 문서에서 후보를 빠르게 추려내는 단계입니다. 하지만 속도를 위해 정밀도를 희생합니다. Re-ranking은 추려낸 소수의 후보를 더 정교한 모델로 재평가하여, 최종적으로 LLM에 전달할 최고의 문서를 선별합니다.
2단계 검색 패턴: Recall과 Precision의 분리
이 패턴을 이해하려면 두 가지 핵심 지표를 먼저 알아야 합니다:- Recall (재현율): 전체 정답 문서 중 실제로 검색된 비율. “정답을 얼마나 빠뜨리지 않았는가?” 를 측정합니다.
- Precision (정밀도): 검색된 문서 중 실제 정답의 비율. “검색 결과에 쓸모없는 문서가 얼마나 섞여 있는가?” 를 측정합니다.
- 1단계 (Recall 중시): “관련 있을 수 있는 문서를 하나도 빠뜨리지 말자” → 빠르지만 다소 부정확
- 2단계 (Precision 중시): “이 후보들 중 진짜 관련 있는 것만 골라내자” → 느리지만 매우 정확
참고 왜 한 번에 정밀하게 하지 않는가? 100만 문서를 Cross-encoder로 평가하면 한 쿼리당 수 분이 걸립니다. 20개 문서만 평가하면 수백 밀리초면 충분합니다. 비용 대비 효과 를 최적화하는 것이 2단계 패턴의 핵심입니다.
Bi-encoder vs Cross-encoder: 깊이 있는 비교
Bi-encoder (1차 검색용)
질문과 문서를 각각 독립적으로 임베딩합니다:Cross-encoder (Re-ranking용)
질문과 문서를 하나의 입력으로 결합 하여 Transformer에 통째로 넣습니다.참고 Transformer란? GPT, BERT 등 현대 AI 모델의 기반 아키텍처입니다. 핵심 메커니즘은 Attention(어텐션) 으로, 입력 텍스트의 모든 단어가 다른 모든 단어와의 관련성을 계산하는 방식입니다. 예를 들어 “나는 은행 에서 돈을 인출했다”라는 문장에서, Attention은 “은행”이 “돈”과 강하게 연결됨을 파악하여 금융기관의 “은행”임을 이해합니다. 이 메커니즘 덕분에 Cross-encoder는 질문과 문서 사이의 세밀한 의미 관계를 포착할 수 있습니다.
비유로 이해하기
| 관점 | Bi-encoder | Cross-encoder |
|---|---|---|
| 채용 비유 | 이력서 키워드 스크리닝: 이력서와 채용 공고를 각각 분석하여 키워드 매칭. 빠르지만 맥락 파악 불가 | 심층 면접: 지원자와 면접관이 직접 대화하며 적합성 평가. 느리지만 정밀 |
| 번역 비유 | 두 문장을 각각 요약한 뒤 요약끼리 비교 | 두 문장을 나란히 놓고 단어 대 단어로 대조 |
| 속도 | 100만 문서: ~100ms | 20 문서: ~200ms |
| 정확도 | 좋음 | 매우 좋음 |
주요 Re-ranking 모델 비교
| 모델 | 제공자 | 특징 | 한국어 지원 |
|---|---|---|---|
| Cohere Reranker | Cohere | API 방식, 높은 정확도, 다국어 지원 | 좋음 |
| BGE Reranker v2 | BAAI | 오픈소스, Self-hosting 가능 | 좋음 |
| Jina Reranker | Jina AI | 오픈소스, 가벼움 | 보통 |
| ms-marco MiniLM | Microsoft | 가벼움, 영어 특화 | 미지원 |
참고 Databricks에서의 선택: Cohere Reranker는 Foundation Model API를 통해 쉽게 사용할 수 있습니다. 오픈소스를 선호한다면 BGE Reranker v2를 Model Serving Endpoint로 배포하여 사용할 수 있습니다.
성능 영향: Re-ranking이 만드는 차이
실험 결과 (일반적인 벤치마크 기준)
왜 이런 차이가 나는가?
1차 검색(Bi-encoder)에서는 “대략적으로 관련 있는 20개”를 뽑습니다. 이 중에는:- 진짜 관련 있는 문서 5개: 질문에 정확히 답할 수 있는 문서
- 약간 관련 있는 문서 10개: 주제는 비슷하지만 직접적 답변이 아닌 문서
- 거의 관련 없는 문서 5개: 키워드만 겹치는 문서
실무 파이프라인: Retrieve 20 → Rerank → Top 5
권장 설정
숫자의 의미
| 파라미터 | 값 | 이유 |
|---|---|---|
| 1차 검색 수 | 20 | Recall을 충분히 확보. 30-50으로 늘려도 되지만 Re-ranking 시간 증가 |
| Re-ranking 결과 수 | 5 | LLM 컨텍스트 윈도우를 고려한 최적값. 3-7 범위 권장 |
주의 지연 시간 고려: Re-ranking은 20개 문서 기준 약 100-300ms가 추가됩니다. 실시간 챗봇에서는 전체 응답 시간에 영향을 줄 수 있으므로, Re-ranking 대상 수(1차 검색 결과 수)를 적절히 조절하세요. 50개 이상은 대부분 불필요합니다.
Re-ranking 없이 성능을 높이는 대안
Re-ranking 도입이 어려운 경우 다음 대안을 고려하세요:- 임베딩 모델 업그레이드: 더 좋은 Bi-encoder 모델로 1차 검색 품질 자체를 높임
- 청킹 최적화: 적절한 크기와 오버랩으로 검색 단위 자체의 품질 향상
- 쿼리 확장: 사용자 질문을 LLM으로 확장/변환하여 검색. HyDE(Hypothetical Document Embeddings) 는 LLM에게 “이 질문에 대한 가상의 답변”을 먼저 생성하게 한 뒤, 그 가상 답변의 임베딩으로 검색하는 기법입니다. Query Expansion 은 원래 질문을 여러 변형으로 확장하여 검색 범위를 넓히는 방식입니다.
- 메타데이터 필터링: 카테고리, 날짜 등으로 검색 범위를 사전에 좁힘
이전으로 돌아가기: 핵심 개념 사전 목록