1. परिचय
डीप लर्निंग में हाल ही में हुई तरक्की की वजह से, टेक्स्ट और अन्य डेटा को इस तरह से दिखाया जा सकता है कि उसका असल मतलब समझ में आए. इससे खोज का एक नया तरीका सामने आया है. इसे वेक्टर सर्च कहा जाता है. इसमें, टेक्स्ट के वेक्टर के तौर पर दिखाए गए डेटा (इन्हें एम्बेडिंग कहा जाता है) का इस्तेमाल करके, ऐसे दस्तावेज़ ढूंढे जाते हैं जो उपयोगकर्ता की क्वेरी के हिसाब से सबसे काम के हों. वेक्टर सर्च को पारंपरिक खोज के मुकाबले ज़्यादा प्राथमिकता दी जाती है. जैसे, कपड़ों की खोज के लिए, वेक्टर सर्च का इस्तेमाल किया जाता है. ऐसा इसलिए, क्योंकि उपयोगकर्ता अक्सर प्रॉडक्ट या ब्रैंड के सटीक नामों के बजाय, आइटम की जानकारी, स्टाइल या कॉन्टेक्स्ट के हिसाब से खोज करते हैं. हम वेक्टर सिमिलैरिटी-मैचिंग करने के लिए, Cloud Spanner डेटाबेस को वेक्टर सर्च के साथ इंटिग्रेट कर सकते हैं. Spanner और वेक्टर सर्च का एक साथ इस्तेमाल करके, ग्राहक एक ऐसा इंटिग्रेशन बना सकते हैं जो Spanner की उपलब्धता, भरोसेमंद होने की क्षमता, और स्केल करने की क्षमता को Vertex AI वेक्टर सर्च की, मिलते-जुलते आइटम खोजने की ऐडवांस सुविधाओं के साथ जोड़ता है. यह खोज, वेक्टर सर्च इंडेक्स में मौजूद आइटम की एम्बेडिंग की तुलना करके की जाती है. साथ ही, सबसे मिलते-जुलते मैच दिखाए जाते हैं.
इस्तेमाल का उदाहरण
मान लें कि आप फ़ैशन के सामान बेचने वाली किसी कंपनी में डेटा साइंटिस्ट हैं. आपको तेज़ी से बदलते ट्रेंड, प्रॉडक्ट की खोजों, और सुझावों के हिसाब से काम करना है. इसमें चुनौती यह है कि आपके पास सीमित संसाधन और डेटा साइलो हैं. इस ब्लॉग पोस्ट में, कपड़ों के डेटा पर मिलते-जुलते आइटम खोजने के तरीके का इस्तेमाल करके, कपड़ों के सुझाव देने के इस्तेमाल के उदाहरण को लागू करने का तरीका बताया गया है.इसमें ये चरण शामिल हैं:
- Spanner से लिया गया डेटा
- एमएल.PREDICT का इस्तेमाल करके, कपड़ों के डेटा के लिए जनरेट किए गए वेक्टर और Spanner में सेव किए गए वेक्टर
- डेटाफ़्लो और वर्कफ़्लो जॉब का इस्तेमाल करके, वेक्टर सर्च के साथ इंटिग्रेट किया गया Spanner वेक्टर डेटा
- उपयोगकर्ता के डाले गए इनपुट के लिए, मिलते-जुलते आइटम खोजने के लिए, वेक्टर सर्च का इस्तेमाल करना
हम उपयोगकर्ता के डाले गए टेक्स्ट के आधार पर, कपड़ों की खोज करने के लिए एक डेमो वेब ऐप्लिकेशन बनाएंगे. इस ऐप्लिकेशन की मदद से, उपयोगकर्ता टेक्स्ट की जानकारी डालकर कपड़ों को खोज सकते हैं.
Spanner से वेक्टर सर्च इंडेक्स तक:
कपड़ों की खोज का डेटा, Spanner में सेव किया जाता है. हम ML.PREDICT कंस्ट्रक्ट में, Vertex AI एम्बेडिंग एपीआई को सीधे Spanner डेटा से कॉल करेंगे. इसके बाद, हम डेटाफ़्लो और वर्कफ़्लो जॉब का इस्तेमाल करेंगे. ये जॉब, इस डेटा (इन्वेंट्री और एम्बेडिंग) को Vertex AI के वेक्टर सर्च में बल्क में अपलोड करती हैं और इंडेक्स को रीफ़्रेश करती हैं.
इंडेक्स पर उपयोगकर्ता की क्वेरी चलाना:
जब कोई उपयोगकर्ता कपड़ों की जानकारी डालता है, तो ऐप्लिकेशन, टेक्स्ट एम्बेडिंग एपीआई का इस्तेमाल करके, रीयल टाइम में एम्बेडिंग जनरेट करता है. इसके बाद, इसे वेक्टर सर्च एपीआई को इनपुट के तौर पर भेजा जाता है, ताकि इंडेक्स से प्रॉडक्ट की 10 काम की जानकारी ढूंढी जा सके. साथ ही, इससे जुड़ी इमेज दिखाई जा सके.
आर्किटेक्चर की खास जानकारी
Spanner-वेक्टर सर्च ऐप्लिकेशन का आर्किटेक्चर, दो हिस्सों वाले इस डायग्राम में दिखाया गया है:
Spanner से वेक्टर सर्च इंडेक्स तक: 
इंडेक्स पर उपयोगकर्ता की क्वेरी चलाने के लिए क्लाइंट ऐप्लिकेशन:
आप क्या बनाएंगे
Spanner से वेक्टर इंडेक्स तक:
- सोर्स डेटा और उससे जुड़ी एम्बेडिंग को सेव और मैनेज करने के लिए, Spanner डेटाबेस
- एक वर्कफ़्लो जॉब, जो डेटा (आईडी और एम्बेडिंग) को Vertex AI वेक्टर सर्च डेटाबेस में बल्क में अपलोड करती है.
- एक वेक्टर सर्च एपीआई, जिसका इस्तेमाल इंडेक्स से प्रॉडक्ट की काम की जानकारी ढूंढने के लिए किया जाता है.
इंडेक्स पर उपयोगकर्ता की क्वेरी चलाना:
- एक वेब ऐप्लिकेशन, जिसकी मदद से उपयोगकर्ता कपड़ों की जानकारी वाला टेक्स्ट डाल सकते हैं. साथ ही, डिप्लॉय किए गए इंडेक्स एंडपॉइंट का इस्तेमाल करके, मिलते-जुलते आइटम खोजने की सुविधा का इस्तेमाल कर सकते हैं. इसके अलावा, यह ऐप्लिकेशन, इनपुट के हिसाब से सबसे मिलते-जुलते कपड़े दिखाता है.
यह कैसे काम करता है
जब कोई उपयोगकर्ता कपड़ों की जानकारी वाला टेक्स्ट डालता है, तो वेब ऐप्लिकेशन, उस जानकारी को वेक्टर सर्च एपीआई को भेजता है. इसके बाद, वेक्टर सर्च एपीआई, इंडेक्स से प्रॉडक्ट की सबसे काम की जानकारी ढूंढने के लिए, कपड़ों की जानकारी की एम्बेडिंग का इस्तेमाल करता है. इसके बाद, प्रॉडक्ट की जानकारी और उससे जुड़ी इमेज, उपयोगकर्ता को दिखाई जाती हैं. सामान्य वर्कफ़्लो इस तरह होता है:
- Spanner में सेव किए गए डेटा के लिए एम्बेडिंग जनरेट करना.
- एम्बेडिंग को एक्सपोर्ट और वेक्टर सर्च इंडेक्स में अपलोड करना.
- सबसे मिलते-जुलते आइटम खोजने के लिए, वेक्टर सर्च इंडेक्स को क्वेरी करना.
2. ज़रूरी शर्तें
शुरू करने से पहले
- Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, कोई Google Cloud प्रोजेक्ट चुनें या बनाएं
- पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो. यह देखने का तरीका जानें कि किसी प्रोजेक्ट के लिए बिलिंग की सुविधा चालू है या नहीं
- पक्का करें कि सभी ज़रूरी एपीआई (Cloud Spanner, Vertex AI, Google Cloud Storage) चालू हों
- आप Cloud Shell का इस्तेमाल करेंगे. यह Google Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है. इसमें gcloud पहले से लोड होता है. gcloud कमांड और उनके इस्तेमाल के बारे में जानने के लिए, दस्तावेज़ देखें. अगर आपका प्रोजेक्ट सेट नहीं है, तो इसे सेट करने के लिए यह कमांड इस्तेमाल करें:
gcloud config set project <YOUR_PROJECT_ID>
- शुरू करने के लिए, अपने ऐक्टिव Google Cloud प्रोजेक्ट के साथ Cloud Spanner पेज पर जाएं
3. बैकएंड: Spanner डेटा सोर्स और एम्बेडिंग बनाना
इस इस्तेमाल के उदाहरण में, Spanner डेटाबेस में कपड़ों की इन्वेंट्री सेव की जाती है. इसमें कपड़ों की इमेज और जानकारी भी शामिल होती है. पक्का करें कि आपने टेक्स्ट की जानकारी के लिए एम्बेडिंग जनरेट की हों और उन्हें अपने Spanner डेटाबेस में ARRAY<float64> के तौर पर सेव किया हो.
- Spanner डेटा बनाना
एक इंस्टेंस जिसका नाम "spanner-vertex" है और एक डेटाबेस जिसका नाम "spanner-vertex-embeddings" है, बनाएं. डीडीएल का इस्तेमाल करके, एक टेबल बनाएं:
CREATE TABLE
apparels ( id NUMERIC,
category STRING(100),
sub_category STRING(50),
uri STRING(200),
content STRING(2000),
embedding ARRAY<FLOAT64>
)
PRIMARY KEY
(id);
- INSERT SQL का इस्तेमाल करके, टेबल में डेटा डालना
सैंपल डेटा के लिए, स्क्रिप्ट यहां उपलब्ध हैं.
- टेक्स्ट एम्बेडिंग मॉडल बनाना
यह ज़रूरी है, ताकि हम इनपुट में मौजूद कॉन्टेंट के लिए एम्बेडिंग जनरेट कर सकें. इसके लिए डीडीएल यहां दिया गया है:
CREATE MODEL text_embeddings INPUT(content STRING(MAX))
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/abis-345004/locations/us-central1/publishers/google/models/textembedding-gecko');
- सोर्स डेटा के लिए टेक्स्ट एम्बेडिंग जनरेट करना
एम्बेडिंग सेव करने के लिए एक टेबल बनाएं और जनरेट की गई एम्बेडिंग डालें. असल दुनिया के डेटाबेस ऐप्लिकेशन में, Spanner में डेटा लोड करने की प्रोसेस, दूसरे चरण तक ट्रांज़ैक्शनल होगी. डिजाइन से जुड़ी सबसे सही तरीकों को बनाए रखने के लिए, मैं ट्रांज़ैक्शनल टेबल को नॉर्मलाइज़ रखना पसंद करता हूं. इसलिए, एम्बेडिंग के लिए एक अलग टेबल बनाना बेहतर है.
CREATE TABLE apparels_embeddings (id string(100), embedding ARRAY<FLOAT64>)
PRIMARY KEY (id);
INSERT INTO apparels_embeddings(id, embeddings)
SELECT CAST(id as string), embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT id, content from apparels)
) ;
अब बल्क कॉन्टेंट और एम्बेडिंग तैयार हैं. इसलिए, आइए वेक्टर सर्च इंडेक्स और एंडपॉइंट बनाएं, ताकि एम्बेडिंग सेव की जा सकें. इससे वेक्टर सर्च करने में मदद मिलेगी.
4. वर्कफ़्लो जॉब: Spanner डेटा को वेक्टर सर्च में एक्सपोर्ट करना
- Cloud Storage बकेट बनाना
यह ज़रूरी है, ताकि Spanner से एम्बेडिंग को GCS बकेट में json फ़ॉर्मैट में सेव किया जा सके. वेक्टर सर्च को इनपुट के तौर पर इसी फ़ॉर्मैट की ज़रूरत होती है. एक बकेट बनाएं जो Spanner में मौजूद आपके डेटा वाले ही इलाके में हो. ज़रूरत पड़ने पर, इसके अंदर एक फ़ोल्डर बनाएं. हालांकि, इसमें मुख्य तौर पर empty.json नाम की एक खाली फ़ाइल बनाएं.
- Cloud Workflow सेट अप करना
Spanner से Vertex AI वेक्टर सर्च इंडेक्स में बैच एक्सपोर्ट सेट अप करने के लिए:
एक खाली इंडेक्स बनाना:
पक्का करें कि वेक्टर सर्च इंडेक्स, आपके Cloud Storage बकेट और डेटा वाले ही इलाके में हो. इंडेक्स मैनेज करें पेज पर, बैच अपडेट के लिए इंडेक्स बनाएं सेक्शन में, कंसोल टैब में दिए गए निर्देशों के 11 चरणों का पालन करें. contentsDeltaUri को पास किए गए फ़ोल्डर में, empty.json नाम की एक खाली फ़ाइल बनाएं, क्योंकि इस फ़ाइल के बिना इंडेक्स नहीं बनाया जा सकेगा. इससे एक खाली इंडेक्स बनता है.
अगर आपके पास पहले से कोई इंडेक्स है, तो इस चरण को छोड़ा जा सकता है. वर्कफ़्लो, आपके इंडेक्स को ओवरराइट कर देगा.
ध्यान दें: किसी एंडपॉइंट पर खाली इंडेक्स डिप्लॉय नहीं किया जा सकता. इसलिए, हम इसे किसी एंडपॉइंट पर डिप्लॉय करने के चरण को बाद के चरण के लिए टाल रहे हैं. यह चरण, वेक्टर डेटा को Cloud Storage में एक्सपोर्ट करने के बाद किया जाएगा.
इस Git रिपॉज़िटरी को क्लोन करना: किसी Git रिपॉज़िटरी को क्लोन करने के कई तरीके हैं. इनमें से एक तरीका यह है कि GitHub CLI का इस्तेमाल करके, यह कमांड चलाया जाए. Cloud Shell टर्मिनल से, ये दो कमांड चलाएं:
gh repo clone cloudspannerecosystem/spanner-ai
cd spanner-ai/vertex-vector-search/workflows
इस फ़ोल्डर में दो फ़ाइलें हैं
batch-export.yaml: यह वर्कफ़्लो की परिभाषा है.sample-batch-input.json: यह वर्कफ़्लो के इनपुट पैरामीटर का एक सैंपल है.
सैंपल फ़ाइल से input.json सेट अप करना: सबसे पहले, सैंपल json को कॉपी करें.
cp sample-batch-input.json input.json
इसके बाद, अपने प्रोजेक्ट की जानकारी के साथ input.json में बदलाव करें. इस मामले में, आपका json ऐसा दिखना चाहिए:
{
"project_id": "<<YOUR_PROJECT>>",
"location": "<<us-central1>>",
"dataflow": {
"temp_location": "gs://<<YOUR_BUCKET>>/<<FOLDER_IF_ANY>>/workflow_temp"
},
"gcs": {
"output_folder": "gs://<<YOUR_BUCKET>>/<<FOLDER_IF_ANY>>/workflow_output"
},
"spanner": {
"instance_id": "spanner-vertex",
"database_id": "spanner-vertex-embeddings",
"table_name": "apparels_embeddings",
"columns_to_export": "embedding,id"
},
"vertex": {
"vector_search_index_id": "<<YOUR_INDEX_ID>>"
}
}
अनुमतियां सेट अप करना
हम प्रोडक्शन एनवायरमेंट के लिए, नया सेवा खाता बनाने और उसे एक या उससे ज़्यादा IAM भूमिकाएं देने का सुझाव देते हैं. इन भूमिकाओं में, सेवा को मैनेज करने के लिए ज़रूरी कम से कम अनुमतियां शामिल होनी चाहिए. Spanner (एम्बेडिंग) से वेक्टर सर्च इंडेक्स में डेटा एक्सपोर्ट करने के लिए, वर्कफ़्लो सेट अप करने के लिए इन भूमिकाओं की ज़रूरत होती है:
डिफ़ॉल्ट तौर पर, यह Compute Engine के डिफ़ॉल्ट सेवा खाते का इस्तेमाल करता है.
अगर आपने मैन्युअल तरीके से कॉन्फ़िगर किए गए सेवा खाते का इस्तेमाल किया है, तो आपको ये भूमिकाएं शामिल करनी होंगी:
डेटाफ़्लो जॉब को ट्रिगर करने के लिए: डेटाफ़्लो एडमिन, डेटाफ़्लो वर्कर.
डेटाफ़्लो वर्कर सेवा खाते से मिलता-जुलता खाता बनाने के लिए: सेवा खाते का उपयोगकर्ता.
लॉग लिखने के लिए: लॉग राइटर.
Vertex AI वेक्टर सर्च को फिर से बनाने की प्रोसेस को ट्रिगर करने के लिए: Vertex AI का उपयोगकर्ता.
अगर आपने मैन्युअल तरीके से कॉन्फ़िगर किए गए सेवा खाते का इस्तेमाल किया है, तो आपको ये भूमिकाएं शामिल करनी होंगी:
डेटाफ़्लो को मैनेज करने के लिए: डेटाफ़्लो एडमिन, डेटाफ़्लो वर्कर. Spanner से डेटा पढ़ने के लिए: Cloud Spanner डेटाबेस रीडर. चुने गए GCS कंटेनर रजिस्ट्री पर लिखने का ऐक्सेस पाने के लिए: GCS स्टोरेज बकेट का मालिक.
- Cloud Workflow डिप्लॉय करना
वर्कफ़्लो की yaml फ़ाइल को अपने Google Cloud प्रोजेक्ट में डिप्लॉय करें. आपके पास उस इलाके या जगह को कॉन्फ़िगर करने का विकल्प होता है जहां वर्कफ़्लो को चलाया जाएगा.
gcloud workflows deploy vector-export-workflow --source=batch-export.yaml --location="us-central1" [--service account=<service_account>]
or
gcloud workflows deploy vector-export-workflow --source=batch-export.yaml --location="us-central1"
वर्कफ़्लो अब Google Cloud कंसोल में, वर्कफ़्लो पेज पर दिखना चाहिए.
ध्यान दें: Google Cloud कंसोल से भी वर्कफ़्लो बनाया और डिप्लॉय किया जा सकता है. Cloud कंसोल में दिए गए निर्देशों का पालन करें. वर्कफ़्लो की परिभाषा के लिए, batch-export.yaml का कॉन्टेंट कॉपी करके चिपकाएं.
यह प्रोसेस पूरी होने के बाद, वर्कफ़्लो को एक्ज़ीक्यूट करें, ताकि डेटा एक्सपोर्ट शुरू हो सके.
- Cloud Workflow को एक्ज़ीक्यूट करना
वर्कफ़्लो को एक्ज़ीक्यूट करने के लिए, यह कमांड चलाएं:
gcloud workflows execute vector-export-workflow --data="$(cat input.json)"
एक्ज़ीक्यूशन, वर्कफ़्लो में मौजूद 'एक्ज़ीक्यूशन' टैब में दिखना चाहिए. इससे आपका डेटा, वेक्टर सर्च डेटाबेस में लोड हो जाना चाहिए और इंडेक्स हो जाना चाहिए.
ध्यान दें: कंसोल से भी, 'एक्ज़ीक्यूट करें' बटन का इस्तेमाल करके, वर्कफ़्लो को एक्ज़ीक्यूट किया जा सकता है. दिए गए निर्देशों का पालन करें. साथ ही, इनपुट के लिए, अपनी पसंद के मुताबिक बनाए गए input.json का कॉन्टेंट कॉपी करके चिपकाएं.
5. वेक्टर सर्च इंडेक्स डिप्लॉय करना
इंडेक्स को किसी एंडपॉइंट पर डिप्लॉय करना
इंडेक्स को डिप्लॉय करने के लिए, यहां दिया गया तरीका अपनाएं:
- वेक्टर सर्च इंडेक्स पेज पर, आपको पिछले सेक्शन के दूसरे चरण में बनाए गए इंडेक्स के बगल में, डिप्लॉय करें बटन दिखेगा. इसके अलावा, इंडेक्स की जानकारी वाले पेज पर जाकर, एंडपॉइंट पर डिप्लॉय करें बटन पर क्लिक किया जा सकता है.
- ज़रूरी जानकारी दें और इंडेक्स को किसी एंडपॉइंट पर डिप्लॉय करें.
इसके अलावा, इसे किसी एंडपॉइंट पर डिप्लॉय करने के लिए, इस नोटबुक को देखा जा सकता है. इसके लिए, नोटबुक के डिप्लॉय वाले हिस्से पर जाएं. डिप्लॉय होने के बाद, डिप्लॉय किए गए इंडेक्स आईडी और एंडपॉइंट यूआरएल को नोट करें.
6. फ़्रंटएंड: उपयोगकर्ता के डेटा को वेक्टर सर्च में भेजना
आइए, gradio की मदद से यूएक्स वाला एक आसान Python ऐप्लिकेशन बनाएं, ताकि हम अपने लागू किए गए तरीके को तुरंत टेस्ट कर सकें: इस डेमो ऐप्लिकेशन को अपनी Colab नोटबुक में लागू करने के लिए, यहां दिए गए तरीके को देखें.
- हम एम्बेडिंग एपीआई को कॉल करने के लिए, aiplatform python sdk का इस्तेमाल करेंगे. साथ ही, वेक्टर सर्च इंडेक्स एंडपॉइंट को कॉल करने के लिए भी इसका इस्तेमाल करेंगे.
# [START aiplatform_sdk_embedding]
!pip install google-cloud-aiplatform==1.35.0 --upgrade --quiet --user
import vertexai
vertexai.init(project=PROJECT_ID, location="us-central1")
from vertexai.language_models import TextEmbeddingModel
import sys
if "google.colab" in sys.modules:
# Define project information
PROJECT_ID = " " # Your project id
LOCATION = " " # Your location
# Authenticate user to Google Cloud
from google.colab import auth
auth.authenticate_user()
- हम gradio का इस्तेमाल करके, एआई ऐप्लिकेशन का डेमो देंगे. इसे यूज़र इंटरफ़ेस (यूआई) की मदद से, आसानी से और तेज़ी से बनाया जा सकता है. इस चरण को लागू करने से पहले, रनटाइम रीस्टार्ट करें.
!pip install gradio
import gradio as gr
- वेब ऐप्लिकेशन से, उपयोगकर्ता के इनपुट पर, एम्बेडिंग एपीआई को कॉल करें. हम टेक्स्ट एम्बेडिंग मॉडल: textembedding-gecko@latest का इस्तेमाल करेंगे
नीचे दिया गया तरीका, टेक्स्ट एम्बेडिंग मॉडल को कॉल करता है और उपयोगकर्ता के डाले गए टेक्स्ट के लिए, वेक्टर एम्बेडिंग दिखाता है:
def text_embedding(content) -> list:
"""Text embedding with a Large Language Model."""
model = TextEmbeddingModel.from_pretrained("textembedding-gecko@latest")
embeddings = model.get_embeddings(content)
for embedding in embeddings:
vector = embedding.values
#print(f"Length of Embedding Vector: {len(vector)}")
return vector
इसे टेस्ट करें
text_embedding("red shorts for girls")
आपको नीचे की तरह आउटपुट दिखेगा. कृपया ध्यान दें कि इमेज को ऊंचाई में क्रॉप किया गया है, इसलिए आपको पूरा वेक्टर रिस्पॉन्स नहीं दिख रहा है:

- डिप्लॉय किए गए इंडेक्स आईडी और एंडपॉइंट आईडी की जानकारी देना
from google.cloud import aiplatform
DEPLOYED_INDEX_ID = "spanner_vector1_1702366982123"
#Vector Search Endpoint
index_endpoint = aiplatform.MatchingEngineIndexEndpoint('projects/273845608377/locations/us-central1/indexEndpoints/2021628049526620160')
- इंडेक्स एंडपॉइंट को कॉल करने और उपयोगकर्ता के डाले गए टेक्स्ट के हिसाब से, एम्बेडिंग रिस्पॉन्स के लिए 10 सबसे मिलते-जुलते मैच के साथ नतीजे दिखाने के लिए, वेक्टर सर्च का तरीका तय करना.
वेक्टर सर्च के लिए, नीचे दिए गए तरीके की परिभाषा में, ध्यान दें कि 10 सबसे मिलते-जुलते वेक्टर की पहचान करने के लिए, find_neighbors तरीके को कॉल किया जाता है.
def vector_search(content) -> list:
result = text_embedding(content)
#call_vector_search_api(content)
index_endpoint = aiplatform.MatchingEngineIndexEndpoint('projects/273845608377/locations/us-central1/indexEndpoints/2021628049526620160')
# run query
response = index_endpoint.find_neighbors(
deployed_index_id = DEPLOYED_INDEX_ID,
queries = [result],
num_neighbors = 10
)
out = []
# show the results
for idx, neighbor in enumerate(response[0]):
print(f"{neighbor.distance:.2f} {spanner_read_data(neighbor.id)}")
out.append(f"{spanner_read_data(neighbor.id)}")
return out
आपको spanner_read_data तरीके को कॉल करने की जानकारी भी दिखेगी. इसके बारे में हम अगले चरण में जानेंगे.
- Spanner रीड डेटा तरीके को लागू करने की परिभाषा देना. यह परिभाषा, execute_sql तरीके को कॉल करती है, ताकि पिछले चरण से मिले सबसे मिलते-जुलते वेक्टर के आईडी के हिसाब से इमेज एक्सट्रैक्ट की जा सकें.
!pip install google-cloud-spanner==3.36.0
from google.cloud import spanner
instance_id = "spanner-vertex"
database_id = "spanner-vertex-embeddings"
projectId = PROJECT_ID
client = spanner.Client()
client.project = projectId
instance = client.instance(instance_id)
database = instance.database(database_id)
def spanner_read_data(id):
query = "SELECT uri FROM apparels where id = " + id
outputs = []
with database.snapshot() as snapshot:
results = snapshot.execute_sql(query)
for row in results:
#print(row)
#output = "ID: {}, CONTENT: {}, URI: {}".format(*row)
output = "{}".format(*row)
outputs.append(output)
return "\n".join(outputs)
इससे चुने गए वेक्टर के हिसाब से, इमेज के यूआरएल मिलने चाहिए.
- आखिर में, आइए इन सभी को यूज़र इंटरफ़ेस (यूआई) में एक साथ जोड़ें और वेक्टर सर्च की प्रोसेस को ट्रिगर करें
from PIL import Image
def call_search(query):
response = vector_search(query)
return response
input_text = gr.Textbox(label="Enter your query. Examples: Girls Tops White Casual, Green t-shirt girls, jeans shorts, denim skirt etc.")
output_texts = [gr.Image(label="") for i in range(10)]
demo = gr.Interface(fn=call_search, inputs=input_text, outputs=output_texts, live=True)
resp = demo.launch(share = True)
आपको नतीजे इस तरह दिखेंगे:

इमेज: लिंक
नतीजे का वीडियो यहां देखें: यहां.
7. व्यवस्थित करें
इस पोस्ट में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते पर शुल्क लगने से बचने के लिए, यह तरीका अपनाएं:
- Google Cloud कंसोल में, संसाधन मैनेज करें पेज पर जाएं.
- प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे मिटाना है. इसके बाद, मिटाएं पर क्लिक करें.
- डायलॉग में, प्रोजेक्ट आईडी डालें. इसके बाद, प्रोजेक्ट मिटाने के लिए, बंद करें पर क्लिक करें.
- अगर आपको प्रोजेक्ट नहीं मिटाना है, तो Spanner इंस्टेंस मिटाएं. इसके लिए, इस प्रोजेक्ट के लिए बनाए गए इंस्टेंस पर जाएं और इंस्टेंस की खास जानकारी वाले पेज के सबसे ऊपर दाएं कोने में मौजूद, इंस्टेंस मिटाएं बटन पर क्लिक करें.
- वेक्टर सर्च इंडेक्स पर जाकर, एंडपॉइंट और इंडेक्स को अनडिप्लॉय किया जा सकता है. साथ ही, इंडेक्स को मिटाया जा सकता है.
8. नतीजा
बधाई हो! आपने Spanner - Vertex वेक्टर सर्च को लागू करने की प्रोसेस पूरी कर ली है. इसके लिए, आपने ये काम किए:
- Spanner डेटाबेस से सोर्स किए गए ऐप्लिकेशन के लिए, Spanner डेटा सोर्स और एम्बेडिंग बनाना.
- वेक्टर सर्च डेटाबेस इंडेक्स बनाना.
- डेटाफ़्लो और वर्कफ़्लो जॉब का इस्तेमाल करके, Spanner से वेक्टर डेटा को वेक्टर सर्च में इंटिग्रेट करना.
- इंडेक्स को किसी एंडपॉइंट पर डिप्लॉय करना.
- आखिर में, Vertex AI sdk के Python-पावर्ड लागू करने के तरीके में, उपयोगकर्ता के इनपुट पर वेक्टर सर्च को कॉल करना.
आपके पास इस लागू करने के तरीके को अपने इस्तेमाल के उदाहरण के हिसाब से बढ़ाने या नई सुविधाओं के साथ मौजूदा इस्तेमाल के उदाहरण को बेहतर बनाने का विकल्प है. Spanner की मशीन लर्निंग की क्षमताओं के बारे में ज़्यादा जानने के लिए, यहां जाएं.