retrieval تکmodal در edge caseها fail میشود: vectorهای dense tokenها و IDهای rare را از دست میدهند؛ lexical خالص paraphrase و semantic similarity را از دست میدهد. Hybrid retrieval signalهای مکمل را fuse میکند، semantic dense، lexical sparse، metadata structured و freshness temporal، تا candidate setهای stable و high-precision بسازد. این مقاله architecture، normalization، scoring fusion، failure handling و evaluation را توضیح میدهد.
انگیزه
سناریوهای failure:
- proper noun / SKU code که dense model از دست میدهد.
- query تغییر pricing که snapshot stale بدون temporal boost را میکشد.
- پرسشهای natural بلند که در sparse-only system بیش از حد روی stopwordها weight میگیرند.
- vector false positive روی pageهای semantic broad، مثل marketing fluff، بدون lexical anchoring.
Hybrid با capture کردن dimensionهای orthogonal evidence اینها را mitigate میکند.
لایهبندی componentها
flow پیشنهادی:
- Query Embedding → ANN search (k_vec)
- Lexical Search (BM25 / SPLADE / Elasticsearch) (k_lex)
- Union → Score Normalization (per source scaling)
- Metadata Filter Pass (locale, access_tier, page_type)
- Diversity & Freshness Adjustments
- Optional Cross/Mono Re-Ranker
- Final Truncation (top K)
برای audit امتیازهای raw pre-fusion را حفظ کنید.
Query Normalization
مرحلهها:
- Unicode normalize NFKC
- Lowercase، با حفظ snapshot casing برای answer formatting در صورت نیاز
- Tokenize و حفظ stopwordها، چون semantic embedding میتواند context را leverage کند
- Synonym / Alias Expansion: tokenهای alternative را برای mapping codename داخلی product append کنید، اما آنها را وارد model prompt نکنید و فقط برای sparse retrieval استفاده کنید
- Numeric & Version Extraction: patternهای X.Y.Z را برای scoring lexical هدفمند capture کنید
Metadata و Attribute Filterها
filterهایی که پس از candidate union اولیه اعمال میشوند recall loss را کمینه میکنند. fieldهای رایج: locale، access_tier، page_type، product_area، updated_bucket. برای جلوگیری از تأثیر leakage بر re-ranking، filterهای security، tenant / tier، را پیش از scoring fusion enforce کنید. debug modeی فراهم کنید که filtered_out set را برای inspection برگرداند.
راهبرد Re-Ranking
از cross-encoder سبک، مدل distilled، روی top N یعنی 10 تا 20 مورد استفاده کنید. اگر latency از budget گذشت degrade کنید: re-rank را skip کنید یا candidate count را کم و lexical weight را زیاد کنید. برای توجیه cost، re_rank_delta = MRR_post - MRR_pre را track کنید. نتیجه re-rank برای union setهای identical را در TTL کوتاه cache کنید.
Freshness و signalهای temporal
freshness_weight = exp(-lambda * age_days) را محاسبه کنید، با lambda تنظیمشده برای content type، بالاتر برای pricing و پایینتر برای APIهای stable. ترکیب: final_score = w_sem * sem_score + w_lex * lex_score + w_fresh * freshness_weight + w_meta * meta_priors. برای جلوگیری از dominance، هر component را ابتدا z-score یا min-max normalize کنید.
Failure Modeها
| شکست | علت | کاهش ریسک |
|---|---|---|
| bias محبوبیت | lexical tf-idf بیش از حد weighted | contribution frequency term را cap کنید |
| نتیجههای stale | freshness weight بد تنظیم شده | lambda را با evaluation set recalibrate کنید |
| leakage مربوط به locale | اعمال دیرهنگام filter | security filterها را زودتر منتقل کنید |
| semantic drift | upgrade مدل embedding | dual-index و A/B compare پیش از rollout |
| noise ناشی از over-fusion | union size نامحدود | union را محدود و diversity pruning کنید |
چارچوب Evaluation
آزمایشها:
- Ablation: vector only، lexical only، hybrid بدون rerank و full را بسنجید؛ Recall@k و MRR را اندازه بگیرید.
- Fusion Weight Tuning: با validation gold set، grid search وزنها را اجرا کنید.
- Latency Budget: mean + P95 retrieval latency را برای هر configuration track کنید.
- Drift: تغییر نسبی هفتگی recall برای queryهای head و tail را monitor کنید.
evaluation manifest را با config hashها حفظ کنید.
حلقه Optimization
cycle:
- retrieval traceها را log کنید: query، candidateها، scoreها، source_tag.
- mis-hitها را شناسایی کنید، مثلاً downstream faithfulness پایین یا citation count پایین، و root cause را classify کنید: missing lexical candidate، semantic false positive، stale content.
- weight / threshold را adjust کنید؛ offline suite را اجرا کنید.
- fusion weightهای جدید را پشت feature flag canary کنید.
- با improvement statistically significant آنها را promote کنید.
نکات کلیدی
- Hybrid retrieval سامانهای از dialهای قابل تنظیم است؛ بیوقفه instrument کنید.
- filterهای security و access را زود اعمال کنید؛ از leakage به scoring جلوگیری کنید.
- re-ranking باید latency را با lift قابل اندازهگیری MRR / Recall توجیه کند.
- temporal decay مانع میشود pageهای outdated اما high-authority غالب شوند.
- تغییرات fusion را مثل code treat کنید: version، evaluate، roll forward یا back.