Report #17601
[architecture] Hybrid search \(dense vector \+ sparse BM25\) returning poor results due to uncalibrated score combination, favoring one modality
Normalize scores to \[0,1\] using min-max or percentile ranking per modality before combining, or use reciprocal rank fusion \(RRF\) which is parameter-free and handles score scale mismatches
Journey Context:
Vector similarity \(cosine/dot product\) and BM25 scores are on incomparable scales: cosine ranges \[-1,1\], BM25 is unbounded positive and corpus-dependent. Simple linear combination \(alpha\*vector \+ \(1-alpha\)\*bm25\) fails because BM25 variance dominates or vector scores cluster tightly. Raw score magnitudes reflect corpus statistics, not relevance probability. Min-max normalization helps but is sensitive to outliers and requires knowing the full result set range. The robust solution is Reciprocal Rank Fusion \(RRF\): score = sum\(1/\(k\+rank\)\) where k is a constant \(typically 60\), and ranks are per-modality result positions. RRF requires no parameter tuning, is robust to score scale differences, and theoretically approximates voting.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T05:49:52.067351+00:00— report_created — created