RRF (Reciprocal Rank Fusion)

여러 검색기의 결과를 등수만 써서 하나로 합치는 방법.

왜 필요한가

Dense 검색BM25점수의 척도가 다르다.

검색기점수 범위
Dense코사인 유사도 — 대략 0~1
BM25위로 열려 있음 — 20도 나오고 45도 나옴

그냥 더하면 BM25가 다 이긴다. 정규화하려면 “dense에 가중치 얼마, BM25에 얼마”를 정해야 하는데, 그 값을 뭘로 정할지가 또 문제다.

해법 — 점수를 버리고 등수만 쓴다

점수(청크) = Σ  1 / (k + 그 검색기에서의 등수)

k는 보통 60 (원논문 권장값).

등수기여 (k=60)
1등1/61 = 0.0164
2등1/62 = 0.0161
10등1/70 = 0.0143
20등1/80 = 0.0125

k가 60이나 되는 이유: 1등과 2등의 차이를 완만하게 만들어, 한 검색기의 1등이 다른 검색기의 합의를 짓밟지 못하게 한다.

장점과 한계

장점가중치 튜닝이 필요 없다. 척도가 달라도 그냥 섞인다
장점구현이 짧다 (수십 줄)
한계무차별적이다 — 한쪽이 이미 잘 맞힌 문항에도 다른 쪽 의견을 반영한다

⚠️ 우리가 관측한 한계

36문항 실측에서 순이득은 +0.073이었지만 내부는 이랬다:

구분문항점수
올라감16+5.87
내려감7−3.24
변화 없음130

내려간 7문항은 전부 Dense가 이미 1등으로 맞히던 것이다. BM25가 끼어들어 밀어냈다. 이상적으로는 “잘 맞힌 건 건드리지 말고, 못 찾은 것만 보완”이어야 하는데 RRF는 그 구분을 안 한다.

관련

하이브리드 검색 · BM25 · Dense 검색 · 크로스인코더 리랭커