← Resources
By Sora Kashiwagi
— Senior Engineer, Vector Search
·
· TUTORIAL
Hybrid Search: Menggabungkan BM25 dan Vector Search untuk RAG
Keyword (BM25) dan vector search gagal dengan cara yang berlawanan, dan justru itulah alasan RAG produksi menggabungkan keduanya. Panduan ini menjelaskan kedua metode, bagaimana fusion (RRF) menggabungkan hasilnya, posisi reranking, dan kapan hybrid secara nyata mengalahkan pure vector search.
Dua jenis search yang gagal secara berbeda
BM25 (pencarian leksikal atau keyword) memberi skor pada dokumen berdasarkan kecocokan istilah yang persis, memberi bobot lebih besar pada istilah langka dan memberi penalti pada panjang teks. Bersifat deterministik dan berjalan di atas inverted index. Vector (semantic) search mengenkode kueri dan dokumen menjadi dense embedding dan mengambilnya berdasarkan kemiripan nearest-neighbor, sehingga menangkap makna, sinonim, dan parafrase — bahkan lintas bahasa.
Kelemahan keduanya saling bercermin satu sama lain. BM25 melewatkan sinonim dan konsep: kueri "database memory issues" tidak akan menemukan halaman berjudul "cache eviction policies" jika kata-katanya berbeda. Vector search melewatkan token yang persis — akronim, SKU, kode error, ID, nomor model — dan mengalami semantic drift, mengembalikan hasil yang dekat secara embedding tetapi salah, seperti "Adidas running shoes" untuk kueri "Nike running shoes". Karena mode kegagalannya saling melengkapi, tidak ada satu pun yang memadai jika berdiri sendiri.
Apa yang dilakukan hybrid search
Hybrid search menjalankan retrieval leksikal (BM25) dan dense (vector) secara paralel, lalu menggabungkan dua daftar hasil berperingkat menjadi satu. Langkah penggabungan inilah bagian yang menarik, karena skor BM25 dan skor kemiripan vector berada pada skala yang sama sekali berbeda — Anda tidak bisa begitu saja menjumlahkannya.
Itulah sebabnya metode fusion yang dominan, Reciprocal Rank Fusion (RRF), hanya menggunakan posisi peringkat, bukan skor mentah. Skor fusi setiap dokumen adalah jumlah, di kedua retriever, dari 1 dibagi (k ditambah peringkatnya), di mana k adalah konstanta kecil (umumnya 60; beberapa penelitian memakai 20). Karena sepenuhnya mengabaikan distribusi skor, RRF bebas normalisasi dan bekerja "out of the box" — itulah sebabnya ini menjadi default di sebagian besar vector database.
RRF vs weighted fusion
RRF bukan satu-satunya opsi. Weighted (alpha) fusion menormalisasi dua set skor dan memadukan keduanya dengan bobot yang dapat disetel: alpha 0 berarti pure keyword, 1 berarti pure vector, 0,5 setara, dan default-nya sering berada di sekitar 0,75 ke arah semantik. Beberapa engine juga menawarkan relative-score dan distribution-based fusion.
Trade-off-nya: RRF kuat dan ringan parameter, ideal ketika Anda tidak ingin menyetel per-korpus. Weighted fusion memberi Anda kenop untuk mengutamakan pencocokan istilah persis (alpha lebih rendah) pada konten teknis yang padat identifier, atau semantik (alpha lebih tinggi) untuk pertanyaan bahasa alami. Mulailah dengan RRF; gunakan weighted fusion ketika Anda punya alasan jelas untuk memihak salah satu retriever.
Di mana reranking berperan
Hybrid retrieval adalah tahap pertama; reranking adalah tahap kedua. Retriever cepat (BM25, vector, atau hybrid) menarik sekumpulan kandidat, lalu cross-encoder memberi skor ulang setiap kandidat dengan mengenkode kueri dan dokumen secara bersamaan dalam satu lintasan dengan full cross-attention. Cross-encoder jauh lebih akurat daripada retriever tahap pertama, tetapi terlalu mahal untuk dijalankan di seluruh korpus, sehingga hanya memberi skor ulang pada kandidat top-k.
Karena itu, pipeline produksi yang kanonik adalah: hybrid retrieval (BM25 + vector, digabungkan dengan RRF) → cross-encoder atau LLM reranker → hasil teratas masuk ke konteks model. Setiap tahap melakukan pekerjaan yang paling dikuasainya — recall dulu, precision terakhir.
Apakah benar-benar membantu? Dan membangunnya di osFoundry
Peningkatannya nyata, tetapi bergantung pada data Anda. Studi BEIR dari Elastic menemukan bahwa RRF hybrid menaikkan rata-rata NDCG@10 sekitar 18% dibandingkan BM25 saja dan dengan margin lebih kecil dibandingkan encoder terlatih yang kuat, serta sama baik atau lebih baik dari BM25 pada setiap dataset yang diuji. Seiring membaiknya model dense, keuntungan marginal hybrid menyempit — sering kali hanya beberapa persen pada data in-domain — namun tetap paling besar pada korpus out-of-domain, istilah langka, dan kueri yang mencampur bahasa alami dengan identifier yang persis. Hybrid tetap menjadi default produksi.
Pipeline RAG kustom osFoundry mengeksposnya sebagai tahap-tahap yang dapat dikombinasikan, bukan black box: tahap BM25 dan tahap vector berjalan paralel, tahap fusion (RRF secara default, weighted sebagai opsi) menggabungkannya, dan tahap reranking menyempurnakan hasil sebelum sampai ke model. Anda menyetel keseimbangan leksikal-vs-semantik per knowledge base di dalam config, mengikuti pola retrieve-fuse-rerank tanpa menulis kode plumbing-nya.
Frequently asked questions
- Apa perbedaan antara keyword dan semantic search?
- Keyword (leksikal) search, seperti BM25, mencocokkan istilah yang persis dan memberi bobot pada yang langka — presisi tinggi tetapi buta terhadap sinonim. Semantic (vector) search mengenkode makna ke dalam embedding dan mencocokkan berdasarkan kemiripan, sehingga menangkap parafrase dan konsep terkait tetapi bisa melewatkan token yang persis seperti ID dan kode error. Keduanya kuat dalam situasi yang berlawanan.
- Apa itu hybrid search?
- Hybrid search menjalankan retrieval keyword (BM25) dan vector secara paralel dan menggabungkan hasil berperingkat keduanya menjadi satu daftar dengan algoritma fusion. Ini ada karena kedua metode gagal secara berbeda — vector menangani sinonim dan konsep, BM25 mengunci istilah persis, identifier, dan jargon langka — sehingga menggabungkannya meningkatkan recall dan precision.
- Apa itu Reciprocal Rank Fusion (RRF)?
- RRF menggabungkan dua daftar berperingkat hanya menggunakan posisi peringkat, bukan skor mentah. Skor fusi setiap dokumen adalah jumlah di seluruh retriever dari 1 dibagi (k ditambah peringkatnya), di mana k adalah konstanta kecil (umumnya 60). Karena mengabaikan skala skor yang tidak kompatibel dari BM25 dan vector search, ia tidak memerlukan normalisasi dan bekerja baik out of the box.
- Kapan hybrid search mengalahkan pure vector search?
- Ketika kueri mencampur bahasa alami dengan identifier yang persis, menggunakan jargon langka atau domain-spesifik, berjalan terhadap konten out-of-domain, atau multibahasa. Pure vector search bisa memadai untuk pertanyaan yang sepenuhnya konseptual pada data in-domain yang ter-embedding dengan baik. Untuk knowledge base teknis yang penuh kode dan nama produk, hybrid jelas lebih baik.
- Mengapa vector search melewatkan istilah dan ID yang persis?
- Embedding mengompresi teks menjadi vector berukuran tetap yang menangkap makna, bukan ejaan yang persis, sehingga token langka seperti kode error, SKU, dan akronim ikut terhaluskan — sifat yang kadang disebut structural blindness. Model tahu sebuah bagian teks itu tentang apa, tetapi tidak tahu apakah ia memuat string literal yang Anda cari — dan itulah justru keunggulan BM25.
- RRF atau weighted fusion — mana yang harus saya gunakan?
- Mulailah dengan RRF: kuat, ringan parameter, dan tidak memerlukan penyetelan per-korpus. Beralihlah ke weighted (alpha) fusion ketika Anda punya alasan jelas untuk memihak salah satu retriever — alpha lebih rendah untuk mengutamakan pencocokan istilah persis pada konten padat identifier, alpha lebih tinggi untuk mengutamakan semantik pada pertanyaan bahasa alami.
- Apakah hybrid search menambah latency atau biaya, dan apakah sepadan?
- Ia menjalankan dua retrieval plus satu langkah fusion, sehingga ada sedikit overhead, dan reranking menambah lebih banyak lagi. Untuk sebagian besar sistem RAG, peningkatan recall dan precision sepadan dengan biayanya, terutama pada korpus teknis atau konten campuran. Jika Anda memakai data konseptual murni yang ter-embedding dengan baik dan latency sangat kritis, pure vector mungkin sudah cukup — ukurlah pada kueri Anda sendiri.
Sources