RRF (Reciprocal Rank Fusion)
여러 검색기의 결과를 등수만 써서 하나로 합치는 방법.
왜 필요한가
| 검색기 | 점수 범위 |
|---|---|
| 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 |
| 변화 없음 | 13 | 0 |
내려간 7문항은 전부 Dense가 이미 1등으로 맞히던 것이다. BM25가 끼어들어 밀어냈다. 이상적으로는 “잘 맞힌 건 건드리지 말고, 못 찾은 것만 보완”이어야 하는데 RRF는 그 구분을 안 한다.
관련
하이브리드 검색 · BM25 · Dense 검색 · 크로스인코더 리랭커