उन्नत RAG श्रृंखला में आपका स्वागत है: अपने दस्तावेज़ सिस्टम के साथ चैट का निर्माण करना
एडवांस्ड RAG (रिट्रीवल ऑगमेंटेड जेनरेशन) पर हमारी नई श्रृंखला के इस पहले वीडियो में, हम आपके दस्तावेज़ सिस्टम या RAG पाइपलाइन के साथ एक बुनियादी चैट की वास्तुकला का पता लगाएंगे। हम बुनियादी बातों से आगे जाकर पाइपलाइन को बढ़ाने के लिए और अधिक उन्नत तकनीकों पर चर्चा करेंगे।
आरएजी पाइपलाइन की मूल बातें
आइए RAG पाइपलाइन की मूल बातों से शुरुआत करें। आर्किटेक्चर में निम्नलिखित घटक शामिल हैं:
- दस्तावेज़ लोडर: यह घटक दस्तावेज़ों को लोड करता है, जैसे कि पीडीएफ फाइलें, जिनका उपयोग चैट सिस्टम में किया जाएगा।
- चंकिंग: दस्तावेजों को भाषा मॉडल (एलएलएम) के संदर्भ विंडो में फिट करने के लिए छोटे-छोटे टुकड़ों में विभाजित किया जाता है।
- एम्बेडिंग: प्रत्येक खंड के लिए एम्बेडिंग की गणना की जाती है, जिसे फिर एक सिमेंटिक इंडेक्स बनाने के लिए वेक्टर स्टोर में संग्रहीत किया जाता है।
- पुनर्प्राप्ति: जब कोई उपयोगकर्ता कोई प्रश्न पूछता है, तो सिस्टम क्वेरी के लिए एम्बेडिंग की गणना करता है और प्रासंगिक दस्तावेजों या खंडों को पुनर्प्राप्त करने के लिए ज्ञान आधार (वेक्टर स्टोर) पर एक अर्थपूर्ण खोज करता है।
- पुनः रैंकिंग: प्राप्त दस्तावेजों या खंडों को प्रासंगिकता के आधार पर पुनः रैंकिंग दी जाती है।
- सृजन: प्रत्युत्तर तैयार करने के लिए प्रश्न और संदर्भ (पुनःक्रमित दस्तावेज या खंड) को LLM में डाला जाता है।
यह RAG पाइपलाइन कैसे काम करती है, इसका एक बुनियादी अवलोकन है। यदि आप बिल्कुल नए हैं, तो चिंता न करें! हमारे पास RAG पाइपलाइन बनाने पर वीडियो की एक श्रृंखला है जिसे आप देख सकते हैं।
हाइब्रिड खोज का परिचय
इस नई श्रृंखला में, हम बुनियादी RAG पाइपलाइन को बेहतर बनाने पर ध्यान केंद्रित करेंगे। पहला विषय जिस पर हम चर्चा करेंगे वह है हाइब्रिड सर्च।
हाइब्रिड खोज में RAG पाइपलाइन में दो घटकों को जोड़ना शामिल है:
- कीवर्ड-आधारित खोज: एम्बेडिंग का उपयोग करके अर्थपूर्ण खोज के अतिरिक्त, हम उपलब्ध खंडों पर पारंपरिक कीवर्ड-आधारित खोज भी करते हैं।
- एन्सेम्बल रिट्रीवर: केवल एम्बेडिंग-आधारित रिट्रीवर का उपयोग करने के बजाय, हम कीवर्ड-आधारित खोज और एम्बेडिंग-आधारित रिट्रीवर दोनों के परिणामों को मिलाते हैं। यह एन्सेम्बल रिट्रीवर हमें प्रत्येक खोज विधि को अलग-अलग भार प्रदान करने की अनुमति देता है, जिससे यह अधिक शक्तिशाली बन जाता है।
अब जबकि हमें आर्किटेक्चर और हाइब्रिड सर्च के बारे में जानकारी मिल गई है, तो आइए एक कोड उदाहरण पर नजर डालते हैं।
कोड उदाहरण
इससे पहले कि हम कोड में उतरें, सुनिश्चित करें कि आपके पास आवश्यक पैकेज इंस्टॉल हैं। हम उपयोग करेंगे रैंक_बीएम25 हाइब्रिड खोज के लिए, असंरचितIO पीडीएफ फाइलें पढ़ने के लिए, और क्रोमाडीबी वेक्टर स्टोर बनाने के लिए। यदि आप स्कैन किए गए दस्तावेज़ों के साथ काम कर रहे हैं, तो स्कैन किए गए दस्तावेज़ों के साथ इंटरैक्ट करने और ऑप्टिकल कैरेक्टर रिकग्निशन (OCR) करने के लिए अतिरिक्त पैकेज की अनुशंसा की जाती है।
एक बार पैकेज इंस्टॉल हो जाने के बाद, हम उन्हें अपने कोड में लोड कर सकते हैं। यहाँ एक उदाहरण दिया गया है:
rank_bm25 आयात करें unstructuredIO आयात करें chromaDB आयात करें lchaintools से ChatPromptTemplate, OutputParser, RunnablePassThrough आयात करें lchaintools से EmbeddingModelAPI, LLMModelAPI आयात करें
इस उदाहरण में, हम LChain के नवीनतम संस्करण का उपयोग कर रहे हैं। हम अपने RAG पाइपलाइन के लिए आवश्यक पैकेज और मॉड्यूल आयात करते हैं, जिसमें चैट प्रॉम्प्ट टेम्पलेट, आउटपुट पार्सर, रननेबल पास-थ्रू, एम्बेडिंग मॉडल API और LLM मॉडल API शामिल हैं।
इसके बाद, हमें पीडीएफ फाइल को लोड करना होगा और उसे टुकड़ों में बदलना होगा। यहाँ एक उदाहरण दिया गया है:
पीडीएफ_लोडर = असंरचितआईओ.पीडीएफलोडर() दस्तावेज़ = पीडीएफ_लोडर.लोड_फ़ाइल('डेटा/उदाहरण.पीडीएफ') चंक_साइज़ = ८०० ओवरलैप = १०० स्प्लिटर = असंरचितआईओ.रिकर्सिवचारटेक्स्टस्प्लिटर(चंक_साइज़, ओवरलैप) चंक = स्प्लिटर.प्रोसेस(दस्तावेज़)
इस कोड स्निपेट में, हम PDF फ़ाइल लोड करने के लिए PDF लोडर का उपयोग करते हैं। फिर हम दस्तावेज़ों को टुकड़ों में विभाजित करने के लिए चंक आकार और ओवरलैप को परिभाषित करते हैं। टुकड़ों को बनाने के लिए रिकर्सिव कैरेक्टर टेक्स्ट स्प्लिटर का उपयोग किया जाता है।
अब, आइए एम्बेडिंग और वेक्टर स्टोर बनाने की ओर बढ़ते हैं:
एम्बेडिंग_मॉडल = एम्बेडिंग मॉडल एपीआई ('हगिंग_फेस_टोकन') वेक्टर_स्टोर = क्रोमाडीबी.वेक्टरस्टोर (एम्बेडिंग_मॉडल) वेक्टर_स्टोर.क्रिएट_वेक्टर_स्टोर (खंड)
इस उदाहरण में, हम हगिंग फेस एपीआई का उपयोग करके एक एम्बेडिंग मॉडल बनाते हैं। फिर हम वेक्टर स्टोर बनाने के लिए एम्बेडिंग मॉडल और चंक्स का उपयोग करते हैं।
इसके बाद, हमने एम्बेडिंग-आधारित खोज और कीवर्ड-आधारित खोज दोनों के लिए रिट्रीवर्स सेट अप किए:
एम्बेडिंग_रिट्रीवर = वेक्टर_स्टोर.क्रिएट_रिट्रीवर(संख्या_चंक्स=3) कीवर्ड_रिट्रीवर = रैंक_बीएम25.बीएम25रिट्रीवर(चंक्स, संख्या_चंक्स=3) एनसेंबल_रिट्रीवर = रैंक_बीएम25.एनसेंबलरिट्रीवर([एम्बेडिंग_रिट्रीवर, कीवर्ड_रिट्रीवर], [0.7, 0.3])
इस कोड स्निपेट में, हम एम्बेडिंग-आधारित खोज और कीवर्ड-आधारित खोज दोनों के लिए रिट्रीवर बनाते हैं। एन्सेम्बल रिट्रीवर दोनों रिट्रीवर के परिणामों को जोड़ता है, जिसमें प्रत्येक को अलग-अलग वज़न दिए जाते हैं।
अंत में, हमने LLM मॉडल और प्रॉम्प्ट टेम्पलेट स्थापित किया:
llm_model = LLMModelAPI('hugging_face_token') prompt_template = ChatPromptTemplate( system_prompt="आप एक मददगार AI सहायक हैं जो निर्देशों का बहुत अच्छी तरह से पालन करते हैं। उपयोगकर्ता के प्रश्न का उत्तर देने के लिए निम्नलिखित संदर्भ का उपयोग करें:", user_prompt="निर्देश ट्यूनिंग क्या है?", assistant_prompt="", ) output_parser = OutputParser() chat_template = llm_model.create_chat_template( prompt_template, output_parser, retriever=ensemble_retriever, )
इस कोड स्निपेट में, हम हगिंग फेस एपीआई का उपयोग करके LLM मॉडल बनाते हैं। फिर हम चैट के लिए प्रॉम्प्ट टेम्पलेट सेट करते हैं, जिसमें सिस्टम प्रॉम्प्ट, उपयोगकर्ता प्रॉम्प्ट और सहायक प्रॉम्प्ट शामिल हैं। आउटपुट पार्सर का उपयोग मॉडल की प्रतिक्रिया को पार्स करने के लिए किया जाता है।
सब कुछ सेट हो जाने के बाद, अब हम चैट चला सकते हैं:
user_input = "निर्देश ट्यूनिंग क्या है?" प्रतिक्रिया = chat_template.invoke(user_input)
इस उदाहरण में, हम उपयोगकर्ता का इनपुट प्रदान करते हैं और कॉल करते हैं आह्वान मॉडल की प्रतिक्रिया प्राप्त करने के लिए चैट टेम्पलेट पर फ़ंक्शन का उपयोग करें।
निष्कर्ष
इस वीडियो में, हमने एक बुनियादी RAG पाइपलाइन की वास्तुकला का पता लगाया और हाइब्रिड खोज की अवधारणा को पेश किया। हमने LChain लाइब्रेरी का उपयोग करके हाइब्रिड खोज को लागू करने के तरीके पर एक कोड उदाहरण भी प्रदान किया। कीवर्ड-आधारित खोज और एम्बेडिंग-आधारित खोज को मिलाकर, हम चैट सिस्टम के प्रदर्शन को बढ़ा सकते हैं और अधिक सटीक प्रतिक्रियाएँ प्रदान कर सकते हैं।
अगर आपको यह वीडियो उपयोगी लगा, तो इस श्रृंखला के और वीडियो देखने के लिए हमारे चैनल को सब्सक्राइब करना न भूलें। अगर आपको अपने प्रोजेक्ट में सहायता की ज़रूरत है, तो हम परामर्श सेवाएँ प्रदान करते हैं। अधिक जानकारी के लिए विवरण में दिए गए लिंक देखें।
देखने के लिए धन्यवाद, मिलते हैं अगले वीडियो में!




