इकाई 4 / 11

पुनर्प्राप्ति रणनीतियाँ: टॉप-के, हाइब्रिड, पुनः रैंकिंग

लाभ:

  • हाइब्रिड खोज को लागू करना जो टॉप-के चयन और सिमेंटिक और कीवर्ड खोज को जोड़ती है
  • पुनः रैंकिंग के साथ पहली खोज की सटीकता बढ़ाना
  • क्वेरी ट्रांसफ़ॉर्मेशन और HyDE जैसी तकनीकों से कठिन प्रश्नों को अधिक खोजने योग्य बनाना

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

टॉप-के: हम कितने टुकड़े लाएंगे?

सबसे बुनियादी सेटिंग: खोज से कितने टुकड़े (k) लौटाने हैं। यदि आप (k=1) कम लाते हैं तो सही टुकड़ा छूट जाने का जोखिम अधिक है; यदि आप बहुत अधिक (k=20) जोड़ते हैं, तो इससे मॉडल में शोर बढ़ जाएगा और टोकन लागत बढ़ जाएगी।

दो अवधारणाओं के बीच अंतर बताएं. याद करें: वह दर जिस पर पुनर्प्राप्त किए गए टुकड़ों में से सही टुकड़ा है। परिशुद्धता: वह दर जिस पर जो प्राप्त किया गया है वह प्रासंगिक है। k बढ़ाने से रिकॉल बढ़ता है लेकिन सटीकता कम हो जाती है। लक्ष्य दोनों को संतुलित करना है।

टॉप-के

प्रभाव

उपयुक्त स्थिति

1-3

उच्च परिशुद्धता, चूक का खतरा

सरल, एक-उत्तरीय प्रश्न

4-8

संतुलन; अधिकांश परिदृश्य

सामान्य कॉर्पोरेट आरएजी

10-20

उच्चतर स्मरण, शोर बढ़ता है

पुनः रैंकिंग के साथ (नीचे)

युक्ति: सामान्य और शक्तिशाली पैटर्न: विस्तृत (k=20) प्राप्त करें, फिर पुन: रैंकिंग (शीर्ष 4) के साथ संकीर्ण करें। इस तरह आप कुछ भी नहीं चूकेंगे और मॉडल को साफ़ संदर्भ देंगे।

हाइब्रिड खोज: दो खोजों की शक्ति

सिमेंटिक (वेक्टर) खोज अर्थ को पकड़ लेती है लेकिन चीजें छूट जाती हैं: पूर्ण उत्पाद कोड ("एक्सआर-4471"), दुर्लभ संक्षिप्त नाम, उचित नाम, संस्करण संख्या। इन सटीक-मिलान कार्यों के लिए, पुराने-स्कूल कीवर्ड खोज-विशेष रूप से बीएम25 नामक क्लासिक एल्गोरिदम-बहुत अच्छा है।

हाइब्रिड खोज दोनों को जोड़ती है: सिमेंटिक और कीवर्ड दोनों खोज, परिणामों को मिलाकर काम करती हैं। इस प्रकार, "वारंटी अवधि" जैसे प्रश्न में

विलय आम तौर पर आरआरएफ (पारस्परिक रैंक फ़्यूज़न) के साथ किया जाता है: जो ट्रैक दोनों सूचियों में उच्चतर होता है वह आगे आता है।

# हाइब्रिड पुनर्प्राप्ति (वैचारिक)सेम = वेक्टर_सर्च(प्रश्न, के=20) # अर्थकी = बीएम25_सर्च(प्रश्न, के=20) # पूर्णशब्दपरिणाम = आरआरएफ_मर्ज(सेम, कुंजी)[:8] # दोनों को मिलाएं, शीर्ष 8

पुन: रैंकिंग: दूसरा और स्मार्टर पास

पहली कॉल त्वरित लेकिन असभ्य हो सकती है। पुन: रैंकिंग स्कोर पहली खोज से लौटे उम्मीदवारों को एक अधिक शक्तिशाली मॉडल (आमतौर पर एक क्रॉस-एनकोडर - एक मॉडल जो प्रश्न और अनुच्छेद को एक साथ पढ़ता है और प्रासंगिकता स्कोर करता है) के साथ एक-एक करके प्राप्त करता है और सबसे प्रासंगिक लोगों को शीर्ष पर ले जाता है।

तर्क यह है: पहली खोज बड़ी संख्या में उम्मीदवारों को वापस बुलाने (20 उम्मीदवारों) को निर्दिष्ट करती है, पुन: रैंक करने वाला सटीकता के लिए सर्वश्रेष्ठ 4 का चयन करता है। यह दो-चरणीय दृष्टिकोण एकल-चरणीय खोज की तुलना में कहीं अधिक सटीक है। इसमें कुछ देरी और अतिरिक्त प्रसंस्करण का खर्च आता है; यह लाभ गुणवत्ता में उल्लेखनीय वृद्धि है।

# दो-चरण पुनर्प्राप्ति (वैचारिक) उम्मीदवार = हाइब्रिड_सर्च (प्रश्न, के = 20) # व्यापक, क्विकस्कोर = रीरैंकर.स्कोर (प्रश्न, उम्मीदवार) # प्रत्येक उम्मीदवार के संदर्भ के लिए प्रासंगिकता स्कोर = रेटेड.रैंक()[:4] # शीर्ष 4

क्वेरी को रूपांतरित करना

कभी-कभी समस्या खोज में नहीं, बल्कि प्रश्न में ही होती है। यदि उपयोगकर्ता पूछता है "दूरस्थ श्रमिकों के बारे में क्या?" ', इसे अकेले नहीं खोजा जा सकता (यह स्पष्ट नहीं है कि दूरदराज के श्रमिकों के लिए क्या है)। यहां क्वेरी परिवर्तन तकनीकें हैं:

  • पुनः लिखें: प्रश्न को अलग करने के लिए वार्तालाप इतिहास का उपयोग करें: "दूरदराज के कर्मचारी वार्षिक अवकाश के हकदार क्या हैं?"
  • मल्टी-क्वेरी: एक ही प्रश्न के 3 अलग-अलग भाव उत्पन्न करें, उन सभी के साथ खोजें, परिणामों को संयोजित करें। अलग-अलग शब्द अलग-अलग टुकड़े ढूंढते हैं।
  • HyDE (काल्पनिक दस्तावेज़ एंबेडिंग): पहले मॉडल के लिए एक "संभावित उत्तर" प्रिंट करें, फिर एम्बेड करें और उस काल्पनिक उत्तर की खोज करें। काल्पनिक उत्तर कभी-कभी बेहतर पाया जाता है क्योंकि यह शब्दों में वास्तविक दस्तावेज़ के करीब होता है।

# मल्टी-क्वेरी (वैचारिक) वेरिएंट = मॉडल.यूरेट ("इस प्रश्न को 3 अलग-अलग तरीकों से व्यक्त करें:" + प्रश्न) tum_sonuc = [] वेरिएंट में v के लिए: all_sonuc + = वेक्टर_इंटरमीडिएट (v, k = 6) संदर्भ = एकवचन_और_ऑर्डर (tum_result) [: 6]

कमजोर पुनर्प्राप्ति / मजबूत पुनर्प्राप्ति

कमजोर (एकल चरण, केवल शब्दार्थ, स्थिरांक k=3):

परिणाम = वेक्टर_खोज(प्रश्न, k=3)# समस्या: उत्पाद कोड छूट गया है, कठिन प्रश्नों में सही भाग 3 दर्ज नहीं किया जा सकता।

शक्तिशाली (हाइब्रिड + वाइडक + री-रैंकिंग + यदि आवश्यक हो तो मल्टी-क्वेरी):

उम्मीदवार = हाइब्रिड_खोज(पुनः लिखें(प्रश्न, अतीत), के=20)संदर्भ = पुनर्रैंकर.स्कोर(प्रश्न, उम्मीदवार).पहला(4)# सटीक मिलान और अर्थ दोनों कैप्चर किए गए हैं; यह सर्वश्रेष्ठ 4 मॉडलों में जाता है।

तीन मिनी मामले

केस 1 - उत्पाद कोड बच गया। एक सहायता टीम पर शुद्ध अर्थ संबंधी खोज "RTX-9080 ड्राइवर त्रुटि" प्रश्न में शब्दशः "RTX-9080" नहीं ढूंढ सकी; वह मिलते-जुलते नाम से दूसरे उत्पाद भी ला रहा था. जब हाइब्रिड खोज जोड़ी गई, तो सटीक कोड मिलान हुआ और सही लेख लौटाने की दर 58% से बढ़कर 92% हो गई।

केस 2 - पुनः रैंकिंग अंतर। एक पैरालीगल k=5 के साथ काम कर रहा था लेकिन अधिकांश समय सही आइटम 7-10 है। वह रैंकों में रह रहा था. जब k=20 + पुनः रैंकिंग शुरू की गई, तो सही लेख के शीर्ष 3 में होने की दर 61% से बढ़कर 94% हो गई; विलंबता में केवल 300 एमएस की वृद्धि हुई - एक स्वीकार्य समझौता।

केस 3 - संदर्भ के बिना अनुवर्ती प्रश्न। मानव संसाधन सहायक में, उपयोगकर्ता पूछता है "अंशकालिकों के बारे में क्या?" जब मैंने पूछा, तो सिस्टम अप्रासंगिक हिस्से लेकर आया। क्वेरी को दोबारा लिखने से (अतीत से "वार्षिक छुट्टी" संदर्भ खींचकर और "अंशकालिक कर्मचारी वार्षिक छुट्टी के हकदार हैं") जोड़कर, सही उत्तर दर 40% से बढ़कर 86% हो गई।

सामान्य गलतियाँ

  • केवल सिमेंटिक खोज पर निर्भर रहना: उत्पाद कोड, संक्षिप्त नाम, उचित नाम छूट गया है; हाइब्रिड जोड़ें.
  • K को बहुत छोटा रखना: सही टुकड़ा सूची में प्रवेश नहीं कर सकता; इसे चौड़ा करें और पुनः रैंक देकर इसे संकीर्ण करें।
  • दोबारा रैंकिंग के बारे में कभी न सोचें: पहली खोज असभ्य है; दूसरा स्मार्ट पास गुणवत्ता में काफी सुधार करता है।
  • अनुवर्ती प्रश्नों की खोज इस प्रकार है: संदर्भ के बिना एक प्रश्न अर्थहीन की खोज करता है; पुनः लिखना
  • आँख बंद करके k को बढ़ाना (बिना पुनः रैंक के): मॉडल शोर से भर जाता है, प्रतिक्रिया विकृत हो जाती है और लागत बढ़ जाती है।
सावधान रहें: प्रत्येक तकनीक लागत और विलंब बढ़ाती है। मल्टी-क्वेरी का मतलब है 3-गुना खोज, री-रैंकिंग का मतलब है अतिरिक्त मॉडल कॉल। पहले सरल हाइब्रिड + उचित k से प्रारंभ करें; जहां वास्तव में आवश्यकता हो वहां भारी तकनीकों को मापें और जोड़ें। बिना मापे जोड़ना।

संक्षेप में

  • टॉप-के रिकॉल और परिशुद्धता के बीच संतुलन है; आम तौर पर 4-8 एक अच्छी शुरुआत है.
  • हाइब्रिड खोज शब्दार्थ खोज को कीवर्ड (BM25) खोज के साथ जोड़ती है; सटीक मिलान पुनर्प्राप्त करता है.
  • री-रैंकिंग एक मजबूत मॉडल के साथ व्यापक प्रारंभिक खोज से उम्मीदवारों को दोबारा स्कोर करती है और सर्वश्रेष्ठ का चयन करती है।
  • क्वेरी परिवर्तन (पुनर्लेखन, बहु-क्वेरी, HyDE) कठिन और संदर्भ-मुक्त प्रश्नों को खोजने योग्य बनाता है।
  • मजबूत पैटर्न: व्यापक फ़ेच → हाइब्रिड के साथ विलय → पुन: रैंक के साथ संकीर्ण; लेकिन प्रत्येक तकनीक को मापकर जोड़ें।

आवेदन कार्य

पिछली इकाइयों के डेटा के साथ 6 कठिन प्रश्न तैयार करें: कम से कम 2 जिनमें सटीक मिलान की आवश्यकता हो (उत्पाद कोड, संक्षिप्त नाम, दिनांक), 2 शब्दार्थ (अलग-अलग शब्दों के साथ एक ही विषय), बिना संदर्भ के 2 अनुवर्ती प्रश्न। (1) पहले प्रत्येक प्रश्न को शुद्ध अर्थ संबंधी खोज के रूप में सोचें और मैन्युअल रूप से चिह्नित करें कि कौन से भाग सामने आएंगे। (2) हाइब्रिड और पुनः रैंकिंग जोड़कर समान प्रश्नों का पुनर्मूल्यांकन करें। (3) अनुवर्ती प्रश्नों को बिना संदर्भ के दोबारा लिखें। सारणीबद्ध रूप में नोट करें कि कौन सी तकनीक किस प्रकार के प्रश्न में अंतर लाती है।

चेकलिस्ट

  • [ ] मैं जानता हूं कि टॉप-के एक रिकॉल-सटीक संतुलन और एक उचित शुरुआती सीमा है।
  • [ ] मैं समझा सकता हूं कि हाइब्रिड खोज सटीक मिलान क्यों पुनर्प्राप्त करती है।
  • [ ] मैं पुन: रैंकिंग (व्यापक → स्मार्ट संकीर्ण) के दो-चरणीय तर्क को लागू कर सकता हूं।
  • [ ] मैं संदर्भ के बिना अनुवर्ती प्रश्नों को फिर से लिखने की आवश्यकता को समझता हूं।
  • [ ] मैं पुष्टि करता हूं कि मैंने मापकर नहीं, मापकर भारी तकनीकें जोड़ीं।