رفتن به محتوا

Retrieval ترکیبی: Vector + Keyword + Metadata

مهندسی hybrid retrieval مقاوم: ترکیب signalهای vector، lexical، metadata و temporal برای RAG وب‌سایت.

retrieval • hybrid • search • rag

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 پیشنهادی:

  1. Query Embedding → ANN search (k_vec)
  2. Lexical Search (BM25 / SPLADE / Elasticsearch) (k_lex)
  3. Union → Score Normalization (per source scaling)
  4. Metadata Filter Pass (locale, access_tier, page_type)
  5. Diversity & Freshness Adjustments
  6. Optional Cross/Mono Re-Ranker
  7. 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 بیش از حد weightedcontribution frequency term را cap کنید
نتیجه‌های stalefreshness weight بد تنظیم شدهlambda را با evaluation set recalibrate کنید
leakage مربوط به localeاعمال دیرهنگام filtersecurity filterها را زودتر منتقل کنید
semantic driftupgrade مدل embeddingdual-index و A/B compare پیش از rollout
noise ناشی از over-fusionunion 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:

  1. retrieval traceها را log کنید: query، candidateها، scoreها، source_tag.
  2. mis-hitها را شناسایی کنید، مثلاً downstream faithfulness پایین یا citation count پایین، و root cause را classify کنید: missing lexical candidate، semantic false positive، stale content.
  3. weight / threshold را adjust کنید؛ offline suite را اجرا کنید.
  4. fusion weightهای جدید را پشت feature flag canary کنید.
  5. با 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.