मुख्य सामग्री पर जाएँ

Weaviate ट्यूटोरियल: वेक्टर सर्च की शक्ति को अनलॉक करें

Weaviate, एक ओपन-सोर्स, रियल-टाइम वेक्टर सर्च इंजन, की क्षमताओं को हमारे व्यापक शुरुआती मार्गदर्शक के साथ जानें।
· 11 मि॰ पढ़ें

AI के साथ खोजें

Weaviate एक ओपन-सोर्स, क्लाउड-नेटिव, मॉड्यूलर, रियल-टाइम वेक्टर सर्च इंजन है, जो आपको डेटा ऑब्जेक्ट्स और वेक्टर एम्बेडिंग्स को संग्रहीत करने और समानता मापों के आधार पर क्वेरी करने में सक्षम बनाता है। इस ट्यूटोरियल में, हम Weaviate और इसकी मूल अवधारणाओं का पता लगाएंगे, जानेंगे कि इसे कैसे सेट अप करें, एक स्कीमा बनाएं, उसमें डेटा जोड़ें, और Weaviate के GraphQL इंटरफ़ेस का उपयोग करके डेटा को क्वेरी करें। हम यह भी कवर करेंगे कि Python के साथ Weaviate का उपयोग कैसे करें और स्कीमा डिज़ाइन, डेटा आयात, और क्वेरी ऑप्टिमाइज़ेशन के सर्वोत्तम तरीकों और सुझावों पर चर्चा करेंगे।

Weaviate क्या है?

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

एम्बेडिंग्स को समझना

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

AI और मशीन लर्निंग अनुप्रयोगों में इस डेटा को उपयोगी बनाने के लिए, इसे एम्बेडिंग्स का उपयोग करके संख्यात्मक वेक्टरों में परिवर्तित किया जाता है।

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

यह डेटा की आयामिकता को कम करने और पारंपरिक एन्कोडिंग विधियों की सीमाओं को दूर करने में महत्वपूर्ण हैं, जिससे AI डेटा के भीतर जटिल संबंधों और संदर्भ को समझ सके।

टेक्स्ट एम्बेडिंग मॉडल

टेक्स्ट एम्बेडिंग मॉडल - छवि स्रोत

वेक्टर डेटाबेस को समझना

पारंपरिक डेटाबेस डेटा को तालिकाओं में संग्रहीत करते हैं, जिन्हें SQL का उपयोग करके क्वेरी किया जा सकता है। हालांकि, SQL असंरचित डेटा, जैसे टेक्स्ट या छवियों, की खोज के लिए उपयुक्त नहीं है। वेक्टर डेटाबेस इसके विपरीत, डेटा को वेक्टर के रूप में संग्रहीत करते हैं, जिन्हें समानता मापों का उपयोग करके क्वेरी किया जा सकता है।

यह उन्हें सिमेंटिक सर्च, प्रश्नोत्तर, और जनरेटिव सर्च जैसे कार्यों के लिए उपयुक्त बनाता है। वेक्टर ML एम्बेडिंग्स मॉडल का उपयोग करके प्राप्त किए जाते हैं। यह मूल ऑब्जेक्ट (जैसे टेक्स्ट, छवि, ऑडियो, वीडियो आदि) का केवल संख्यात्मक निरूपण है।

एक ऐसे परिदृश्य पर विचार करें जहां किसी भाषा मॉडल का उपयोग बड़े पैमाने पर टेक्स्ट दस्तावेज़ों का विश्लेषण और वर्गीकरण करने के लिए किया जाता है। प्रत्येक दस्तावेज़ को एक उच्च-आयामी वेक्टर में बदला जा सकता है जो उसके सिमेंटिक सार को समाहित करता है।

इन वेक्टरों को पारंपरिक डेटाबेस में संग्रहीत करना, समानता खोज या क्लस्टरिंग जैसे कार्यों के लिए कुशल नहीं हो सकता।

यहीं पर वेक्टर डेटाबेस उपयोगी साबित होता है। यह वेक्टरों को संग्रहीत करने और उच्च-गति वाले वेक्टर ऑपरेशनों, जैसे निकटतम पड़ोसियों को ढूंढना या वेक्टरों के बीच कोसाइन समानता की गणना करना, के लिए ऑप्टिमाइज़्ड होता है।

वेक्टर डेटाबेस आरेख

छवि स्रोत

Pinecone एक और लोकप्रिय वेक्टर डेटाबेस है और Weaviate का एक बढ़िया विकल्प है। यदि आप Pinecone के बारे में अधिक जानना चाहते हैं, तो Mastering Vector Databases with Pinecone ट्यूटोरियल देखें।

Weaviate कैसे सेट अप करें

Weaviate को सेट अप करने के लिए, आप Docker Compose का उपयोग कर सकते हैं या इसे मैन्युअल रूप से इंस्टॉल कर सकते हैं। Docker Compose अनुशंसित तरीका है, क्योंकि यह इंस्टॉलेशन प्रक्रिया को सरल बनाता है। एक बार जब आपने Weaviate इंस्टॉल कर लिया, तो आप एक साधारण क्वेरी चलाकर इंस्टॉलेशन को सत्यापित कर सकते हैं।

Docker compose के लिए, Weaviate से यह yaml फ़ाइल डाउनलोड करें। यह फ़ाइल होने के बाद, आप बस यह चलाएं:

docker compose up -d

Weaviate का उपयोग करने के अन्य विकल्प हैं:

Python में Weaviate का उपयोग करने के लिए आप pip के माध्यम से weaviate python क्लाइंट इंस्टॉल कर सकते हैं।

!pip install -U weaviate-client

Weaviate में मुख्य अवधारणाएँ

डेटा ऑब्जेक्ट

Weaviate में, प्रत्येक डेटा आइटम एक समूह, जिसे "क्लास" कहा जाता है, से संबंधित होता है और कुछ विशेषताएँ होती हैं जिन्हें "प्रॉपर्टीज" कहा जाता है। ये डेटा आइटम (JSON दस्तावेज़ों के रूप में दर्शाए गए) क्लास-आधारित कलेक्शंस होते हैं।

प्रत्येक डेटा आइटम को एक वेक्टर (मशीन लर्निंग एम्बेडिंग्स मॉडल) द्वारा दर्शाया जाता है। प्रत्येक क्लास-आधारित कलेक्शन में समान क्लास के ऑब्जेक्ट्स होते हैं, जो एक सामान्य स्कीमा द्वारा परिभाषित होते हैं।

मॉड्यूल्स

Weaviate को लचीले ढंग से बनाया गया है, जो आपको वैकल्पिक फीचर्स जोड़ने की अनुमति देता है, जैसे डेटा को वेक्टर में बदलना या बैकअप बनाना।

इन ऐड-ऑन्स के बिना, Weaviate का बेसिक संस्करण विशेष रूप से वेक्टर डेटा के लिए डिज़ाइन किया गया डेटाबेस के रूप में कार्य करता है।

Weaviate ट्रांसफॉर्मर आरेख

छवि स्रोत

स्टोरेज

Weaviate एक विश्वसनीय डेटाबेस है जो डेटा को तुरंत सहेजता है और सॉफ्टवेयर तथा हार्डवेयर, दोनों प्रकार की विफलताओं को संभाल सकता है।

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

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

आप डेटाबेस से पढ़ते समय भी डेटा और उनके वेक्टरों को स्वतंत्र रूप से अपडेट या हटाने कर सकते हैं।

GraphQL

आप Weaviate के साथ इसकी APIs का उपयोग करके इंटरैक्ट कर सकते हैं, जिनमें RESTful API और GraphQL API दोनों शामिल हैं। सभी प्रोग्रामिंग भाषाओं की क्लाइंट लाइब्रेरीज़ इन API सुविधाओं के साथ संगत हैं।

GraphQL APIs के लिए एक क्वेरी भाषा है, जो आपको ठीक वही डेटा अनुरोध करने देती है जिसकी आपको आवश्यकता है। यह पारंपरिक तरीकों, जैसे REST, की तुलना में डेटाबेस के साथ इंटरैक्ट करने का एक अधिक कुशल और लचीला तरीका प्रदान करती है।

GraphQL इंटरफ़ेस को कई कारणों से चुना गया, जिनमें शामिल हैं:

  • यह Weaviate में क्रॉस-रेफ़रेंसेज़ का उपयोग करके डेटा को जोड़ने की अनुमति देता है, जिससे GraphQL जैसी ग्राफ़-आधारित क्वेरी भाषा अत्यंत प्रभावी हो जाती है।
  • GraphQL डेटा के अधिक या कम फ़ेचिंग को समाप्त करता है और केवल वही विशिष्ट जानकारी देता है जिसका आप अनुरोध करते हैं, जिससे प्रदर्शन में सुधार होता है।
  • यह प्रक्रिया को सरल बनाता है और त्रुटियों की संभावना कम करता है।

Weaviate में एक क्लास बनाना

प्रत्येक Weaviate ऑब्जेक्ट एक क्लास से संबंधित होता है। आप क्लास को मैन्युअल रूप से बना सकते हैं या Weaviate के Auto-schema का उपयोग करके बना सकते हैं। जब आप क्लास मैन्युअल रूप से बनाते हैं, तो आपके पास डेटा मॉडल पर अधिक नियंत्रण होता है।

Python क्लाइंट लाइब्रेरी का उपयोग करके क्लास बनाने के लिए:

class_name = "Item description"
class_object = {"class": class_name}
client.schema.create_class(class_object)  

आम तौर पर, आप अतिरिक्त कॉन्फ़िगरेशन भी निर्दिष्ट करेंगे; Weaviate.io से लिया गया एक अधिक यथार्थवादी उदाहरण इस प्रकार होगा:

{
"class": "Article",
"vectorizer": "text2vec-cohere",
"vectorIndexConfig": {
"distance": "cosine",
},
"moduleConfig": {
"generative-openai": {}
},
"properties": [
{
"name": "title",
"dataType": ["text"]
},
{
"name": "chunk",
"dataType": ["text"]
},
{
"name": "chunk_no",
"dataType": ["int"]
},
{
"name": "url",
"dataType": ["text"],
"tokenization": "field"
},
],
}

ध्यान दें कि वेक्टराइज़ेशन के लिए मॉडल text2vec-cohere के साथ-साथ दूरी मीट्रिक cosine भी परिभाषित है। देखें कि प्रॉपर्टीज़ को शब्दकोशों की सूची के रूप में कैसे परिभाषित किया गया है।

Weaviate में एक ऑब्जेक्ट बनाना

ऑब्जेक्ट किसी क्लास से संबंधित होता है। ऑब्जेक्ट्स क्लास प्रॉपर्टीज़ को छोड़ भी सकते हैं और नई प्रॉपर्टीज़ जोड़ भी सकते हैं। नीचे क्लास Article में एक ऑब्जेक्ट जोड़ने का उदाहरण दिया गया है।

uuid = client.data_object.create({
'question': 'question here ...',
'answer': 'answer here ...'
}, 'Article')

आप वैकल्पिक रूप से प्रत्येक ऑब्जेक्ट का प्रतिनिधित्व करने के लिए एक वेक्टर असाइन कर सकते हैं। यदि आप वेक्टर परिभाषित नहीं करते हैं, तो Weaviate अपना डिफ़ॉल्ट वेक्टराइज़र उपयोग करेगा।

uuid = client.data_object.create(
data_object={
'question': 'question here ...',
'answer': 'answer here ...',
},
class_name='Article',
vector=[0.12345] * 1536

Python क्लाइंट का उपयोग करके Weaviate में वेक्टर डेटाबेस बनाने और उपयोग करने का संपूर्ण उदाहरण

यह एक उदाहरण है जो दिखाता है कि कैसे Weaviate के Python क्लाइंट का उपयोग करके एक क्लास बनाई जाए और फिर उसमें एक ऑब्जेक्ट जोड़ा जाए। आपको पहले pip के साथ Python क्लाइंट इंस्टॉल करना होगा।

!pip install -U weaviate-client

Weaviate के साथ काम करने के लिए आपके पास Weaviate का एक काम करने वाला इंस्टेंस होना चाहिए। इसे उपयोग करने के दो तरीके हैं: पहला, Weaviate के क्लाउड सेवा पर एक पूर्णतः प्रबंधित होस्टेड इंस्टेंस का उपयोग करके। वैकल्पिक रूप से आप Embedded Weaviate का उपयोग कर सकते हैं, जो आपके ऐप के बैकग्राउंड में इंस्टेंस चलाता है।

# For using embedded
import weaviate
from weaviate.embedded import EmbeddedOptions
import json
import os


client = weaviate.Client(
    embedded_options=EmbeddedOptions(),
    additional_headers = {
        "X-OpenAI-Api-Key": "YOUR_OPENAI_KEY"
    }
)

क्लास बनाना काफी सरल है:

class_obj = {
    "class": "Question",
    "vectorizer": "text2vec-openai",      
"moduleConfig": {
        "text2vec-openai": {},
        "generative-openai": {}
    }
}


client.schema.create_class(class_obj)

यदि वेक्टराइज़र को None पर सेट किया गया है तो आपको वेक्टरों को स्वयं सूची के रूप में प्रदान करना होगा।

अब हम बैच इम्पोर्ट प्रक्रिया के माध्यम से बनी हुई क्लास Question में ऑब्जेक्ट्स जोड़ सकते हैं। हम JSON प्रारूप में jeopardy Q&A का उपयोग करेंगे। यह कुछ इस प्रकार दिखता है:

डेटा स्रोत (क्रेडिट: Weaviate आधिकारिक)

डेटा स्रोत (क्रेडिट: Weaviate आधिकारिक)

# Load data
import requests
url = 'https://raw.githubusercontent.com/weaviate-tutorials/quickstart/main/data/jeopardy_tiny.json'
resp = requests.get(url)
data = json.loads(resp.text)


# Configure a batch process
with client.batch(
    batch_size=100
) as batch:
    # Batch import all Questions
    for i, d in enumerate(data):
        print(f"importing question: {i+1}")


        properties = {
            "answer": d["Answer"],
            "question": d["Question"],
            "category": d["Category"],
        }


        client.batch.add_data_object(
            properties,
            "Question",
        )

यह उदाहरण Weaviate की डॉक्यूमेंटेशन का उपयोग करके पुनरुत्पादित किया गया है।

Weaviate के सर्वोत्तम तरीके और सुझाव

आइए Weaviate का प्रभावी ढंग से उपयोग करने के लिए कुछ उपयोगी सुझावों पर गहराई से नज़र डालें। चाहे आप अपना स्कीमा डिज़ाइन कर रहे हों, डेटा आयात कर रहे हों, या क्वेरीज़ को ऑप्टिमाइज़ कर रहे हों, ये सर्वोत्तम तरीके आपको Weaviate की क्षमताओं का अधिकतम लाभ उठाने में मदद करेंगे।

स्कीमा डिज़ाइन

  • अपने स्कीमा को लचीला और स्केलेबल बनाएं। इससे आपको नई प्रॉपर्टीज़ जोड़ने और मौजूदा प्रॉपर्टीज़ बदलने की सुविधा मिलेगी, बिना स्कीमा को संशोधित किए।
  • प्रत्येक वस्तु और क्रिया के लिए अद्वितीय पहचानकर्ता का उपयोग करें। इससे डेटा को क्वेरी करना आसान होगा और डुप्लिकेट से बचा जा सकेगा।
  • वस्तुओं और क्रियाओं की प्रॉपर्टीज़ को परिभाषित करने के लिए सिमेंटिक प्रकारों का उपयोग करें। इससे डेटा को क्वेरी करना आसान होगा और पूरे स्कीमा में स्थिरता सुनिश्चित होगी।

डेटा आयात

  • डेटा को कुशलतापूर्वक जोड़ने के लिए बैच इम्पोर्ट सुविधा का उपयोग करें। इससे आप एक बार में बड़ी मात्रा में डेटा जोड़ पाएंगे और प्रदर्शन संबंधी समस्याओं से बचेंगे।
  • डेटा जोड़ने के लिए RESTful API का उपयोग करें। इससे आप डेटा आयात प्रक्रिया को स्वचालित कर सकेंगे और इसे अन्य टूल्स के साथ एकीकृत कर सकेंगे।
  • JSON या CSV जैसे समर्थित डेटा फ़ॉर्मैट का उपयोग करें। इससे डेटा सही ढंग से आयात होगा और त्रुटियों से बचा जा सकेगा।

क्वेरी ऑप्टिमाइज़ेशन

  • डेटा को क्वेरी करने के लिए Weaviate के GraphQL इंटरफ़ेस का उपयोग करें। इससे आप जटिल क्वेरीज़ चला पाएंगे और विशिष्ट मानदंडों के आधार पर डेटा को फ़िल्टर कर पाएंगे।
  • प्रत्येक क्वेरी द्वारा लौटाए गए डेटा की मात्रा को सीमित करने के लिए पेजिनेशन का उपयोग करें। इससे प्रदर्शन में सुधार होगा और सर्वर पर लोड कम होगा।
  • अक्सर एक्सेस किए जाने वाले डेटा को संग्रहीत करने के लिए कैशिंग का उपयोग करें। इससे प्रदर्शन में सुधार होगा और डेटा प्राप्त करने के लिए आवश्यक क्वेरीज़ की संख्या कम होगी।

ChromaDB डेटा विज्ञान समुदाय में एक और लोकप्रिय ओपन-सोर्स वेक्टर डेटाबेस है। Chroma DB के साथ आप टेक्स्ट दस्तावेज़ों को आसानी से प्रबंधित कर सकते हैं, टेक्स्ट को एम्बेडिंग्स में बदल सकते हैं और समानता खोज कर सकते हैं। यदि आप ChromaDB के बारे में अधिक जानना चाहते हैं, तो Chroma DB ट्यूटोरियल देखें।

निष्कर्ष

Weaviate ट्यूटोरियल, Weaviate—एक ओपन-सोर्स, क्लाउड-नेटिव, रियल-टाइम वेक्टर सर्च इंजन—को समझने और उपयोग करने के लिए एक व्यापक मार्गदर्शक प्रदान करता है। ब्लॉग में विषयों की एक विस्तृत श्रृंखला शामिल है, जैसे Weaviate क्या है और यह पारंपरिक डेटाबेस से कैसे भिन्न है, से लेकर इसे सेट अप करने और प्रभावी ढंग से उपयोग करने की बारीकियों तक।

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

यदि आप Weaviate के बारे में सीखना जारी रखना चाहते हैं, तो हमारा वेबिनार देखें: Vector Databases for Data Science with Weaviate in Python।

Moez Ali

लेखक

Moez Ali

डेटा साइंटिस्ट, PyCaret के संस्थापक और निर्माता

विषय