[VELODB.IO]
DATANOMIX.PRO // БЛОГ // HYBRID SEARCH

Гибрид қидирув: нега векторлар ёлғон гапиради, калит сўзлар эса ақлдан озмайди

ва уларни қандай яхлаштириш мумкин

1-қисм: Нега векторли қидирув — тузақ

// чиройли, лекин тузақ

// чиройли, лекин тузақ

Идея гениал. Матнни оламиз, нейросеть орқали ўтказамиз, вектор оламиз — 1024 та сондан иборат массив, у «маънони кодлайди». Маъноси яқин матнлар яқин векторлар олади.

Сценарий 1: Аниқ идентификаторлар — SKU-7829-BX, қонун рақамлари, буюртма ID.

Сценарий 2: Qisqartmalar — банкингда KYC, AML, SOFR, ICAAP, PCI DSS.

Сценарий 3: Домендан ташқари — модель ҳеч қачон кўрмаган ички ҳужжатлар.

векторли қидирув — эмпатияли китобхоначи. Сиз «муҳаббат ҳақида бирор нарса ғамгин» дейишингизни сезади. Лекин ISBN бўйича аниқ китоб сўрангиз — у сизга жиннидек қарайди.

2-қисм: Джедай қайтиши (BM25)

// 1970-йиллар технологияси, ўлишдан бош тартади

BM25 = Best Matching 25, TF-IDF оиласи, 1994 йилдан стандарт.

BM25 кучли томонлари

  • Идентификаторларнинг аниқ мослашиши.
  • Интерпретацияланади — қай сўзлар бўйича ишлаганлиги кўринади.
  • Тезлик — GPU йўқ, миллисониялар.

Заифлик: семантика йўқ. «Машина» ≠ «автомобиль».

BM25 — робот-китобхоначи. Ёзилганини айнан топади. Ҳарфма-ҳарф.

3-қисм: Hybrid Search — 1+1=3 бўлганда

// юзада ётган идея

Hybrid = параллел вектор + BM25, сўнг натижаларни бирлаштириш.

Муаммо: турли балл шкалалари (cosine 0–1 vs BM25 0.5–45.7).

Ечим: RRF (Reciprocal Rank Fusion), 2009 йил мақоласи.

RRF formula:

RRF_score(doc) = 1/(k + rank_vector) + 1/(k + rank_bm25)    where k = 60

Doc X: vector rank=2, BM25 rank=1 → RRF = 1/62 + 1/61 = 0.0325

Doc Y: vector rank=1, BM25 rank=15 → RRF = 1/61 + 1/75 = 0.0297

→ X wins because high in BOTH rankings

Нега бу гениал:

  • Скорларни нормалаштириш шарт эмас.
  • Огирлиқларни ўргатиш шарт эмас.
  • GPU йўқ.
  • Латентлик — микросониялар.
икки дўст таомхона таклиф қилади. Гурман (вектор) ва маълумотнома (BM25). Иккиласи бир жойни таклиф қилади — аниқ борасиз.

4-қисм: Рақамлар ёлғон гапирмайди (бенчмарк)

// benchmark_results.log

Усул Recall@3 Қидирувда GPU Латентлик
Pure BM250.667No~5 ms
Pure Vector0.767No~10 ms
Hybrid RRF0.800No~15 ms
Reranker0.833Yes~150-500 ms
Сўров Vector BM25 Hybrid
"Постановление №2864, PEP"0.671.001.00
"CAR, CET1, №2432"0.330.330.67

Hybrid RRF оғир Reranker сифатининг 96% беради. GPU йўқ. Қўшимча модель йўқ. Битта SQL-сўров.

5-қисм: Меъморчилик зоопарки vs бир платформа

// нима учун уч база, биттаси етарли

Типик RAG-меъморчилик

Documents → Elasticsearch (full-text)
         → Qdrant / Milvus (vector)  
         → PostgreSQL (metadata)

Бирлашган ёндашув

-- Hybrid Search in one SQL query
WITH vector_results AS (
    SELECT doc_id,
           cosine_distance(embedding, :query_vec) AS score,
           ROW_NUMBER() OVER (ORDER BY cosine_distance(embedding, :query_vec)) AS rank
    FROM documents
    WHERE department = :user_dept
      AND version_status = 'active'
    ORDER BY score DESC LIMIT 50
),
bm25_results AS (
    SELECT doc_id,
           score(content) AS score,
           ROW_NUMBER() OVER (ORDER BY score(content) DESC) AS rank
    FROM documents
    WHERE MATCH(content, :query_text)
      AND department = :user_dept
      AND version_status = 'active'
    ORDER BY score DESC LIMIT 50
)
SELECT doc_id,
       1.0/(60 + v.rank) + 1.0/(60 + b.rank) AS rrf_score
FROM vector_results v
FULL OUTER JOIN bm25_results b USING (doc_id)
ORDER BY rrf_score DESC
LIMIT 10;
БЗ Vector BM25 SQL-фильтрлар Бир сўров
Apache DorisHNSW + brute-forceInverted Index, BM25 scoreFull SQLYes
Elasticsearch 8+kNN + HNSWNative BM25Query DSLYes (not SQL)
PostgreSQL + pgvectorHNSW + IVFFlattsvector/tsqueryFull SQLYes
SingleStoreVector IndexFull-text searchFull SQLYes

6-қисм: Хулоса — RAG-инженер учун чек-лист

Вазифа Тавсия Нега
Чат-ботPure VectorСемантика аниқликдан муҳим
Enterprise RAGHybrid RRFМаъно ҳам, аниқ мослашиш ҳам керак
Compliance/аудитHybrid + RerankerҲар бир % recall муҳим
Кодлар бўйича қидирувBM25 + vector fallbackАниқлик семантикадан муҳим
GPU учун нол бюджетBM25 → HybridRRF GPU талаб қилмайди

Hybrid Search 5 та правила

  1. Сукут бўйича Hybrid дан бошланг.
  2. Бирлаштириш учун RRF (k=60) ишлатинг.
  3. Hybrid етарли бўлмасагина Reranker қўшинг.
  4. Базалар зоопарки яратманг.
  5. Ўз маълумотларингизда текширинг.

Хулоса, сувсиз

  • Нима: Нима: параллел вектор + BM25, RRF орқали бирлаштириш.
  • Нега: Нега: вектор аниқ мослашишларда йутқазиди, калит сўзлар маънони тушунмайди.
  • Ажойиб: Ажойиб: RRF оғир reranker сифатининг 96% беради, бепул.
  • Қачон керак: Қачон керак: RAG, ҳужжат қидируви, кодлар/qisqartmalar.

FAQ

Hybrid Search oddiy қидирувдан қандай фарқ қилади?

Oddiy қидирув — ёки фақат тўлиқматн (калит сўзлар), ёки фақат векторли (маъно). Hybrid иккиласини бирлаштиради: битта сўров векторли ва BM25 қидирувни ишга туширади, натижалар RRF орқали бирлашади. Семантика ҳам, кодлар/qisqartmalarнинг аниқ мослашиши ҳам чиқади.

RRF нима ва нега k=60?

RRF (Reciprocal Rank Fusion) — икки рўйхат рангларини скорларни нормалаштирмай бирлаштириш формуласи. k=60 — асл мақоладан (Cormack et al., 2009) эмпирик танланган доимий, турли тўпламларда barqaror яхши натижа беради.

Hybrid Search учун GPU керакми?

Йўқ. Векторли қидирув (HNSW ва аналоги) ва BM25 CPU да ишлайди. GPU фақат Hybrid устига Reranker қўшсангиз — топ-N номзодларни қайта тартиблаш учун алохида модель — керак бўлади.

Hybrid устига Reranker қачон қўшиш керак?

Recall ҳал қилувчи бўлганда (compliance, аудит, ҳуқуқ) ва латентликка (150–500 ms) ва GPU га тўлашга тайёр бўлганда. Кўпчилик RAG-сценарийлар учун Hybrid RRF етарли.

Hybrid Search учун қайси базани танлаш керак?

Векторли қидирув (HNSW) ва тўлиқматн (инверт индекс, BM25) ва фильтрлар учун тўлиқ SQL қўллаби-қувватлаши керак. Мисоллар: Apache Doris, Elasticsearch 8+, PostgreSQL pgvector ва тўлиқматн билан.

Hybrid Search ни ўз маълумотларингизда текширмоқчимисиз? Икки ҳафтада пилот қуришга ёрдам берамиз.

./ЗАПРОСИТЬ_ПИЛОТ.sh

Манбалар

  1. Cormack et al., «Reciprocal Rank Fusion outperforms...» — SIGIR 2009
  2. Microsoft Azure AI Search: Hybrid Search
  3. Robertson et al., «Okapi at TREC-3» — BM25, 1994
  4. Apache Doris — Inverted Index + Vector Search docs
  5. Бизнинг бенчмарк: тўлиқ натижалар github.com/datanomix