· BM25(키워드)와 벡터(의미) 검색은 서로 잘하는 영역이 달라, 둘을 합치면 약점을 메워 줍니다.
· 두 검색 결과를 섞는 대표 방식은 점수 가중합과 순위만 쓰는 RRF(상호 순위 융합)입니다.
· 튜닝의 핵심은 가중치·후보 개수·정규화를 바꿔 가며 평가셋으로 상대 비교하는 것입니다.
→
🔤 BM25 검색
+
🧭 벡터 검색
→
🔀 결과 융합
→
📄 최종 문맥
RAG의 품질은 검색이 좋은 문서를 가져오는가에서 절반이 갈립니다. 그런데 검색 방식에는 크게 두 갈래가 있습니다. 하나는 단어가 겹치는 문서를 찾는 전통적인 키워드 검색(BM25)이고, 다른 하나는 의미가 가까운 문서를 찾는 벡터 검색입니다. 둘은 잘하는 영역이 서로 달라서, 한쪽만 쓰면 놓치는 질문이 생깁니다. 하이브리드 검색은 이 두 방식을 함께 돌려 결과를 합치는 접근입니다. 이번 글에서는 두 검색의 차이, 결과를 합치는 방법, 그리고 무엇을 어떻게 튜닝하는지를 개념 중심으로 정리합니다.
🎯 왜 하이브리드 검색인가
벡터 검색은 의미를 이해하기 때문에 표현이 달라도 같은 뜻의 문서를 잘 찾아 줍니다. 예를 들어 “노트북이 안 켜져요”라는 질문에 “전원이 들어오지 않는 기기” 같은 문서를 연결할 수 있습니다. 하지만 벡터 검색은 정확한 고유명사·코드·모델명·숫자처럼 의미보다 철자 그 자체가 중요한 경우에 약합니다. 비슷한 벡터로 뭉뜽그려져 엉뚱한 문서를 가져오기도 합니다.
반대로 BM25는 단어가 정확히 겹치는지를 보기 때문에 제품 코드나 특정 용어를 찾는 데 강합니다. 대신 표현이 다르면(동의어·말바꿈) 놓치기 쉽습니다. 이렇게 서로의 약점이 반대이기 때문에, 둘을 합치면 한쪽이 놓친 문서를 다른 쪽이 건져 올립니다. 하이브리드 검색이 널리 쓰이는 이유가 여기에 있습니다.
한 줄 정리 — 하이브리드 검색은 의미(벡터)와 글자(BM25)의 강점을 합쳐, 한쪽만으로는 놓치는 문서를 서로 메우는 전략입니다.
🔤 BM25와 벡터는 무엇이 다른가
BM25는 질문과 문서에 공통으로 나오는 단어의 빈도를 바탕으로 점수를 매기는 방식입니다. 흔한 단어는 가중치를 낮추고 드문 단어는 높게 쳐 주며, 문서 길이도 보정합니다. 핵심은 단어가 실제로 등장하는가라는 점입니다. 그래서 키워드 기반 검색, 희소(sparse) 검색이라고도 부릅니다.
벡터 검색은 질문과 문서를 각각 임베딩이라는 숫자 벡터로 바꾼 뒤, 벡터 사이의 거리(또는 코사인 유사도)가 가까운 문서를 찾습니다. 단어가 하나도 안 겹쳐도 의미가 비슷하면 가까운 벡터가 됩니다. 밀집(dense) 검색이라고도 부릅니다.
🔀 두 결과를 합치는 두 가지 방식
두 검색을 따로 돌리면 각각 순위가 매겨진 문서 목록이 나옵니다. 문제는 이 둘을 어떻게 하나로 합치느냐입니다. 대표적으로 두 가지 방식이 있습니다.
첫째는 점수 가중합입니다. BM25 점수와 벡터 유사도 점수에 각각 가중치를 곱해 더한 뒤, 합산 점수로 다시 순위를 매깁니다. 직관적이지만 한 가지 함정이 있습니다. 두 점수는 단위와 범위가 전혀 다르기 때문에(BM25는 몇십까지도 가고, 코사인 유사도는 0~1), 그냥 더하면 한쪽이 지배해 버립니다. 그래서 더하기 전에 각 점수를 0~1 범위로 정규화하는 과정이 필요합니다.
둘째는 RRF(상호 순위 융합, Reciprocal Rank Fusion)입니다. 점수 자체를 쓰지 않고 순위만으로 합치는 방식이라, 단위가 다른 문제를 자연스럽게 피해 갑니다. 그래서 실무에서 기본값으로 자주 선택됩니다.
🧮 RRF(상호 순위 융합) 이해하기
RRF의 아이디어는 단순합니다. 각 검색 결과에서 문서가 몇 등인지만 보고, 등수가 높을수록 큰 점수를 주되 등수의 역수로 점수를 매깁니다. 그렇게 얻은 점수를 여러 검색에 걸쳐 더해 최종 순위를 만듭니다. 점수의 크기 대신 순위만 쓰기 때문에, BM25와 벡터처럼 단위가 다른 결과도 공평하게 섞입니다.
# RRF 점수 계산의 개념 (의사코드) # rank = 해당 검색에서의 등수(1등, 2등 ...), k는 완충 상수 각 문서 d 에 대해 score(d) = 0 각 검색결과 목록마다 d 가 그 목록에 있으면 score(d) += 1 / (k + rank) # 등수 낮을수록 큰 점수 최종순위 = score 가 높은 순으로 정렬
여기서 k는 상위권 문서의 영향력을 조절하는 완충 상수입니다. k를 작게 하면 1~2등 문서의 비중이 아주 커지고, 크게 하면 상위권과 중위권의 점수 차이가 완만해져 여러 검색의 의견이 고르게 반영됩니다. 또 하나 장점은, 한 문서가 두 검색 모두에서 상위에 올랐을 때 점수가 합산되어 자연스럽게 위로 올라간다는 점입니다. 양쪽이 공통으로 추천한 문서가 우대받는 셈입니다.
🔧 무엇을 튜닝하는가
하이브리드 검색을 “켰다”고 끝이 아닙니다. 실제 성능은 몇 가지 손잡이를 어떻게 돌리느냐에 따라 달라집니다. 대표적인 튜닝 대상은 다음과 같습니다.
이 손잡이들을 바꿀 때 감으로 판단하면 안 됩니다. 실제 질문과 정답 문서로 만든 평가셋을 놓고, 설정을 바꿔 가며 검색 지표(예: 필요한 문서를 얼마나 잘 가져왔는지)를 비교해야 합니다. 앞서 RAG 평가에서 다룬 맥락 정밀도·재현율이 바로 이 단계에서 쓰입니다.
📊 방식 비교 정리
지금까지 본 검색·융합 방식의 성격을 표로 정리하면 선택에 쓰기 편합니다.
| 방식 | 무엇을 보나 | 강점 / 주의점 |
|---|---|---|
| BM25 | 단어 일치(빈도) | 정확한 용어에 강함 / 동의어·말바꿈에 약함 |
| 벡터 검색 | 의미 유사도 | 의미 연결에 강함 / 고유명사·코드에 약함 |
| 점수 가중합 | 정규화한 점수의 합 | 가중치로 세밀 조절 / 정규화가 꼭 필요 |
| RRF | 순위(등수) | 단위 차이 걱정 없음 / 점수 크기 정보는 버림 |
정리하면, 단위가 다른 점수를 섞는 부담을 피하고 싶다면 RRF가 간편한 기본값이고, 한쪽 검색에 분명히 더 무게를 두고 싶다면 가중합이 세밀한 조절에 유리합니다. 둘 중 무엇이 우리 데이터에 맞는지는 결국 평가셋으로 확인해야 합니다.
💡 실무 팁
- RRF부터 시작 — 정규화·가중치 고민 없이 쓸 수 있어, 하이브리드의 기본선을 잡기에 좋습니다.
- 가중합은 반드시 정규화 — BM25와 벡터 점수 범위가 다르므로, 안 맞추면 한쪽이 결과를 지배합니다.
- 후보 개수를 넉넉히 — 융합 전 각 검색에서 충분히 가져온 뒤 섞고, 최종적으로 상위 몇 개만 모델에 넘기세요.
- 리랭커를 얹기 — 융합한 상위 후보를 더 정교한 재정렬(rerank) 모델로 한 번 더 걸러 주면 품질이 올라가는 경우가 많습니다.
- 질문 유형별로 점검 — 코드·고유명사 질문과 서술형 질문을 나눠 보면, 어느 검색이 부족한지 선명하게 드러납니다.
❓ 자주 묻는 질문 (FAQ)
Q. 벡터 검색만 쓰면 되지, 굳이 BM25를 같이 써야 하나요?
A. 의미 기반인 벡터 검색은 정확한 단어 일치에 약합니다. 제품 코드·에러 메시지·고유명사가 많은 데이터라면 BM25가 놓친 부분을 크게 보완해 주므로, 함께 쓰는 쪽이 안전합니다.
Q. 가중합과 RRF 중 무엇이 더 나은가요?
A. 정답은 데이터에 따라 다릅니다. RRF는 설정이 간단해 기본값으로 좋고, 가중합은 한쪽 검색에 무게를 더 주고 싶을 때 세밀한 조절이 가능합니다. 평가셋으로 두 방식을 비교해 고르세요.
Q. 가중치는 어떻게 정하나요?
A. 감이 아니라 평가셋 기반 비교로 정합니다. 몇 가지 비율을 돌려 보고 검색 지표(필요한 문서를 잘 가져왔는지)가 가장 좋은 설정을 고르는 것이 현실적입니다.
마무리
하이브리드 검색은 키워드(BM25)와 의미(벡터)라는 성격이 다른 두 검색을 합쳐, 한쪽이 놓치는 문서를 다른 쪽이 메우도록 하는 전략입니다. 두 결과를 합치는 방법으로는 점수를 정규화해 더하는 가중합과, 순위만으로 섞어 단위 차이를 피하는 RRF가 대표적입니다. 어느 쪽을 쓰든 성능을 좌우하는 것은 가중치·후보 개수·정규화·k 값 같은 손잡이를 어떻게 맞추느냐이며, 이것은 감이 아니라 평가셋 기반 상대 비교로 결정해야 합니다. 여기에 재정렬(rerank) 단계를 더하면 상위 후보의 품질을 한 번 더 끌어올릴 수 있습니다. 결국 하이브리드 검색 튜닝은 “둘을 켠다”가 아니라, 우리 데이터와 질문에 맞게 섞는 비율을 찾아가는 과정입니다.
답글 남기기