Retrieval satu modalitas gagal di edge case: dense vector melewatkan token dan ID langka; leksikal murni melewatkan parafrasa dan kemiripan semantik. Retrieval hibrida menggabungkan sinyal pelengkap - semantik dense, leksikal sparse, metadata terstruktur, freshness temporal - untuk menghasilkan candidate set yang stabil dan presisi tinggi. Artikel ini merinci arsitektur, normalisasi, fusion scoring, penanganan kegagalan, dan evaluasi.
Motivasi
Skenario kegagalan:
- Proper noun atau kode SKU terlewat oleh model dense.
- Query perubahan harga menarik snapshot lama yang tidak mendapat temporal boost.
- Pertanyaan natural panjang terlalu dibobot pada stopword dalam sistem sparse-only.
- False positive vektor pada halaman yang terlalu luas secara semantik, seperti marketing fluff, tanpa jangkar leksikal.
Hybrid mengurangi ini dengan menangkap dimensi bukti yang ortogonal.
Pelapisan komponen
Alur yang direkomendasikan:
- Query Embedding -> ANN search (k_vec)
- Lexical Search (BM25 / SPLADE / Elasticsearch) (k_lex)
- Union -> Score Normalization (scaling per sumber)
- Metadata Filter Pass (locale, access_tier, page_type)
- Penyesuaian diversity dan freshness
- Cross/Mono Re-Ranker opsional
- Final Truncation (top K)
Pertahankan skor mentah sebelum fusion untuk audit.
Normalisasi query
Langkah:
- Unicode normalize NFKC
- Lowercase, sambil mempertahankan snapshot casing untuk format jawaban jika perlu
- Tokenize dan pertahankan stopword, karena embedding semantik dapat memanfaatkan konteks
- Synonym / Alias Expansion: tambahkan token alternatif untuk pemetaan codename produk internal, tidak dimasukkan ke prompt model dan hanya digunakan untuk sparse retrieval
- Numeric & Version Extraction: tangkap pola X.Y.Z untuk scoring leksikal yang tertarget
Filter metadata dan atribut
Filter yang diterapkan setelah union kandidat awal meminimalkan kehilangan recall. Field umum: locale, access_tier, page_type, product_area, updated_bucket. Tegakkan filter keamanan seperti tenant atau tier SEBELUM scoring fusion untuk mencegah kebocoran memengaruhi re-ranking. Sediakan mode debug yang mengembalikan set filtered_out untuk inspeksi.
Strategi re-ranking
Gunakan cross-encoder ringan, misalnya model distilled, di atas N teratas (10-20). Jika latensi melebihi budget, degrade: lewati re-rank ATAU kurangi jumlah kandidat sambil menaikkan bobot leksikal. Lacak re_rank_delta = MRR_post - MRR_pre untuk membenarkan biaya. Cache hasil re-rank untuk union set identik dalam TTL pendek.
Freshness dan sinyal temporal
Hitung freshness_weight = exp(-lambda * age_days) dengan lambda yang disetel per jenis konten, lebih tinggi untuk pricing dan lebih rendah untuk API yang stabil. Gabungkan: final_score = w_sem * sem_score + w_lex * lex_score + w_fresh * freshness_weight + w_meta * meta_priors. Normalisasi setiap komponen lebih dulu, dengan z-score atau min-max, agar tidak ada komponen yang mendominasi.
Mode kegagalan
| Kegagalan | Penyebab | Mitigasi |
|---|---|---|
| Bias popularitas | Bobot lexical tf-idf terlalu besar | Batasi kontribusi frekuensi istilah |
| Hasil basi | Freshness weight salah setel | Kalibrasi ulang lambda dengan evaluation set |
| Kebocoran locale | Filter diterapkan terlambat | Pindahkan filter keamanan lebih awal |
| Drift semantik | Upgrade model embedding | Dual-index dan bandingkan A/B sebelum rollout |
| Noise over-fusion | Ukuran union tidak dibatasi | Batasi union, lakukan diversity pruning |
Kerangka evaluasi
Eksperimen:
- Ablation: ukur Recall@k dan MRR untuk vector-only, lexical-only, hybrid tanpa rerank, dan full.
- Fusion Weight Tuning: grid search bobot menggunakan validation gold set.
- Latency Budget: lacak mean + P95 retrieval latency per konfigurasi.
- Drift: pantau perubahan relatif mingguan pada recall untuk query head vs tail.
Pertahankan manifest evaluasi dengan hash konfigurasi.
Loop optimisasi
Siklus:
- Log jejak retrieval (query, kandidat, skor, source_tag).
- Identifikasi mis-hit, seperti downstream faithfulness rendah atau jumlah kutipan rendah, lalu klasifikasikan root cause: kandidat leksikal hilang, false positive semantik, konten basi.
- Sesuaikan bobot atau threshold; jalankan suite offline.
- Canary bobot fusion baru di balik feature flag.
- Promosikan jika peningkatannya signifikan secara statistik.
Poin utama
- Retrieval hibrida adalah sistem dial yang dapat disetel; instrumentasi harus tanpa henti.
- Terapkan filter keamanan dan akses lebih awal; hindari kebocoran ke scoring.
- Re-ranking harus membenarkan latensi melalui kenaikan MRR atau Recall yang terukur.
- Temporal decay mencegah halaman lama berotoritas tinggi mendominasi.
- Perlakukan perubahan fusion seperti kode: version, evaluate, roll forward atau rollback.