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

Гибридтік іздеу: неліктен векторлар жалған айтады, ал кілт сөздер ақымақтайды

және оларды қалай татуластыруға болады

1-бөлім: Неліктен векторлық іздеу — тұзақ

// әдемі, бірақ тұзақ

// әдемі, бірақ тұзақ

Идея гениальды. Мәтінді аламыз, нейросеть арқылы өткіземіз, вектор аламыз — 1024 саннан тұратын массив, ол «мағынаны кодтайды». Мағынасы жақын мәтіндер жақын векторлар алады.

Сценарий 1: Нақты идентификаторлар — SKU-7829-BX, заң нөмірлері, тапсырыс ID.

Сценарий 2: Аббревиатуралар — банкингте 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, құжат іздеу, кодтар/аббревиатуралар.

FAQ

Hybrid Search қарапайым іздеуден қалай ерекшеленеді?

Қарапайым іздеу — тек толықмәтіндік (кілт сөздер) немесе тек векторлық (мағына). Hybrid екеуін біріктіреді: бір сұраныс векторлық пен BM25-іздеуді іске қосады, нәтижелер RRF арқылы бірігіп келеді. Семантика да, кодтар/аббревиатуралардың нақты сәйкесуі де шығады.

RRF деген не және неге k=60?

RRF (Reciprocal Rank Fusion) — екі тізімнің рангтерін скорларды нормализацияламай біріктіру формуласы. k=60 — түпнұсқа мақаладан (Cormack et al., 2009) эмпирикалық таңдалған тұрақты, әр түрлі жинақтарда тұрақты жақсы нәтиже береді.

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