"키워드는 입력한 단어를 찾고, 벡터는 표현이 달라도 같은 뜻을 찾아. 둘을 합치면 하나만 고를 필요가 없어."
벡터는 단어가 다른 같은 생각을 찾아
임베딩 모델은 텍스트를 고차원 공간의 점으로 바꿔. Lantern이 쓰는 벡터는 1024차원이고, 뜻이 가까운 문장들이 서로 가까운 곳에 놓여. 그래서 '시장 공포 속에서 침착함을 유지하는 법'을 검색해도 단어가 하나도 겹치지 않는 '폭락기의 감정 규율' 구절을 찾을 수 있어. BM25가 정확한 단어에 강하다면 벡터는 표현이 다른 같은 의미를 보충해.
두 검색의 점수는 바로 더할 수 없어
BM25 결과와 벡터 결과를 각각 순위로 얻었다고 해보자. BM25 점수와 코사인 유사도는 서로 다른 단위라 숫자 크기를 비교할 수 없어. 억지로 같은 범위에 맞추면 코퍼스가 바뀔 때마다 보정과 가중치를 다시 손봐야 해. 하이브리드 검색에서 가장 쉽게 깨지는 부분이 바로 이 점수 혼합이야.
RRF는 점수를 버리고 등수만 사용해
Reciprocal Rank Fusion은 각 목록에서의 위치로 1 / (k + rank)를 계산해 더해. k는 보통 60을 쓰고, 한 목록에서 상위에 있거나 두 목록 모두에 등장한 결과가 높은 합산값을 얻어. BM25 점수와 코사인 값을 산식에 넣지 않으니 서로 다른 척도를 맞출 필요가 없어.
화려한 보정보다 단순한 합의가 오래 가
가중치를 학습하고 점수 분포를 교정하는 더 복잡한 방법도 있어. 하지만 RRF는 사실상 상수 하나만으로 서로 다른 척도에 잘 버티고 별도 학습도 필요 없어. 임베딩 서버가 멈추면 키워드 목록 하나만 남았다고 응답에서 밝히고, 서버가 살아 있으면 두 독립된 검색기가 함께 높게 평가한 결과를 위로 올려. 적은 복잡도로 얻는 가치가 커서 기본 융합 방식으로 쓰기 좋아.
특히 두 목록 모두에서 높게 나온 결과는 독립된 두 관점의 동의를 받은 셈이야. 정확한 단어도 맞고 의미도 가깝다는 뜻이니 한쪽에서만 우연히 높게 나온 결과보다 믿을 만해. RRF는 이 합의를 별도 학습 없이 순위 산수만으로 위로 끌어올려.