पाठ 14 / 27
Reranking और विविधता (MMR)
प्रासंगिकता के लिए उम्मीदवारों का क्रम बदलें और दोहराव हटाएँ।
चौड़ा retrieve करें, फिर ध्यान से rank करें
तेज़ पहले-चरण का retrieval (BM25, vectors) recall में अच्छा पर क्रम में अपूर्ण है। Reranker, आम तौर पर cross-encoder मॉडल जो सवाल और chunk साथ पढ़कर प्रासंगिकता score देता है, शीर्ष 20 से 100 उम्मीदवारों का क्रम कहीं अधिक सटीकता से बदलता है पर पूरे संग्रह पर चलाने को बहुत धीमा है। आम पैटर्न: 50 retrieve करें, rerank करें, सबसे अच्छे 5 भेजें। Maximal Marginal Relevance (MMR) दूसरी समस्या, दोहराव, सुलझाता है: पाँच chunks एक ही बात कहें तो prompt की जगह बर्बाद होती है, इसलिए MMR ऐसे परिणाम चुनता है जो query से प्रासंगिक हों पर पहले चुने गए से अलग।
MMR विविध परिणाम चुनता है, चलाकर
मैंने यह सादा-Python (सिर्फ़ standard library) उदाहरण चलाया। सादा top-2 A और उसका लगभग-समान duplicate A_dup लौटाता है। MMR इसकी जगह A और C लौटाता है, जिससे मॉडल को दो अलग प्रमाण मिलते हैं।
import math
def cos(a, b): return sum(x*y for x, y in zip(a, b)) / (math.sqrt(sum(x*x for x in a)) * math.sqrt(sum(y*y for y in b)))
q = [1.0, 0.0]
cands = {"A": [1.0, 0.1], "A_dup": [1.0, 0.1], "B": [0.7, 0.7], "C": [0.5, 0.9]}
def mmr(q, cands, k, lam=0.4):
chosen = []
while len(chosen) < k:
best, best_s = None, -9
for name, v in cands.items():
if name in chosen: continue
rel = cos(q, v)
red = max((cos(v, cands[c]) for c in chosen), default=0)
s = lam * rel - (1 - lam) * red
if s > best_s: best, best_s = name, s
chosen.append(best)
return chosen
print("plain top-2:", sorted(cands, key=lambda n: -cos(q, cands[n]))[:2])
print("MMR top-2 :", mmr(q, cands, 2))
Output:
plain top-2: ['A', 'A_dup'] MMR top-2 : ['A', 'C']
भेजने से ज़्यादा retrieve करें
आम setting है 30 से 50 उम्मीदवार लाना, rerank करना, और सिर्फ़ सबसे अच्छे 3 से 5 मॉडल को देना।
त्वरित जाँच: Cross-encoder reranker की आम भूमिका क्या है?
- LLM को बदलना
- पूरे संग्रह के embeddings बनाना
- PDFs साफ़ करना
- छोटे उम्मीदवार समूह को पहले-चरण की खोज से अधिक सटीकता से क्रमबद्ध करना
Answer
छोटे उम्मीदवार समूह को पहले-चरण की खोज से अधिक सटीकता से क्रमबद्ध करना — Rerankers सटीक पर महँगे हैं, इसलिए shortlist पर लगाए जाते हैं।