Lesson 57 — Intermediate
Reranking
Top-10 chunks mein se 4 sabse best chahiye — toh 10 bhejne se behtar hai pehle 50 candidates nikaal kar unme se 4 chunna. Is lesson mein hum two-stage retrieve-wide-then-rerank pattern, cross-encoder ka kaam, latency ka hisaab, aur kab rerank worth it nahi hai dekhenge.
Reranking kya hai
Kya hai?
Reranking: retrieval ke baad candidates ko doosre (zyada precise) model se dobara rank karna. Pehli stage recall ke liye wide, doosri stage precision ke liye — "retrieve many, rerank, send the best".
Kab kaam aata hai?
Top-k mein se 4-5 hi context bhejna ho par quality chahiye, ya first-stage ranking thodi noisy ho. Context budget tight ho tab bhi — k badhane se behtar hai chun ke bhejna.
Kahan milta hai?
Dedicated reranking APIs mein, cross-encoder libraries mein, aur RAG frameworks ke node postprocessors mein. Tumhare pipeline mein retrieve aur generate ke beech.
Funda: pehla retriever fast hai par andaza lagata hai (alag-alag embeddings). Reranker dheere hai par query aur document ko ek saath padhta hai — isliye rishta zyada sahi pakadta hai. Recall wide rakho, precision reranker ko de do.
Cross-encoder aur reranking models
import os, numpy as np
from sentence_transformers import CrossEncoder # example library
reranker = CrossEncoder(os.environ["RERANK_MODEL"])
def rerank(query, cands, top=4):
pairs = [(query, c["text"]) for c in cands]
scores = reranker.predict(pairs) # har candidate pe model chalta hai
order = np.argsort(-scores)[:top]
return [cands[i] for i in order]
# usage: cands = hybrid_search(query, k=50); top = rerank(query, cands, 4)
- Bi-encoder (dense retrieval): query aur doc alag-alag encode — doc vectors precomputed, search tez.
- Cross-encoder (rerank): query+doc saath mein padhta hai — accurate, par har candidate pe compute, precompute nahi hota.
- Isliye cross-encoder ko kabhi first-stage retrieval pe nahi lagate — 50 candidates pe hi use hota hai.
- Rerank ke baad scores alag scale pe hain — pehle ke score se mix mat karo, order reuse karo.
Relevance gained, latency added
import time
def timed(fn, *a, **kw):
t0 = time.perf_counter()
out = fn(*a, **kw)
return out, time.perf_counter() - t0
top, t_search = timed(hybrid_search, query, k=50)
best, t_rr = timed(rerank, query, top, 4)
print("search", round(t_search, 3), "s | rerank", round(t_rr, 3), "s")
# har stage ka apna budget rakho: retrieval vs rerank alag-alag dikhega
- Rerank ki latency candidates ke saath linear badhti hai — budget fixed karo, scale mat karo.
- Cost bhi wahi hai: hosted reranking per-pair billing karti hai; local model ho toh GPU time.
- Asar dekhne ke liye apne eval set pe answer quality compare karo — rerank ke pehle vs baad.
- Real-time product (voice, chat live) mein latency budget tight — yahan rerank ka trade-off sabse sensitive hai.
Jab reranking kuch khaas nahi karta
- Chhota/homogeneous corpus: 50 docs hain jinke beech fark hi nahi — rerank kya rank karega.
- First-stage hi weak: agar top-50 mein hi sahi chunk nahi, toh reranker kisi ko bacha nahi sakta — pehle recall sudharo (chunking, hybrid, query rewrite).
- Exact-ID queries: sparse hi pakad lega, rerank ki zarurat nahi.
- Latency budget zero: offline batch pipelines mein bhi latency matter nahi karta — tab rerank free improvement hai; live mein nahi.
Exercise
Question: Wide retrieve karke best chunks chunne wale two-stage pattern ko kya kehte hain?
Question: Bi-encoder aur cross-encoder mein query aur document kab saath mein padhe jaate hain?
Question: Reranking ka sabse bada trade-off kya add karta hai?
Question: Reranker ke candidates kahan se aate hain — LLM se ya pehle retriever se?
Common mistakes
- Rerank se weak retrieval theek hoga: Top-50 mein hi jawab nahi toh reranker bebas hai. Fix: pehle recall (chunking, hybrid, rewrite) sudharo, rerank uske baad.
- Bahut zyada candidates rerank karna: Har pair pe compute — 500 candidates pe latency explode. Fix: fixed budget 20-100, usi pe tune karo.
- Rerank score ko confidence samajhna: Wo relative order deta hai, calibrated probability nahi. Fix: abstain ke liye retrieval score/threshold use karo, rerank score ko uncha mat samjho.
Kitchen ne 50 dishes bana di (retrieval wide); head chef har ek taste karke 4 final plate ke liye chunta hai (rerank). Chef ka kaam hai precision — par agar saman hi nahi tha toh chef bhi kuch nahi kar sakta:
50 candidates (retrieval, tez, wide recall)
-> chef taste (cross-encoder, dheere, precise)
-> 4 final plates (context) -> table (LLM)
budget: chef 500 plates taste nahi kar sakta - fixed rakho- Q: Bi-encoder vs cross-encoder? — Bi: alag-alag encode, precompute, fast. Cross: saath mein padhta hai, accurate, per-query compute.
- Q: Two-stage retrieval kyun? — Wide recall tez retriever se, precision slow accurate reranker se; dono apne strength pe.
- Q: Rerank ki cost kaise control karte ho? — Candidates fixed budget mein, per-stage latency measure, live product pe sensitive.
- Q: Kab rerank skip karo? — Chhota/homogeneous corpus, weak first-stage, exact-ID heavy queries, ya zero latency budget.
Reranking clear — ab context ko bina k badhaye behtar bana sakte ho. Agla lesson — Query Transformation & RAG-Fusion — mein dekhenge user ke sawaal ko retrieval-friendly kaise banate hain.