RAG और सर्च इंजीनियरिंगमध्यमपाठ 2118 मिनट का पाठ

री-रैंकिंग और क्वेरी रीराइटिंग

पहली खोज एक बड़ा जाल फेंकती है। री-रैंकर हर उम्मीदवार को ध्यान से पढ़ता है और सबसे अच्छे वाले को सबसे ऊपर रखता है। क्वेरी रीराइटिंग उन सवालों को ठीक करती है जो अस्पष्ट, छोटे या किसी दूसरी भाषा या लिपि में होते हैं।

पाठ वीडियो में

60 सेकंड में

री-रैंकिंग और क्वेरी रीराइटिंग

पहली खोज एक बड़ा जाल फेंकती है। री-रैंकर हर उम्मीदवार को ध्यान से पढ़ता है और सबसे अच्छे वाले को सबसे ऊपर रखता है। क्वेरी रीराइटिंग उन सवालों को ठीक करती है जो अस्पष्ट, छोटे या…

1/4
आसान शब्दों में
एक स्कूल क्विज़ टीम के लिए दो राउंड में छात्रों को चुनता है। पहले, सभी के लिए एक छोटा लिखित टेस्ट होता है जिससे टॉप 30 चुने जाते हैं। फिर एक शिक्षक उन 30 छात्रों में से प्रत्येक से ध्यान से बात करता है और सबसे अच्छे 5 को चुनता है। सर्च भी इसी तरह काम करती है: एक तेज़ पहला राउंड, फिर कुछ गिने-चुने नतीजों पर धीमा और ध्यान से किया गया दूसरा राउंड।

दो चरण: रिट्रीव करें, फिर री-रैंक करें

एक एम्बेडिंग मॉडल सवाल के लिए एक वेक्टर बनाता है और हर चंक के लिए एक वेक्टर, अलग-अलग। इसे bi-encoder कहा जाता है। यह तेज़ होता है, क्योंकि चंक वेक्टर्स पहले से ही एक बार में कैलकुलेट कर लिए जाते हैं, लेकिन यह कभी भी सवाल और चंक को एक साथ नहीं देखता।
एक cross-encoder re-ranker सवाल और एक चंक को एक साथ पढ़ता है और एक प्रासंगिकता स्कोर (relevance score) देता है। क्योंकि यह दोनों को एक साथ देखता है, इसलिए यह "अनुमति नहीं है" बनाम "अनुमति है" जैसी बारीकियों को पकड़ सकता है। यह धीमा होता है, इसलिए आप इसे केवल पहले चरण के टॉप उम्मीदवारों पर ही चलाते हैं।
Bi-encoder (एम्बेडिंग्स)Cross-encoder (री-रैंकर)
पढ़ता हैसवाल और चंक को अलग-अलगसवाल और चंक को एक साथ
स्पीडतेज़; चंक वेक्टर्स पहले से तैयार होते हैंधीमा; प्रति सवाल-चंक जोड़े पर एक मॉडल कॉल
इसके लिए इस्तेमाल करेंपूरे कलेक्शन में खोजने के लिएटॉप उम्मीदवारों को फिर से क्रमबद्ध करने के लिए, उदाहरण के लिए 20 से 100
क्वालिटीउम्मीदवारों को ढूँढने में अच्छाअक्सर सबसे अच्छे कुछ को चुनने में बेहतर
  1. 1

    व्यापक पहली खोज

    हाइब्रिड सर्च मान लीजिए टॉप 50 उम्मीदवार लौटाती है।
  2. 2

    री-रैंक करें

    क्रॉस-एन्कोडर हर सवाल-चंक जोड़े को स्कोर देता है।
  3. 3

    छांटें

    प्रॉम्प्ट के लिए सबसे अच्छे कुछ, उदाहरण के लिए 5, को रखें।
  4. 4

    मापें

    जाँचें कि क्या री-रैंकिंग वास्तव में आपके टेस्ट सेट पर परिणामों को बेहतर बनाती है, और इससे लेटेंसी में कितनी बढ़ोतरी होती है।
नोट
कुछ टीमें उम्मीदवारों को स्कोर करने या क्रमबद्ध करने के लिए री-रैंकर के रूप में एक लैंग्वेज मॉडल का उपयोग करती हैं। यह काम कर सकता है लेकिन अक्सर एक छोटे डेडिकेटेड क्रॉस-एन्कोडर की तुलना में धीमा और अधिक महंगा होता है। ओपन क्रॉस-एन्कोडर मॉडल Hugging Face पर मिल सकते हैं; प्रत्येक मॉडल की भाषाओं और लाइसेंस की जाँच कर लें।

क्वेरी रीराइटिंग

यूज़र्स छोटे, अस्पष्ट या उलझे हुए सवाल टाइप करते हैं। "छुट्टी?" या "फिर से वही समस्या" या कोई फ़ॉलो-अप जैसे "और कॉन्ट्रैक्ट स्टाफ़ के लिए?"। कच्चे टेक्स्ट के साथ सर्च करना अक्सर फ़ेल हो जाता है। क्वेरी रीराइटिंग रिट्रीवल से पहले यूज़र के शब्दों को बेहतर सर्च क्वेरी में बदल देती है।
  • फ़ॉलो-अप्स को स्टैंडअलोन बनाएं। चैट हिस्ट्री का उपयोग करके "और कॉन्ट्रैक्ट स्टाफ़ के लिए?" बन जाता है "कॉन्ट्रैक्ट स्टाफ़ के लिए कैज़ुअल लीव के नियम"।
  • मल्टी-क्वेरी। किसी मॉडल से 3–4 अलग-अलग वाक्य बनाने को कहें, प्रत्येक के साथ सर्च करें, और नतीजों को RRF के साथ मिलाएँ। यह तब मदद करता है जब दस्तावेज़ यूज़र्स की तुलना में अलग शब्दों का उपयोग करते हैं।
  • टर्म्स का विस्तार करें। जाने-माने पर्यायवाची और संक्षिप्तीकरण (abbreviations) जोड़ें: "PF" और "भविष्य निधि", "DOJ" और "जॉइनिंग की तारीख"।
  • काल्पनिक उत्तर (Hypothetical answer)। किसी मॉडल से एक छोटा काल्पनिक उत्तर लिखने को कहें और उस टेक्स्ट के साथ खोजें, क्योंकि यह सवाल की तुलना में दस्तावेज़ों से अधिक मिलता-जुलता हो सकता है। इसे कभी-कभी HyDE कहा जाता है। काल्पनिक उत्तर केवल खोजने के लिए है; इसे कभी भी उत्तर के रूप में न दिखाएं।
Python: multi-query search fused with RRFpython
def call_model(prompt: str) -> str: ...  # plug in your provider
def hybrid_search(query: str, k: int = 20) -> list[str]: ...  # your search, returns chunk ids

def rrf(rankings, k=60):
    scores = {}
    for ranking in rankings:
        for rank, doc_id in enumerate(ranking, start=1):
            scores[doc_id] = scores.get(doc_id, 0.0) + 1.0 / (k + rank)
    return sorted(scores, key=lambda d: (-scores[d], d))

def multi_query_search(question: str, n: int = 3) -> list[str]:
    prompt = (
        f"Write {n} different search queries for this question, one per line. "
        "Keep names, numbers and codes exactly as written.\n\nQuestion: " + question
    )
    rewrites = [q.strip() for q in call_model(prompt).splitlines() if q.strip()][:n]
    queries = [question] + rewrites  # always keep the original
    return rrf([hybrid_search(q) for q in queries])
सावधान रहें
रीराइटिंग भटक सकती है (drift)। कोई मॉडल किसी प्रोडक्ट कोड को "ठीक" कर सकता है, कोई नाम छोड़ सकता है, या अर्थ बदल सकता है। हमेशा मूल क्वेरी को खोजों में से एक के रूप में रखें, रीराइटर को कोड और नाम बिल्कुल वैसे ही रखने के लिए कहें, और रीराइट्स का लॉग रखें ताकि आप उनकी जांच कर सकें।

भारतीय-भाषा और ट्रांसलिटरेट की गई क्वेरीज़

भारत में, एक सवाल कई रूपों में आ सकता है: अंग्रेज़ी, देवनागरी में हिंदी (रिफंड कब आएगा), लैटिन अक्षरों में टाइप की गई हिंदी (refund kab aayega), या एक मिश्रण (mera order cancel ho gaya but paisa nahi aaya)। किसी भारतीय भाषा को लैटिन अक्षरों में टाइप करने को ट्रांसलिटरेशन कहा जाता है, और इसकी स्पेलिंग बहुत अलग-अलग होती है: aayega, ayega, aaega।
समस्याक्या मदद करता है
कीवर्ड सर्च चूक जाती है क्योंकि क्वेरी और दस्तावेज़ अलग-अलग लिपियों का उपयोग करते हैंक्वेरी को दस्तावेज़ों की लिपि में ट्रांसलिटरेट करें, या इसका अनुवाद करें, और दोनों वर्ज़न के साथ खोजें
एक ही रोमनीकृत (romanised) शब्द की कई स्पेलिंगसामान्य स्पेलिंग्स को सामान्य (normalise) करें; वेक्टर सर्च पर अधिक भरोसा करें; वास्तविक लॉग्स से एक पर्यायवाची सूची जोड़ें
एम्बेडिंग मॉडल यूज़र की भाषा में कमज़ोर हैअपनी असली क्वेरीज़ पर मल्टीलिंगुअल एम्बेडिंग मॉडल्स का परीक्षण करें; एक अतिरिक्त खोज के रूप में क्वेरी का दस्तावेज़ों की भाषा में अनुवाद करें
एक ही क्वेरी में मिली-जुली भाषा (कोड-मिक्सिंग)"order" और "refund" जैसे अंग्रेज़ी शब्दों को कीवर्ड के रूप में रखें; एक अनुवादित वर्ज़न भी चलाएं; RRF के साथ मिलाएँ
उत्तर यूज़र की भाषा में होना चाहिएदस्तावेज़ों की भाषा में खोजें, फिर मॉडल से मूल का हवाला देते हुए, यूज़र की भाषा में उत्तर देने को कहें
भारतीय भाषा के अनुवाद और ट्रांसलिटरेशन के लिए ओपन मॉडल और टूल्स मौजूद हैं, उदाहरण के लिए IIT मद्रास के AI4Bharat से, जिसने अनुवाद के लिए IndicTrans2 जारी किया। भारत का भाषिणी मिशन भी भाषा सेवाएं प्रदान करता है। उन पर निर्भर होने से पहले अपनी खुद की क्वेरीज़ पर उनका परीक्षण करें।
इसे आज़माएं। एक ही सवाल को पाँच तरीकों से लिखें: अंग्रेज़ी, आपकी भाषा अपनी लिपि में, आपकी भाषा लैटिन अक्षरों में, एक मिश्रण, और एक स्पेलिंग की गलती के साथ। ये पाँच किसी भी भारतीय सर्च सिस्टम के लिए एक बेहतरीन पहला टेस्ट सेट बनाते हैं।

और देखें और पढ़ें

लैब

एक सपोर्ट बॉट के लिए एक बहुभाषी क्वेरी टेस्ट शीट और एक लिखित रीराइटिंग योजना।

~30 min

समस्या

पूरे भारत में इस्तेमाल होने वाले एक ऑनलाइन ग्रॉसरी ऐप के सपोर्ट बॉट की कल्पना करें। इसके हेल्प पेज अंग्रेज़ी और हिंदी में हैं।

  1. उपयोगकर्ताओं के असली जैसे लगने वाले 10 सवाल लिखें: कम से कम 3 रोमन लिपि वाली हिंदी या किसी अन्य रोमन लिपि वाली भारतीय भाषा में, 2 किसी मूल लिपि में, 2 कोड-मिक्स्ड, 1 फ़ॉलो-अप सवाल, और 1 ऑर्डर आईडी के साथ।
  2. हर एक के लिए, वह क्वेरी या क्वेरीज़ लिखें जिन्हें आप रीराइट करने के बाद असल में सर्च करेंगे (स्टैंडअलोन, अनुवादित, ट्रांसलिटरेटेड, या बिना बदलाव के)।
  3. चिह्नित करें कि किन सवालों को आज़ादी से रीराइट नहीं किया जाना चाहिए, और क्यों (उदाहरण के लिए, ऑर्डर आईडी)।
  4. अपने रीराइटिंग प्रॉम्प्ट के लिए ऐसे तीन नियम लिखें जो ड्रिफ्ट को रोकें।

आपका काम तब पूरा होगा जब

कठिन सवाल

उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।

Q1मल्टी-क्वेरी रीराइटिंग ने आपके जवाबों को औसतन बेहतर बना दिया, लेकिन प्रोडक्ट कोड वाले सवालों के लिए बहुत खराब कर दिया। इसका संभावित कारण क्या है, और इसका समाधान क्या है?दिखाएं

रीराइटर ने शायद कोड को बदल दिया, हटा दिया या "सही" कर दिया, और फिर रीराइट की गई क्वेरीज़ फ़्यूज़ की गई लिस्ट पर हावी हो गईं। समाधान: मूल क्वेरी को सर्च में से एक के रूप में रखें, रीराइटर को कोड और नाम बिल्कुल वैसे ही कॉपी करने का निर्देश दें, और जब क्वेरी में कोई आईडी पैटर्न हो तो रीराइटिंग छोड़ दें। फिर अपने टेस्ट सेट में कोड वाले सवालों को अलग से मापें।

Q2आपके री-रैंकर ने अंग्रेज़ी के नतीजों को बेहतर बनाया लेकिन हिंदी के नतीजों को खराब कर दिया। आप क्या करेंगे?दिखाएं

री-रैंकर की ट्रेनिंग भाषाओं की जाँच करें; हो सकता है कि यह हिंदी में कमज़ोर हो। विकल्प: किसी मल्टीलिंगुअल री-रैंकर को आज़माएँ, सवाल और चंक के अनुवादित वर्शन को फिर से रैंक करें, या री-रैंकर का इस्तेमाल केवल उन्हीं भाषाओं के लिए करें जहाँ यह मदद करता है। हर भाषा के लिए अलग-अलग टेस्ट स्कोर रखें ताकि एक भाषा में हुआ फ़ायदा दूसरी भाषा के नुकसान को छिपा न सके।

जारी रखने के लिए कृपया साइन इन करें।

अक्सर पूछे जाने वाले सवाल

मुझे कितने उम्मीदवारों को री-रैंक करना चाहिए?

इतने कि सही चंक आमतौर पर उनके बीच हो, और इतने कम कि लेटेंसी स्वीकार्य हो। अपने उम्मीदवार संख्या पर रिकॉल (recall) को मापें: यदि सही चंक अक्सर 80वें स्थान पर होता है, तो केवल शीर्ष 20 को री-रैंक करने से मदद नहीं मिल सकती।

क्या री-रैंकिंग हमेशा मदद करती है?

अक्सर, लेकिन हमेशा नहीं। मुख्य रूप से अंग्रेज़ी वेब टेक्स्ट पर प्रशिक्षित एक री-रैंकर आपके तमिल सपोर्ट टिकटों पर खराब प्रदर्शन कर सकता है। अपने खुद के टेस्ट सेट पर इसके साथ और इसके बिना तुलना करें।

क्या क्वेरी रीराइटिंग अतिरिक्त मॉडल कॉल के लायक है?

छोटे, अस्पष्ट और फ़ॉलो-अप सवालों के लिए यह अक्सर फायदेमंद होती है। कोड खोजने जैसी सटीक खोजों के लिए, यह लागत और जोखिम बढ़ाती है। कुछ सिस्टम केवल तभी रीराइट करते हैं जब सवाल फ़ॉलो-अप जैसा लगता है या जब पहली खोज में बहुत कम परिणाम मिलते हैं।

क्या मुझे इसके बजाय अपने सभी दस्तावेज़ों का अंग्रेज़ी में अनुवाद करना चाहिए?

यह एक विकल्प है, लेकिन अनुवाद में अर्थ खो सकता है, और संदर्भों (citations) को मूल टेक्स्ट की ओर संकेत करना चाहिए। कई टीमें मूल को रखती हैं, और इसके बजाय क्वेरी का अनुवाद या ट्रांसलिटरेशन करती हैं, फिर यूज़र की भाषा में उत्तर देती हैं।

पाठ का टेस्ट

5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।

टेस्ट देने और अपनी प्रोग्रेस सेव करने के लिए साइन इन करें