paint-brush
वेक्टर डेटाबेस - पायथन में वेक्टर खोज और लैंगचैन पैकेज की मूल बातेंद्वारा@shyamganesh
18,033 रीडिंग
18,033 रीडिंग

वेक्टर डेटाबेस - पायथन में वेक्टर खोज और लैंगचैन पैकेज की मूल बातें

द्वारा Shyam Ganesh S7m2023/09/30
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

इस लेख में, मैं आपको समान वैक्टर को संग्रहीत करने और क्वेरी करने के लिए पायथन में वेक्टर डेटाबेस, वेक्टर खोज और लैंगचैन पैकेज की मूल बातें बताऊंगा। अपनी सीखने की यात्रा शुरू करने के लिए, हम "एम्बेडिंग्स' नामक एक प्रमुख अवधारणा से शुरुआत करेंगे। एंबेडिंग किसी मशीन को अपने समझने योग्य प्रारूप में डेटा प्रस्तुत करने का एक तरीका है।
featured image - वेक्टर डेटाबेस - पायथन में वेक्टर खोज और लैंगचैन पैकेज की मूल बातें
Shyam Ganesh S HackerNoon profile picture

इस ब्लॉग पोस्ट में, मैं आपको वेक्टर डेटाबेस, वेक्टर खोज और पायथन में लैंगचैन पैकेज के बुनियादी सिद्धांतों के बारे में मार्गदर्शन करूंगा, जो तुलनीय वैक्टर के भंडारण और पुनर्प्राप्ति की सुविधा प्रदान करता है।


अपनी यात्रा शुरू करने के लिए, हम "एम्बेडिंग्स" नामक एक महत्वपूर्ण अवधारणा के साथ शुरुआत करेंगे।

एंबेडिंग क्या हैं?

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


अनिवार्य रूप से, एम्बेडिंग पाठ के वेक्टर प्रतिनिधित्व के रूप में कार्य करती है, शब्दों, वाक्यों और अंशों के जटिल वेब को एक संख्यात्मक प्रारूप में परिवर्तित करती है जिसे मशीनें संसाधित कर सकती हैं।


एक गंभीर मुद्दा उठता है: क्या मनुष्य इन एम्बेडिंग को समझ सकते हैं? जवाब न है। एंबेडिंग अनिवार्य रूप से संख्याओं का अनुक्रम है जो पाठ्य जानकारी को समाहित करता है।


नतीजतन, एम्बेडिंग वेक्टर को समझना और उसके साथ काम करना मनुष्यों के लिए एक कठिन काम हो सकता है, जबकि मशीनें इसे आसानी से संभाल लेती हैं।


पाठ से एम्बेडिंग उत्पन्न करने के लिए असंख्य तकनीकें मौजूद हैं। उल्लेखनीय तरीकों में TF-IDF, Word2Vec, Glove, और BERT आदि शामिल हैं। मशीन लर्निंग के समकालीन क्षेत्र में, वाक्य एम्बेडिंग ने शब्द एम्बेडिंग की तुलना में लोकप्रियता हासिल की है।


पाठ के सार का प्रतिनिधित्व करने वाले ये वाक्य एम्बेडिंग, "ऑल-मिनीएलएम-एल6-वी2" और "ऑल-एमपीनेट-बेस-वी2" जैसे पूर्व-प्रशिक्षित वाक्य ट्रांसफार्मर मॉडल से प्राप्त किए जा सकते हैं।


ये मॉडल किसी दिए गए पाठ के लिए निश्चित आयामों, आमतौर पर 384 या 768 आयामों के साथ एम्बेडिंग का उत्पादन करते हैं।


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

वेक्टर स्टोर

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


इसकी मुख्य कार्यक्षमताओं में से एक स्टोर के भीतर उन वैक्टरों को कुशलतापूर्वक खोजने की क्षमता है जो किसी दिए गए क्वेरी वेक्टर से काफी मिलते-जुलते हैं।



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


वेक्टर एम्बेडिंग के दायरे में, समानता खोज में दो या दो से अधिक एम्बेडिंग के बीच निकटता या संबंधितता को मापना शामिल है। आमतौर पर, यह विभिन्न दूरी मेट्रिक्स का उपयोग करके समानता की गणना करके पूरा किया जाता है। कुछ सामान्य रूप से उपयोग की जाने वाली और व्यापक रूप से मान्यता प्राप्त दूरी मेट्रिक्स में यूक्लिडियन दूरी, मैनहट्टन दूरी और कोसाइन दूरी शामिल हैं। ये मेट्रिक्स हमें वैक्टर के बीच समानता या असमानता की डिग्री का आकलन करने में मदद करते हैं, जिससे डेटा के भीतर प्रभावी समानता खोज की सुविधा मिलती है।


उदाहरण के तौर पर, ग्राफ़ पर दो बिंदुओं के बीच समानता या निकटता का निर्धारण करते समय, यूक्लिडियन दूरी का आमतौर पर उपयोग किया जाता है। इस दूरी की गणना निम्न सूत्र का उपयोग करके की जा सकती है:


यूक्लिडियन दूरी = [(x2 - x1)^2 + (y2 - y1)^2]^0.5



2डी में 2 बिंदुओं के बीच की दूरी


यहां, (x1, y1) पहले बिंदु के निर्देशांक का प्रतिनिधित्व करता है, और (x2, y2) ग्राफ़ पर दूसरे बिंदु के निर्देशांक का प्रतिनिधित्व करता है। इस गणना का परिणाम दो बिंदुओं के बीच स्थानिक अलगाव का माप प्रदान करता है, जो ग्राफ़ के भीतर उनकी स्थिति के संदर्भ में उनकी समानता या असमानता को दर्शाता है।


इसी प्रकार, समानता खोज में, एम्बेडिंग को एक उच्च-आयामी स्थान के भीतर दर्शाया जाता है, जिसमें प्रत्येक रिकॉर्ड डेटा बिंदु के रूप में कार्य करता है।


नीचे दिए गए कोड की पंक्ति दर्शाती है कि किसी दिए गए इनपुट डेटा के लिए शीर्ष 5 समान एम्बेडिंग कैसे प्राप्त करें:

 distance, n = vector_store.search(input_embedding, k=5)


यह कोड शीर्ष 5 एम्बेडिंग की एक सूची लौटाएगा जो इनपुट डेटा से काफी मिलती-जुलती है, जिससे यह अनुशंसा प्रणाली, सामग्री पुनर्प्राप्ति और बहुत कुछ जैसे विभिन्न अनुप्रयोगों के लिए एक मूल्यवान उपकरण बन जाएगा।


वेक्टर_स्टोर.सर्च() फ़ंक्शन आउटपुट में इनपुट_एम्बेडिंग से उनकी संबंधित दूरी के साथ टॉप-के समान एम्बेडिंग शामिल है। पैरामीटर "k" एक कॉन्फ़िगर करने योग्य मान है जो समानता खोज में पुनर्प्राप्त करने के लिए निकटतम एम्बेडिंग की संख्या निर्धारित करता है। आप खोज ऑपरेशन द्वारा लौटाए गए परिणामों की वांछित संख्या को नियंत्रित करने के लिए "k" सेट कर सकते हैं।


अब जब हमने वेक्टर स्टोर्स की मूलभूत समझ स्थापित कर ली है, तो आइए लैंगचेन पैकेज और FAISS के बारे में गहराई से जानने के लिए आगे बढ़ें। ये उपकरण उच्च-आयामी एम्बेडिंग के साथ काम करने और कुशल समानता खोज करने की हमारी क्षमता को और बढ़ाएंगे।

पायथन में लैंगचेन

सीधे शब्दों में कहें तो, लैंगचेन एक ऐसा ढांचा है जो बड़े भाषा मॉडल (एलएलएम) की क्षमताओं का उपयोग करने वाले अनुप्रयोगों के निर्माण के लिए डिज़ाइन किया गया है। अधिक विस्तृत जानकारी और संसाधनों के लिए, आप आधिकारिक लैंगचेन दस्तावेज़ का संदर्भ ले सकते हैं।


पायथन में लैंगचेन


इसके विपरीत, FAISS, जो "फेसबुक एआई समानता खोज" के लिए खड़ा है, एक पायथन लाइब्रेरी है जो डेवलपर्स को पारंपरिक हैश-आधारित दृष्टिकोण से हटकर समान एम्बेडिंग की खोज का एक तेज़ और कुशल साधन प्रदान करता है।


यह लाइब्रेरी Facebook AI टीम द्वारा विकसित की गई थी और उच्च-आयामी स्थानों में समानता खोज कार्यों के लिए शक्तिशाली क्षमताएं प्रदान करती है।


FAISS एक ओपन-सोर्स लाइब्रेरी है जिसे आपके अपने सर्वर पर होस्ट किया जा सकता है।


लैंगचेन और एफएआईएसएस की हमारी खोज में, अब हम लैंगचेन ढांचे के भीतर एफएआईएसएस को लागू करने का लक्ष्य रखेंगे। लैंगचेन के FAISS एकीकरण से कुछ प्रमुख एपीआई नीचे दी गई हैं जिन पर हम इस लेख में ध्यान केंद्रित करेंगे:


  1. add_documents() : यह फ़ंक्शन हमें वेक्टर स्टोर में अतिरिक्त दस्तावेज़ शामिल करने की अनुमति देता है।


  2. add_embeddings() : यह वेक्टर स्टोर में अधिक एम्बेडिंग जोड़ने में सक्षम बनाता है।


  3. from_documents() : यह API प्रदान किए गए दस्तावेज़ों के आधार पर एक वेक्टरस्टोर लौटाता है।


  4. from_embeddings() : यह फ़ंक्शन दिए गए एम्बेडिंग से उत्पन्न FAISS इंडेक्स प्रदान करता है।


  5. Load_local() : डिस्क से FAISS इंडेक्स को लोड करने के लिए इसका उपयोग करें।


  6. save_local() : यह आपको FAISS इंडेक्स को डिस्क पर सहेजने की अनुमति देता है।


  7. समानता_खोज() : यह फ़ंक्शन उन दस्तावेज़ों को पुनः प्राप्त करता है जो किसी दी गई क्वेरी के समान होते हैं।


  8. समानता_खोज_by_vector() : यह उन दस्तावेज़ों को पुनः प्राप्त करता है जो किसी दिए गए एम्बेडिंग के समान होते हैं।


ये एपीआई लैंगचेन की क्षमताओं को FAISS के साथ संयोजित करने की नींव बनाते हैं, जो आपको एम्बेडिंग के साथ काम करने और आपके अनुप्रयोगों के भीतर कुशल समानता खोज करने में सक्षम बनाते हैं।


मेटा-फ़िल्टरिंग एक मूल्यवान तकनीक है जिसका उपयोग लैंगचेन FAISS में खोज क्वेरी के परिणामों को परिष्कृत करने के लिए किया जाता है। आम तौर पर मेटा-फ़िल्टरिंग दो प्रकार की होती है: प्री-फ़िल्टरिंग और पोस्ट-फ़िल्टरिंग। हमारे ढांचे में, हम विशेष रूप से खोज क्वेरी के लिए पोस्ट-फ़िल्टरिंग का समर्थन करते हैं।


यह ध्यान रखना महत्वपूर्ण है कि खोज परिणामों के लिए मेटा-फ़िल्टरिंग की अवधारणा FAISS के लैंगचेन संस्करण में उपलब्ध एक सुविधा है और FAISS के मूल कार्यान्वयन में मौजूद नहीं है। यह पोस्ट-फ़िल्टरिंग क्षमता खोज परिणामों की सटीकता और प्रासंगिकता को बढ़ाती है, जिससे उपयोगकर्ताओं को अधिक अनुरूप परिणाम मिलते हैं।


लैंगचेन FAISS एपीआई के ज्ञान से लैस, आइए लैंगचेन FAISS के पायथन कार्यान्वयन में गोता लगाएँ। यह कार्यान्वयन आपको एम्बेडिंग के साथ काम करने, समानता खोज करने और लैंगचेन ढांचे के भीतर अपने खोज परिणामों को बेहतर बनाने के लिए पोस्ट-फ़िल्टरिंग तकनीकों को लागू करने के लिए सशक्त बनाएगा।


बड़े भाषा मॉडल की शक्ति और FAISS के साथ उन्नत समानता खोज का उपयोग करने वाले एप्लिकेशन बनाने के लिए इन क्षमताओं का पता लगाने और उनका लाभ उठाने के लिए स्वतंत्र महसूस करें।

लैंगचेन FAISS पायथन डेमो

डेटासेट

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


हम आवश्यक पैकेजों को स्थापित करने और आयात करने से शुरुआत करेंगे

 !pip install langchain[all] !pip3 install Langchain[FAISS] !pip install faiss-cpu # WARNING: langchain 0.0.74 does not provide the extra 'faiss'
 from langchain import FAISS import pandas as pd import numpy as np import os import time import pickle


अब, हम डेटासेट आयात करेंगे:

 passage_data = pd.read_csv("/Users/shyam/Python_Programs/Text Similarity Codes/Standford_Edited.csv") passage_data.drop(columns=["Unnamed: 0"],axis=1, inplace=True) passage_data 

डेटासेट सिंहावलोकन


डेटासेट होने पर, हमें टेक्स्ट डेटा को वैक्टर में बदलने के लिए एक एम्बेडिंग फ़ंक्शन को प्रारंभ करने की आवश्यकता है। हमने "वाक्य-ट्रांसफॉर्मर/ऑल-मिनीएलएम-एल6-वी2" का उपयोग किया जो 384 आयामों में एम्बेडिंग उत्पन्न करता है,

 from langchain.embeddings import SentenceTransformerEmbeddings embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")


हम मेटाडेटा जानकारी सेट करेंगे. मेटाडेटा में, हमने प्रत्येक एम्बेडिंग (सामग्री) के लिए दस्तावेज़ आईडी और दस्तावेज़ भाषा जोड़ी है,

 start=time.time() metadatas = [] for index, row in passage_data.iterrows(): doc_meta = { "id": row['Id'], "language": row['Language'] } metadatas.append(doc_meta)


बस इतना ही... अब हम अपना FAISS सूचकांक बनाएंगे,

 faiss = FAISS.from_texts(passage_data['Content'].tolist(), embedding_function, metadatas) print("Time Taken --> ", time.time()-start)


अब, हम FAISS इंडेक्स को डिस्क पर सहेजने और इसे वापस लोड करने का प्रयास करेंगे:

 faiss.save_local("/Users/shyam/Python_Programs/LangChain_FAISS", "Standford") loaded_faiss = faiss.load_local("/Users/shyam/Python_Programs/LangChain_FAISS",embedding_function, "Standford")


हमने FAISS इंडेक्स का निर्माण, भंडारण और लोडिंग का काम पूरा कर लिया है। यह अनुमान का समय है. हम कुछ प्रश्नों को खोजने और FAISS सूचकांक का परीक्षण करने का प्रयास करेंगे।


सबसे पहले, हम शीर्ष पांच समान दस्तावेज़ प्राप्त करेंगे जो "नास्तिकता" से संबंधित हैं।

 start=time.time() loaded_faiss.similarity_search_with_score("What is atheism?",5) 

"नास्तिकता" का परिणाम


खैर, नतीजे आश्वस्त करने वाले हैं। लेकिन फिर भी, हम और अधिक अन्वेषण करेंगे...


इस बार, हम कुछ मेटा-फ़िल्टरिंग के साथ एक अलग भाषा क्वेरी का प्रयास करेंगे। हम एक रूसी क्वेरी पूछेंगे जिसमें कहा जाएगा कि फ़िल्टरिंग मानदंड {lang: 'ru_RU'} होना चाहिए।

 #Что такое атеизм? - Russian loaded_faiss.similarity_search_with_score("Что такое атеизм?",5, {"language":"ru_RU"}, 10)


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

पोस्ट-फ़िल्टरिंग क्वेरी का आउटपुट


इस लेख को समाप्त करने पर, मुझे विश्वास है कि आपको वेक्टर स्टोर्स और वेक्टर खोज की ठोस समझ प्राप्त हो गई होगी। हमने इसकी कार्यक्षमता को दर्शाने के लिए लैंगचेन FAISS का एक प्रदर्शन भी प्रदान किया है।


मैं आपको क्रोमाडीबी, क्यूड्रेंट, मिल्वस और अन्य जैसे अन्य वेक्टर स्टोर्स का पता लगाने के लिए दृढ़ता से प्रोत्साहित करता हूं।


प्रत्येक वेक्टर स्टोर अपने अनूठे फायदे और कमियों के साथ आता है, इसलिए अपना चयन अपने उपयोग के मामले की विशिष्ट आवश्यकताओं के आधार पर करें।


आपको एक सुखद और फलदायी सीखने की यात्रा की शुभकामनाएँ!