하이브리드 검색
하이브리드 검색은 키워드(BM25 같은 희소 벡터) 검색과 의미 기반 벡터(임베딩) 검색을 함께 실행한 뒤 두 결과를 하나의 순위로 융합하는 검색 방식입니다. 정확한 단어 일치와 문맥적 의미를 동시에 잡아내기 때문에 RAG와 AI 검색의 검색(retrieval) 정확도를 높이는 데 널리 쓰입니다.
- 하이브리드 검색은 키워드 검색(BM25)과 벡터(의미) 검색을 병렬로 실행해 두 결과를 한 순위로 합치는 방식입니다.
- 키워드 검색은 제품 코드·고유명사·전문 용어 같은 정확 일치에 강하고, 벡터 검색은 동의어·문맥·의역 질의에 강해 둘을 합치면 약점을 서로 보완합니다.
- 두 결과를 합치는 표준 융합 알고리즘은 RRF(Reciprocal Rank Fusion, 상호 순위 융합)이며, 점수 대신 순위만 사용해 스케일이 다른 점수를 정규화하는 문제를 피합니다.
- Elasticsearch와 Azure AI Search는 RRF 상수 k의 기본값으로 60을 사용하며, Weaviate는 alpha 파라미터(0=키워드, 1=벡터, 기본 0.75)로 가중치를 조절합니다.
- RAG·AI 검색 파이프라인에서 검색 품질을 끌어올리는 핵심 기법이며, 보통 융합 결과에 리랭킹(reranking)을 덧붙여 정밀도를 더 높입니다.
하이브리드 검색이란
하이브리드 검색은 키워드 검색과 벡터 검색이라는 성질이 다른 두 검색을 동시에 돌린 뒤, 각자가 내놓은 결과 목록을 하나의 순위로 융합(fusion)하는 검색 방식입니다. Weaviate는 이를 "검색 결과의 정확도와 관련성을 높이기 위해 여러 검색 알고리즘을 결합하는 기법"으로 정의하며, 구체적으로는 키워드 기반의 희소 벡터(sparse vector)와 의미 기반의 밀집 벡터(dense vector)를 하나의 순위 목록으로 합칩니다.
이 방식이 필요한 이유는 두 검색이 각각 잘하는 영역과 못하는 영역이 뚜렷하기 때문입니다. BM25 같은 키워드(희소) 검색은 단어 빈도와 문서 길이를 기준으로 점수를 매기므로 제품 코드, 고유명사, 희귀한 전문 용어처럼 "정확히 그 단어"를 찾는 질의에 강하지만, 단어가 달라지면 의미가 같아도 놓칩니다. 반대로 임베딩 기반의 벡터(밀집) 검색은 의역·동의어·문맥을 잘 잡아내지만, 자주 등장하지 않는 정확한 키워드 일치를 과소평가하는 경향이 있습니다. 하이브리드 검색은 두 결과를 합쳐 이 약점을 서로 메웁니다. 그래서 ChatGPT·Perplexity·구글 AI 오버뷰 같은 생성형 검색의 기반이 되는 RAG 파이프라인에서 검색(retrieval) 단계의 품질을 끌어올리는 핵심 기법으로 자리 잡았습니다.
키워드 검색 vs 벡터 검색 vs 하이브리드 검색
| 구분 | 키워드 검색 (BM25) | 벡터 검색 (임베딩) | 하이브리드 검색 |
|---|---|---|---|
| 매칭 기준 | 정확한 단어 일치, 단어 빈도 | 의미·문맥 유사도 | 둘을 병렬 실행 후 융합 |
| 강한 질의 | 제품 코드·고유명사·전문 용어 | 동의어·의역·자연어 질문 | 정확 일치와 의미 모두 |
| 약점 | 표현이 바뀌면 의미가 같아도 놓침 | 희귀 키워드 정확 일치 과소평가 | 구현·튜닝 복잡도 증가 |
| 데이터 표현 | 역색인(inverted index) | 벡터 인덱스(ANN) | 희소 + 밀집 동시 사용 |
| 결과 결합 | 단독 점수 | 단독 점수(코사인 등) | RRF·convex combination으로 융합 |
두 결과를 합치는 법: RRF(상호 순위 융합)
핵심 난점은 두 검색의 점수 체계가 서로 다르다는 데 있습니다. BM25 점수와 벡터 코사인 유사도(보통 -1~1)는 스케일이 달라서 단순히 더하거나 평균 내면 한쪽이 결과를 지배해 버립니다. 가장 널리 쓰이는 해법이 RRF(Reciprocal Rank Fusion)로, 점수 자체를 무시하고 각 목록에서의 순위(rank)만 사용합니다. 문서가 각 목록에서 받은 순위의 역수를 모두 더해 최종 점수를 만드는 방식입니다.
Azure AI Search 공식 문서는 한 문서의 RRF 점수를 1 / (rank + k)의 합으로 계산하며, 실험상 k를 60 정도의 작은 값으로 둘 때 가장 잘 동작한다고 설명합니다. Elasticsearch 역시 동일한 공식을 쓰며 순위 상수 rank_constant의 기본값이 60이고, 융합을 적용하려면 최소 두 개의 검색기(retriever)가 필요합니다. Elasticsearch가 명시한 의사코드는 다음과 같습니다.
score = 0.0
for q in queries:
if d in result(q):
score += 1.0 / ( k + rank( result(q), d ) )
return score여기서 k는 순위 상수, rank()는 1부터 시작하는 문서의 순위입니다. 이렇게 하면 두 검색의 점수 단위를 정규화할 필요 없이, 양쪽에서 상위에 오른 문서가 자연스럽게 높은 통합 점수를 받습니다. Weaviate도 기본 융합으로 RRF를 사용하며 그 공식을 ∑d∈D 1/(k + r(d))로 제시합니다.
가중치 조절과 다른 융합 방식
Weaviate에서는 alpha 파라미터로 두 검색의 비중을 조절합니다. alpha가 0이면 순수 키워드 검색, 1이면 순수 벡터 검색, 0.5면 동일 가중이며 기본값은 0.75로 벡터 쪽에 약간 더 무게를 둡니다.
RRF만 정답은 아닙니다. Pinecone의 연구 "An Analysis of Fusion Functions for Hybrid Retrieval"는 어휘 점수와 의미 점수를 가중 합산하는 convex combination(볼록 결합)이 도메인 내·도메인 외 설정 모두에서 RRF보다 더 좋은 성능을 보였다고 보고합니다. 또한 통념과 달리 RRF가 파라미터에 민감하며, convex combination은 점수 정규화 방식에 비교적 둔감하고 적은 학습 예시만으로 하나의 파라미터를 목표 도메인에 맞춰 튜닝할 수 있어 샘플 효율이 좋다고 분석합니다. 즉 RRF는 튜닝 없이 바로 쓰기 좋은 기본값이고, 점수 가중 융합은 데이터에 맞춰 조정하면 더 나은 결과를 낼 수 있습니다.
적용 체크리스트
- 질의 유형을 점검합니다. 제품 코드·고유명사·정확 일치가 중요하면 키워드 비중을, 자연어 질문·의역이 많으면 벡터 비중을 높입니다.
- 같은 코퍼스에 역색인(키워드)과 벡터 인덱스를 함께 구축하고 두 검색을 병렬로 실행합니다.
- 기본 융합은 RRF로 시작하고 상수 k는 60 부근에서 둡니다(Elasticsearch·Azure 기본값).
- Weaviate를 쓴다면 alpha를 0.5~0.75 범위에서 실제 질의 로그로 A/B 비교해 조정합니다.
- 융합 결과 상위 N개에 리랭킹(reranking) 모델을 덧붙여 최종 정밀도를 높이는 구성을 검토합니다.
- 점수 가중 융합(convex combination)을 쓸 경우, 두 점수의 정규화·가중치를 검증 셋으로 튜닝합니다.