Lesson 54 — Intermediate

Capstone — Build a Hybrid Search Engine

Is capstone mein tum M4.1-M4.6 ko ek project mein jodoge: corpus se lekar hybrid search tak — ingest → chunk → dense index + BM25 index → RRF fusion → filters → apne query set pe eval. Ye pipeline agle half (RAG) ke liye tumhara retrieval backbone banegi.

⏱ 10 min• Intermediate• Sparse & Hybrid Retrieval

Kya banayenge

Kya hai?

Ek hybrid search engine: har chunk ek dense vector aur ek BM25 entry dono mein store hota hai; query dono taraf jaati hai aur RRF unke ranks fuse karke top-k deta hai — metadata filter ke saath.

Kab kaam aata hai?

Ye capstone L4 ke aadhe (retrieval) ka integration test hai — iske bina aage RAG sirf snippets hoga. Iske baad tumhare paas ek reusable search API hogi.

Kahan milta hai?

Ek Python module (search_engine.py) + chhoti CLI + eval script. Isehi ko M4.8-M4.15 wale RAG steps upar build karenge.

Scope deliberately chhoti rakho: ek folder of documents, ek eval set, ek search function. Lekin andar ke sab parts real hon — chunking strategy, embeddings, BM25, RRF aur threshold. Yehi chhoti cheez hi production jaisi hai.

Pehla rule: Bina query set ke kuch mat banao. Pehle 15-20 sawaal likho jinke sahi doc/chunk pata hain (kuch exact-ID wale, kuch paraphrase wale) — wahi tumhara scorecard hai.

Step 1 — Pipeline banao

from collections import Counter

def build(corpus):
    dense, sparse = [], []
    for doc in corpus:
        pieces = heading_chunks(doc["text"], size=800)   # M4.2
        for i, piece in enumerate(pieces):
            cid = doc["id"] + "#" + str(i)
            dense.append({"id": cid, "vec": embed(piece),
                          "text": piece, "meta": doc["meta"]})   # M4.3
            sparse.append({"id": cid, "tf": Counter(piece.lower().split())})
    return dense, sparse

# fingerprint se re-run incremental: badle hue docs hi process (M4.1)
Interfaces chhoti rakho: embed(text), bm25_rank(query, k), dense_rank(query, k), rrf(rankings, k) — chaar functions, clear contracts. Inhe baad mein vector DB ya framework se replace karoge toh baaki pipeline na chhutna chahiye.

Step 2 — Search, filters aur fusion

def hybrid_search(query, dense, sparse, k=10, rrf_k=60, where=None):
    d_rank = dense_rank(query, top=50, where=where)      # M4.4/M4.5
    s_rank = bm25_rank(query, sparse, top=50, where=where)
    fused  = rrf([d_rank, s_rank], k=rrf_k)              # M4.6
    return fused[:k]

# CLI
# python search.py "refund kab milega" --k 5 --dept finance
Wide kyun: Fusion ko kaam karne ke liye options chahiye. Agar dono retrievers se sirf 5-5 aaye toh RRF ke paas overlap dhoondhne ko kuch nahi — wide candidates (30-50) phir top-k chhota karo.

Step 3 — Eval karo aur ship karo

QSET = [
    ("refund policy kya hai",              "doc-12#0"),   # paraphrase
    ("INV-4821 status",                    "doc-7#2"),    # exact ID
    ("kya return 7 din mein hota hai",     "doc-3#1"),    # Hinglish
    ("kya kal ka cricket score batao",     None),         # out of scope
]

def hit_at_k(engine, k):
    hits = 0
    for q, gold in QSET:
        if gold is None:
            continue
        top = engine.search(q, k=k)
        hits += gold in [h["id"] for h in top]
    return hits / 3        # ye TUMHARA score hai, koi benchmark nahi
Done kaise define karein: Tumhara apna set pe hybrid dense/sparse se behtar (ya barabar, kam cost mein), filters kaam kar rahe hain, out-of-scope query weak score deti hai — bas. Numbers public benchmarks se nahi, apne set se aate hain.

Exercise

Question: Hybrid search mein fusion se pehle har retriever se kitne candidates lena common hai — 5 ya 30-50?

Question: Dense aur sparse results ko combine karne wala function kya hai? (ek acronym)

Question: Tumhara score kis cheez pe aata hai — public benchmark ya apne query set?

Question: Eval set mein exact-ID ke saath paraphrase queries bhi kyun hain? (ek shabd)

Common mistakes

Desi example: Bazaar mein kho gaya bachcha

Bachche ko dhoondhne ke liye log photo dikhate hain (dense — matlab se) aur naam bolte hain (sparse — shabd se). Do tarah ki khoj ek saath chalao aur jo naam dono jagah aaye, usi pe sabse zyada bharosa — wahi RRF hai:

text
photo search (dense) : [Rahul? , Rahul2? , Rahul3?]
naam search (sparse) : [Rahul exact, Rahul-old]
        | RRF = sum 1/(k+rank)
final : Rahul -> sabse upar (dono lists mein top)
Interview angle — yahan se sawaal aate hain
  • Q: Hybrid search engine ke components? — Ingest+chunk, dense index, BM25 index, RRF fusion, filters, eval harness.
  • Q: Candidates wide kyun rakhte hain? — Fusion ko overlap dhoondhne ke liye depth chahiye; phir top-k truncate.
  • Q: Retrieval quality measure kaise? — Apne gold query set pe hit@k / recall@k; dense vs sparse vs hybrid compare.
  • Q: Out-of-scope query ka kya hona chahiye? — Weak score aana chahiye, taaki baad mein abstention laga sake (M4.12).
Lesson complete?

Capstone complete — tumhare paas ek kaam karta hybrid search engine hai. Agla lesson — RAG Architecture — mein dekhenge is engine ko LLM se jod kar sawaal-jawaab system kaise banta hai.

Popular courses: Data Science Course in Lucknow · AI Course in Lucknow · Python Course in Lucknow · Power BI Course · Data Analytics Course