Lewati ke konten

Retrieval Hibrida: Vektor + Keyword + Metadata

Merekayasa retrieval hibrida yang tangguh: memadukan sinyal vektor, leksikal, metadata, dan temporal untuk RAG situs web.

retrieval • hybrid • search • rag

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:

  1. Query Embedding -> ANN search (k_vec)
  2. Lexical Search (BM25 / SPLADE / Elasticsearch) (k_lex)
  3. Union -> Score Normalization (scaling per sumber)
  4. Metadata Filter Pass (locale, access_tier, page_type)
  5. Penyesuaian diversity dan freshness
  6. Cross/Mono Re-Ranker opsional
  7. 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

KegagalanPenyebabMitigasi
Bias popularitasBobot lexical tf-idf terlalu besarBatasi kontribusi frekuensi istilah
Hasil basiFreshness weight salah setelKalibrasi ulang lambda dengan evaluation set
Kebocoran localeFilter diterapkan terlambatPindahkan filter keamanan lebih awal
Drift semantikUpgrade model embeddingDual-index dan bandingkan A/B sebelum rollout
Noise over-fusionUkuran union tidak dibatasiBatasi 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:

  1. Log jejak retrieval (query, kandidat, skor, source_tag).
  2. Identifikasi mis-hit, seperti downstream faithfulness rendah atau jumlah kutipan rendah, lalu klasifikasikan root cause: kandidat leksikal hilang, false positive semantik, konten basi.
  3. Sesuaikan bobot atau threshold; jalankan suite offline.
  4. Canary bobot fusion baru di balik feature flag.
  5. 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.