후보군의 "공정한 결합"
'🔤 키워드 검색'과 '🤔 의미 검색'이라는 서로 다른 두 엔진의 결과를 합칠 때,
점수 스케일 차이로 생기는 편향 문제를 설명하고,
이를 해결하는 대표적 접근인
**Linear Combination(정규화 후 가중합)**과
**Reciprocal Rank Fusion(RRF, 순위 기반 융합)**을 비교해
"상황별로 어떤 결합이 더 적합한지"를 정리합니다.
🧭 전체 검색 흐름에서 ‘결합’의 위치
하이브리드/RAG 파이프라인에서 **결합(Combination)**은 '찾기' 단계의 중심에 있습니다.
서로 다른 방식으로 뽑힌 후보를
하나의 일관된 후보 리스트로 통합해,
다음 단계(리랭킹/생성)가 안정적으로 움직이게 만드는 다리 역할을 합니다.
- 준비(Preparation)
- 🧩 청킹(Chunking): 원본 문서를 의미 있는 단위로 분할
- 🏷️ 메타데이터(Metadata): 출처/날짜/분류 등 부가 정보 태깅
- 🧠 임베딩(Embedding): 각 청크를 벡터로 변환(의미 공간에 배치)
- 찾기(Retrieval & Ranking)
- 🔤 키워드 후보군(Sparse candidates): BM25 등 키워드 기반 검색
- 🤔 의미 후보군(Dense candidates): 벡터 유사도/거리 기반 의미 검색
- ⚖️ 결합(Combination): 두 후보군을 하나의 목록으로 통합
- 🎯 리랭킹(Re-ranking): 통합 목록의 순서를 재조정해 최종 후보 확정
이번 글은 이 흐름 중 ⚖️ 결합 로직에만 집중합니다. ❗
❓ 결합 = '그냥 섞기' ?

결합은 단순히 "두 결과를 이어붙이는 일"이 아닙니다.
가장 큰 이유는 키워드 검색 점수와 의미 검색 점수가 같은 척도(scale)가 아니기 때문입니다.
- 키워드 검색(BM25 등) 점수는
데이터/쿼리/필드 구성에 따라 분포가 크게 달라지고,
고정된 상한이 있다고 보기 어렵습니다. - 의미 검색(유사도/거리 기반) 점수는
사용한 유사도/거리 정의(코사인/도트프로덕트/L2 등)와 **후처리 방식(0~1 변환 등)**에 따라
범위와 해석이 달라집니다.
그래서 두 점수를 아무 조정 없이 더하면, 한쪽 신호가 다른 쪽을 압도해 결과가 왜곡될 수 있습니다.
결국 "공정한 결합"을 하려면:
- 점수를 **같은 기준으로 맞추는 정규화(Normalization)**를 하거나
- 점수 대신 순위(rank) 정보로 융합하는 방법을 써야 합니다.
이 문제를 푸는 대표적인 두 접근이 Linear Combination과 RRF입니다.
방법 A — Linear Combination (정규화 후 가중합) 운영 감각
Linear Combination은 점수 기반(Score-based) 결합입니다.
❗ 핵심은 "스케일을 맞춘 뒤, 두 점수를 가중합으로 섞는 것" ❗ 입니다.
핵심 아이디어
- 정규화(Normalization): 서로 다른 점수 범위를 공통 척도로 맞춥니다.
- 흔한 예: min-max 정규화(각 목록 안에서 최소=0, 최대=1로 변환)
- 상황에 따라 다른 정규화(분포 기반/클리핑 등)를 쓰기도 합니다.
- 가중합(Weighted sum): 정규화된 두 점수에 가중치를 두고 합칩니다.
- 직관: “이 쿼리 유형은 키워드 신호를 더 믿는다/의미 신호를 더 믿는다”를 숫자로 표현할 수 있습니다.
장점과 리스크
- 강점
- 세밀한 제어: 가중치로 결과 성향을 튜닝하기 쉽습니다.
- 잘 맞추면 강력함: 데이터/쿼리 분포를 이해하고 튜닝이 잘 되면 높은 성능을 기대할 수 있습니다.
- 리스크
- 튜닝 민감성:
최적 가중치는 데이터/쿼리 패턴 변화에 따라 달라질 수 있어 운영 부담이 생깁니다. - 이상치(outlier) 취약:
특히 min-max 계열 정규화는 “비정상적으로 큰 점수 1개”가 최대값이 되면
나머지 점수가 눌려 신호가 약해질 수 있습니다.
(키워드 반복/필드 편향 같은 케이스에서 자주 체감됩니다.)
- 튜닝 민감성:
정리하면, Linear는 "조정 가능성"이 큰 대신 "튜닝/관리"가 필요합니다.
방법 B — RRF (Reciprocal Rank Fusion) 랭크 기반 결합 운영 감각
RRF는 순위 기반(Rank-based) 결합입니다.
❗ 점수 스케일 문제를 점수를 버리고 순위만 사용하는 방식으로 우회 ❗ 합니다.
핵심 아이디어
- 점수 대신 순위 활용: 각 검색 결과 목록에서 문서가 몇 위인지(rank)만 보고 통합 점수를 만듭니다.
- → 스케일이 달라도 결합이 흔들리지 않는 편입니다.
- RRF의 직관: "각 목록에서 상위권에 꾸준히 등장한 문서를 더 신뢰한다”는 합의(Consensus) 방식입니다.
- 완화 계수(k)는 1~2위 같은 상위권이 전체를 독식하지 않도록 점수 차이를 완만하게 만들기 위해 둡니다.
- 실무 구현에서는 k를 고정값으로 두고 시작하는 경우가 많지만, 반드시 특정 값이어야 하는 건 아닙니다.
장점과 리스크
- 강점
- 안정성과 견고함: 스케일/분포가 달라도 결과가 비교적 안정적입니다.
- 운영이 단순: 민감한 가중치 튜닝 없이도 “기본값으로 괜찮게” 나오는 경우가 많습니다.
- 변화 대응력: 데이터 분포가 흔들려도 크게 망가지지 않는 편입니다.
- 리스크
- 점수 정보 손실:
"1위가 2위보다 압도적으로 확실한 상황" 같은 정보가 있어도,
순위만 쓰면 그 차이를 충분히 반영 못 할 수 있습니다. - 잘못된 상위 랭킹의 영향:
한쪽 검색이 상위에 "이상한 문서"를 올리면,
그 문서가 융합에서도 과대평가될 수 있습니다.
- 점수 정보 손실:
정리하면, RRF는 "안정성/간편함"이 강점인 대신 "세밀한 제어"는 약합니다.
❓ 그렇다면 둘 중 무엇을 선택하는게 정답일까요 ❓
✅ 선택 가이드
Linear vs RRF는 정답이라기보다 트레이드오프입니다.
아래 3가지 기준으로 고르면 깔끔합니다.
- 조정 가능성(튜닝)
- Linear: 높음(가중치로 성향 조절 가능)
- RRF: 낮음(세밀한 성향 조절은 제한적)
- 안정성/간편함
- Linear: 분포 변화/이상치에 민감할 수 있어 운영 부담이 생길 수 있음
- RRF: 튜닝 없이도 안정적으로 출발하기 쉬움
- 리랭커와의 시너지
- Linear: 잘 튜닝되면 후보를 더 정돈해 리랭커의 부담을 줄일 여지가 있지만, 튜닝이 전제입니다.
- RRF: 다양한 후보를 안정적으로 공급해 리랭커가 "고르기" 쉬운 판을 만들어 주는 장점이 있습니다.
실무적으로 흔한 진행 방식 ('추천'이 아니라 관찰되는 패턴)
- 초기(베이스라인): RRF 같은 안정적인 융합으로 먼저 기준선을 만들고
- 개선(목표 지향 튜닝): 특정 쿼리 유형에서 필요할 때만 Linear로 세밀 조정하는 흐름을 많이 택합니다.
폭넓게 후보를 확보하는 방법
이번 글에서는
키워드 후보군과 의미 후보군을
**하나의 통합 리스트로 만드는 결합(⚖️)**을 다뤘습니다.
하지만 결합 결과는 "두 검색의 1차 결과를 공정하게 합친 것"에 가깝기 때문에,
사용자에게 바로 보여주기엔 순서가 아직은 거칠 수 있습니다.
그래서 다음 단계에서는
결합으로 만든 상위 후보를 대상으로,
더 정밀하게 읽고 판단하는 방법으로 **'진짜 최종 순서'를 다시 세우는 리랭킹(🎯)**으로 넘어갑니다.
즉, 1차(찾기)는 폭넓게 후보를 확보하고,
2차(리랭킹)는 그 후보 중 정답에 가까운 것을 더 정확히 골라내는
역할 분담으로 이해하면 자연스럽습니다.
요약의 레퍼런스:
RRF 원전
https://cormack.uwaterloo.ca/cormacksigir09-rrf.pdf
하이브리드 결합 함수들을 분석 (점수 정규화/결합의 함정까지)
https://cs.uwaterloo.ca/~jimmylin/publications/Li_etal_SIGIR2022.pdf
https://arxiv.org/pdf/2503.15191
https://arxiv.org/pdf/2410.20878
정규화 vs 랭크결합의 정리
https://opensearch.org/blog/building-effective-hybrid-search-in-opensearch-techniques-and-best-practices/
Building effective hybrid search in OpenSearch: Techniques and best practices
Learn about lexical, semantic, and hybrid search in OpenSearch. Discover how hybrid search merges results from multiple query sources for improved relevance.
opensearch.org
RRF를 "병렬 검색 결과 통합" 관점으로 설명
https://learn.microsoft.com/en-us/azure/search/hybrid-search-ranking
Hybrid search scoring (RRF) - Azure AI Search
Describes the Reciprocal Rank Fusion (RRF) algorithm used to unify search scores from parallel queries in Azure AI Search.
learn.microsoft.com
후보군 → 리랭크에 대한 근거
https://sbert.net/examples/sentence_transformer/applications/retrieve_rerank/README.html
https://www.pinecone.io/learn/series/rag/rerankers/
Retrieve & Re-Rank — Sentence Transformers documentation
Retrieve & Re-Rank In Semantic Search we have shown how to use SentenceTransformer to compute embeddings for queries, sentences, and paragraphs and how to use this for semantic search. For complex search tasks, for example question answering retrieval, the
sbert.net
Rerankers and Two-Stage Retrieval | Pinecone
Learn how to build better retrieval augmented generation (RAG) pipelines for LLMs, search, and recommendation. In this chapter we explore two-stage retrieval and the incredible accuracy of reranker models.
www.pinecone.io
해당 글은 AI 어시스턴트로 작성되었습니다.
NotebookLM과 Chat GPT를 사용하여 작성되었습니다.
'AI - 검색의 여정 > Step 2 - 찾기' 카테고리의 다른 글
| AI 검색: 하나의 질문이 정답 후보를 찾아가는 여정 (0) | 2026.01.12 |
|---|---|
| 🧪 평가/개선(Evaluation & Improvement): 좋아졌는지 '증명'하고 다음 개선으로 연결하기 (0) | 2026.01.09 |
| 🎯 리랭킹(Re-ranking): 후보를 다시 읽고 '진짜 순서'로 정렬하기 (0) | 2026.01.08 |
| 🤔 의미 검색(시멘틱 서치): 임베딩으로 후보군을 만드는 두 번째 축 (0) | 2026.01.05 |
| 🔤 키워드 검색(어휘 검색): 후보군을 만드는 가장 단단한 방법 (0) | 2026.01.05 |