Spanner और Vertex AI के साथ समानता खोजने की सुविधा

1. परिचय

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

इस्तेमाल का उदाहरण

मान लें कि आप फ़ैशन के खुदरा दुकानदार हैं और आप डेटा साइंटिस्ट हैं. आप तेज़ी से बदलते ट्रेंड, प्रॉडक्ट से जुड़ी खोजों, और सुझावों को फ़ॉलो करने की कोशिश कर रही हैं. चुनौती यह है कि आपके पास सीमित संसाधन और डेटा का संग्रह है. इस ब्लॉग पोस्ट में बताया गया है कि कपड़ों से जुड़े डेटा के लिए, 'मिलते-जुलते सुझाव' वाले खोज के तरीके का इस्तेमाल करके, कपड़े कैसे इस्तेमाल करें.इसमें यह तरीका बताया गया है:

  1. स्पैनर से मिला डेटा
  2. ML.PREDICT का इस्तेमाल करके कपड़े के डेटा के लिए जनरेट किए गए वेक्टर और स्पैनर में सेव किए गए वेक्टर
  3. डेटाफ़्लो और वर्कफ़्लो जॉब का उपयोग करके वेक्टर खोज के साथ एकीकृत स्पैनर वेक्टर डेटा
  4. उपयोगकर्ता द्वारा दर्ज किए गए इनपुट के लिए समानता मिलान ढूंढने के लिए वेक्टर खोज निष्पादित की गई

हम उपयोगकर्ता के इनपुट टेक्स्ट के आधार पर कपड़े खोजने के लिए, एक डेमो वेब ऐप्लिकेशन बनाएंगे. इस ऐप्लिकेशन की मदद से उपयोगकर्ता, टेक्स्ट का ब्यौरा डालकर कपड़े खोज सकते हैं.

स्पैनर टू वेक्टर खोज इंडेक्स:

कपड़े की खोज का डेटा स्पैनर में सेव होता है. हम सीधे स्पैनर डेटा से ML.PREDICT कंस्ट्रक्शन में Vertex AI Embeddings एपीआई को शुरू करेंगे. इसके बाद, हम उन Dataflow और Workflow जॉब का फ़ायदा लेंगे जो इस डेटा (इन्वेंट्री और एम्बेड करना) को Vertex AI के वेक्टर सर्च में एक साथ अपलोड करती हैं और इंडेक्स को रीफ़्रेश करती हैं.

इंडेक्स पर उपयोगकर्ता क्वेरी चलाना:

जब कोई उपयोगकर्ता कपड़े का ब्यौरा डालता है, तो ऐप्लिकेशन टेक्स्ट एम्बेडिंग एपीआई का इस्तेमाल करके रीयल टाइम में एम्बेडिंग जनरेट करता है. इसके बाद, इसे वेक्टर सर्च एपीआई को इनपुट के तौर पर भेजा जाता है, ताकि इंडेक्स में प्रॉडक्ट की 10 काम की जानकारी ढूंढी जा सके और उससे जुड़ी इमेज दिखाई जा सके.

आर्किटेक्चर की खास जानकारी

स्पैनर-वेक्टर सर्च ऐप्लिकेशन का आर्किटेक्चर नीचे दिए गए 2-पार्ट्स डायग्राम में दिखाया गया है:

स्पैनर टू वेक्टर खोज इंडेक्स: a79932a25bee23a4.png

इंडेक्स पर उपयोगकर्ता की क्वेरी चलाने के लिए क्लाइंट ऐप्लिकेशन:

b2b4d5a5715bd4c4.pngआपको क्या बनाना होगा

स्पैनर टू वेक्टर इंडेक्स:

  • सोर्स डेटा के साथ-साथ उससे जुड़ी दूसरी चीज़ों को स्टोर और मैनेज करने के लिए स्पैनर डेटाबेस
  • एक वर्कफ़्लो जॉब जो Vertex AI वेक्टर सर्च डेटाबेस में डेटा (आईडी और एम्बेड करना) को बल्क में अपलोड करता है.
  • वेक्टर सर्च एपीआई, जिसका इस्तेमाल इंडेक्स से काम के प्रॉडक्ट की जानकारी ढूंढने के लिए किया जाता है.

इंडेक्स पर उपयोगकर्ता क्वेरी चलाना:

  • यह ऐसा वेब ऐप्लिकेशन होता है जो लोगों को कपड़ों के बारे में टेक्स्ट की जानकारी डालने की सुविधा देता है. यह डिप्लॉय किए गए इंडेक्स एंडपॉइंट का इस्तेमाल करके, समानता वाली खोज करता है और इनपुट में सबसे नज़दीकी कपड़े दिखाता है.

यह कैसे काम करता है

जब कोई उपयोगकर्ता कपड़े के बारे में टेक्स्ट जानकारी डालता है, तो वेब ऐप्लिकेशन वेक्टर सर्च एपीआई को ब्यौरा भेजता है. इसके बाद, वेक्टर Search API, इंडेक्स से प्रॉडक्ट की सबसे सही जानकारी ढूंढने के लिए, कपड़े की जानकारी एम्बेड करने की सुविधा का इस्तेमाल करता है. इसके बाद, उपयोगकर्ता को प्रॉडक्ट की जानकारी और उसकी इमेज दिखाई जाती हैं. सामान्य वर्कफ़्लो इस तरह है:

  1. स्पैनर में सेव किए गए डेटा के लिए एम्बेडिंग जनरेट करना.
  2. एम्बेडिंग को वेक्टर सर्च इंडेक्स में एक्सपोर्ट और अपलोड करें.
  3. निकटतम-पड़ोस की खोज करके समान आइटम के लिए वेक्टर खोज इंडेक्स में क्वेरी करें.

2. ज़रूरी शर्तें

  • Chrome या Firefox जैसा ब्राउज़र
  • आपके पास ऐसा Google Cloud प्रोजेक्ट होना चाहिए जिसमें बिलिंग की सुविधा चालू हो

शुरू करने से पहले

  1. Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, Google Cloud प्रोजेक्ट चुनें या बनाएं
  2. पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो. किसी प्रोजेक्ट के लिए बिलिंग की सुविधा चालू है या नहीं, यह देखने का तरीका जानें
  3. पक्का करें कि सभी ज़रूरी एपीआई (Cloud Spanner, Vertex AI, Google Cloud Storage) चालू हों
  4. आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud में चलने वाला एक कमांड-लाइन एनवायरमेंट है, जो gcloud के साथ पहले से लोड होता है. gcloud के लिए कमांड और इसके इस्तेमाल के बारे में जानने के लिए, दस्तावेज़ देखें. अगर आपका प्रोजेक्ट सेट नहीं है, तो इसे सेट करने के लिए नीचे दिए गए कमांड का इस्तेमाल करें:
gcloud config set project <YOUR_PROJECT_ID>
  1. शुरू करने के लिए, अपने चालू Google Cloud प्रोजेक्ट के साथ Cloud Spanner पेज पर जाएं

3. बैकएंड: स्पैनर डेटा सोर्स और एम्बेड करना

इस्तेमाल के इस उदाहरण में, स्पैनर डेटाबेस में कपड़ों की इन्वेंट्री होती है, जिसमें उनसे जुड़ी इमेज और जानकारी होती है. पक्का करें कि आपने टेक्स्ट की जानकारी के लिए एम्बेडिंग जनरेट की हो और उसे अपने स्पैनर डेटाबेस में ARRAY<float64> के तौर पर सेव किया हो.

  1. स्पैनर डेटा बनाना

"spanner-वर्टेक्स" नाम का इंस्टेंस बनाएं और "spanner-version-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);
  1. INSERT SQL का इस्तेमाल करके, टेबल में डेटा डालना

सैंपल डेटा के लिए, इंसर्ट करने की स्क्रिप्ट यहां उपलब्ध हैं.

  1. टेक्स्ट एम्बेड करने वाला मॉडल बनाएं

यह इसलिए ज़रूरी है, ताकि हम इनपुट में कॉन्टेंट को एम्बेड करने की सुविधा जनरेट कर सकें. यहां इसका डीडीएल दिया गया है:

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');
  1. सोर्स डेटा के लिए टेक्स्ट एम्बेड करना जनरेट करना

एम्बेड किए गए कॉन्टेंट को सेव करने और जनरेट की गई एम्बेडिंग को शामिल करने के लिए, एक टेबल बनाएं. असल दुनिया के डेटाबेस ऐप्लिकेशन में, दूसरे चरण तक स्पैनर में डेटा लोड करने पर, लेन-देन होता है. डिज़ाइन के सबसे सही तरीकों को बनाए रखने के लिए, मुझे लेन-देन से जुड़ी टेबल को सामान्य तरीके से रखना पसंद है. इसलिए, एम्बेड करने के लिए एक अलग टेबल बनाना.

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. वर्कफ़्लो जॉब: वेक्टर खोज में स्पैनर डेटा निर्यात

  1. Cloud Storage बकेट बनाना

स्पैनर से एम्बेड किए गए डेटा को GCS (जीसीएस) बकेट में एक ऐसे json फ़ॉर्मैट में सेव करने के लिए इसकी ज़रूरत होती है जिसे वेक्टर सर्च, इनपुट के तौर पर चाहता है. स्पैनर में अपने डेटा के क्षेत्र में ही एक बकेट बनाएं. अगर ज़रूरी हो, तो इसके अंदर एक फ़ोल्डर बनाएं, लेकिन उसमें मुख्य रूप से खाली.json नाम की एक खाली फ़ाइल बनाएं.

  1. क्लाउड वर्कफ़्लो सेट अप करें

Spanner से Vertex AI वेक्टर Search इंडेक्स में बैच एक्सपोर्ट सेट अप करने का तरीका:

खाली इंडेक्स बनाएं:

पक्का करें कि वेक्टर सर्च इंडेक्स उसी क्षेत्र में हो जिसमें आपका Cloud Storage बकेट और डेटा है. इंडेक्स मैनेज करें पेज पर जाकर, बैच अपडेट के लिए इंडेक्स बनाएं सेक्शन पर जाएं और कंसोल टैब में दिए गए, निर्देश के 11 चरणों का पालन करें. ContentDeltaUri में पास किए गए फ़ोल्डर में,blank.json नाम की एक खाली फ़ाइल बनाएं, क्योंकि इस फ़ाइल के बिना आप इंडेक्स नहीं बना पाएंगे. इससे इंडेक्स खाली हो जाएगा.

अगर आपकी साइट पहले से ही मौजूद है, तो इस चरण को छोड़ा जा सकता है. वर्कफ़्लो आपके इंडेक्स को ओवरराइट कर देगा.

ध्यान दें: एंडपॉइंट पर खाली इंडेक्स डिप्लॉय नहीं किया जा सकता. इसलिए, हम वेक्टर डेटा को Cloud Storage में एक्सपोर्ट करने के बाद, इसे एंडपॉइंट पर डिप्लॉय करने की प्रोसेस को बाद के चरण में टाल रहे हैं.

इस git रिपॉज़िटरी को क्लोन करें: git रिपॉज़िटरी को कई तरीकों से क्लोन किया जा सकता है. GitHub सीएलआई का इस्तेमाल करके, इस कमांड को चलाया जा सकता है. 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 भूमिकाएं दें जिनमें सेवा मैनेज करने के लिए कम से कम अनुमतियां हों. स्पैनर (एम्बेडिंग) से वेक्टर सर्च इंडेक्स में डेटा एक्सपोर्ट करने के लिए वर्कफ़्लो सेटअप करने के लिए इन भूमिकाओं की ज़रूरत होती है:

Cloud वर्कफ़्लो सेवा खाता:

डिफ़ॉल्ट रूप से, यह Compute Engine के डिफ़ॉल्ट सेवा खाते का इस्तेमाल करता है.

अगर मैन्युअल तरीके से कॉन्फ़िगर किए गए सेवा खाते का इस्तेमाल किया जाता है, तो आपको नीचे दी गई भूमिकाएं शामिल करनी होंगी:

dataflow जॉब को ट्रिगर करने के लिए: Dataflow एडमिन, Dataflow Worker.

डेटाफ़्लो वर्कर सर्विस खाते के नाम पर काम करने के लिए: सेवा खाते के उपयोगकर्ता.

लॉग लिखने के लिए: Logs Writer.

Vertex AI वेक्टर Search को रीबिल्ड को ट्रिगर करने के लिए: Vertex AI User.

Dataflow Worker सेवा खाता:

अगर मैन्युअल तरीके से कॉन्फ़िगर किए गए सेवा खाते का इस्तेमाल किया जाता है, तो आपको नीचे दी गई भूमिकाएं शामिल करनी होंगी:

डेटाफ़्लो को मैनेज करने के लिए: Dataflow एडमिन, Dataflow Worker. स्पैनर से डेटा पढ़ने के लिए: Cloud Spanner डेटाबेस रीडर पर जाएं. चुनी गई GCS कंटेनर रजिस्ट्री पर ऐक्सेस लिखें: GCS स्टोरेज बकेट का मालिक.

  1. क्लाउड वर्कफ़्लो को डिप्लॉय करना

वर्कफ़्लो 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 Console में वर्कफ़्लो पेज पर दिखना चाहिए.

ध्यान दें: Google Cloud Console से भी वर्कफ़्लो बनाया और डिप्लॉय किया जा सकता है. Cloud Console में दिए गए निर्देशों का पालन करें. वर्कफ़्लो की परिभाषा के लिए, Batch-export.yaml का कॉन्टेंट कॉपी करके चिपकाएं.

इसके बाद, वर्कफ़्लो एक्ज़ीक्यूट करें, ताकि डेटा एक्सपोर्ट करने की प्रोसेस शुरू हो सके.

  1. Cloud वर्कफ़्लो एक्ज़ीक्यूट करना

वर्कफ़्लो चलाने के लिए नीचे दिया गया कमांड चलाएं:

gcloud workflows execute vector-export-workflow --data="$(cat input.json)"

एक्ज़ीक्यूशन, Workflows में एक्ज़ीक्यूशन टैब में दिखना चाहिए. इससे आपका डेटा वेक्टर खोज डेटाबेस में लोड हो जाना चाहिए और उसे इंडेक्स कर लेना चाहिए.

ध्यान दें: 'लागू करें' बटन का इस्तेमाल करके भी कंसोल से एक्ज़ीक्यूट किया जा सकता है. निर्देशों का पालन करें और इनपुट के लिए, अपनी पसंद के मुताबिक बनाए गएinput.json के कॉन्टेंट को कॉपी करें और चिपकाएं.

5. वेक्टर खोज इंडेक्स नियोजित करें

एंडपॉइंट पर इंडेक्स को डिप्लॉय करना

इंडेक्स को डिप्लॉय करने के लिए, यह तरीका अपनाएं:

  1. वेक्टर खोज इंडेक्स पेज पर, आपको उस इंडेक्स के बगल में DEPLOY बटन दिखना चाहिए जिसे आपने पिछले सेक्शन के दूसरे चरण में बनाया है. इसके अलावा, इंडेक्स की जानकारी वाले पेज पर जाकर, 'खत्म करें' बटन पर क्लिक किया जा सकता है.
  2. ज़रूरी जानकारी दें और इंडेक्स को एंडपॉइंट पर डिप्लॉय करें.

इसके अलावा, इस notebook को किसी एंडपॉइंट पर डिप्लॉय करने के लिए भी देखा जा सकता है. notebook के डिप्लॉयमेंट वाले हिस्से पर जाएं. डिप्लॉय किए जाने के बाद, डिप्लॉय किए गए इंडेक्स आईडी और एंडपॉइंट यूआरएल पर ध्यान दें.

6. फ़्रंटएंड: वेक्टर खोज के लिए उपयोगकर्ता डेटा

चलिए, धीरे-धीरे इस्तेमाल किए जाने वाले UX के साथ एक आसान Python ऐप्लिकेशन बनाते हैं, ताकि ऐप्लिकेशन लागू करने की हमारी प्रोसेस की तुरंत जांच की जा सके: इस डेमो ऐप्लिकेशन को अपनी colab नोटबुक में लागू करने के लिए, लागू करने की प्रोसेस को यहां देखें.

  1. हम Embeddings API को कॉल करने के लिए और वेक्टर सर्च इंडेक्स एंडपॉइंट को शुरू करने के लिए, 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()
  1. हम Gradio की मदद से, उस एआई ऐप्लिकेशन का डेमो देंगे जिसे हम तेज़ी और आसानी से बना रहे हैं. इसके लिए, यूज़र इंटरफ़ेस का इस्तेमाल करना होगा. इस चरण को लागू करने से पहले, रनटाइम को रीस्टार्ट करें.
!pip install gradio
import gradio as gr
  1. उपयोगकर्ता के इनपुट पर वेब ऐप्लिकेशन से, Embeddings API को शुरू करने के बाद, हम टेक्स्ट एम्बेडिंग मॉडल का इस्तेमाल करेंगे: 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")

आपको नीचे दिए गए आउटपुट से मिलता-जुलता आउटपुट दिखेगा (कृपया ध्यान दें कि इमेज को लंबाई में काट दिया गया है, ताकि आपको पूरा वेक्टर रिस्पॉन्स न दिखे):

5d8355ec04dac1f9.png

  1. डिप्लॉय किए गए इंडेक्स आईडी और एंडपॉइंट आईडी की जानकारी देना
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')
  1. इंडेक्स एंडपॉइंट को कॉल करने के लिए, वेक्टर सर्च का तरीका तय करें. साथ ही, उपयोगकर्ता के इनपुट टेक्स्ट से मिलते-जुलते एम्बेडिंग रिस्पॉन्स के लिए, 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 तरीके को कॉल आउट भी किया जाएगा. आइए, अगले चरण में इस पर नज़र डालते हैं.

  1. स्पैनर रीड डेटा मेथड लागू करने का तरीका तय करें, जो पिछले चरण में दिए गए सबसे नज़दीकी पड़ोसी वेक्टर के आईडी से जुड़ी इमेज एक्सट्रैक्ट करने के लिए generate_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)

इसे चुने गए वेक्टर से जुड़ी इमेज के यूआरएल दिखाने चाहिए.

  1. अंत में, हम टुकड़ों को यूज़र इंटरफ़ेस में एक साथ रखते हैं और वेक्टर खोज प्रोसेस को ट्रिगर करते हैं
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)

आपको नीचे दिखाए गए तरीके के मुताबिक नतीजा दिखेगा:

8093b39fब1a9cc.png

इमेज: लिंक

खोज के नतीजे वाला वीडियो देखें: यहां.

7. व्यवस्थित करें

इस पोस्ट में इस्तेमाल किए गए संसाधनों के लिए, आपके Google Cloud खाते पर शुल्क न लगे, इसके लिए यह तरीका अपनाएं:

  1. Google Cloud Console में, संसाधन मैनेज करें पेज पर जाएं.
  2. प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे मिटाना है. इसके बाद, 'मिटाएं' पर क्लिक करें.
  3. डायलॉग बॉक्स में, प्रोजेक्ट आईडी लिखें और फिर प्रोजेक्ट मिटाने के लिए शट डाउन करें पर क्लिक करें.
  4. अगर आपको यह प्रोजेक्ट नहीं मिटाना है, तो इस प्रोजेक्ट के लिए अभी बनाए गए इंस्टेंस पर जाकर, स्पैनर इंस्टेंस को मिटाएं. इसके बाद, इंस्टेंस की खास जानकारी देने वाले पेज पर, सबसे ऊपर दाएं कोने में मौजूद, INSTANCE बटन मिटाएं पर क्लिक करें.
  5. आपके पास वेक्टर सर्च इंडेक्स पर जाने, एंडपॉइंट और इंडेक्स को डिप्लॉय करने, और इंडेक्स को मिटाने का विकल्प होता है.

8. नतीजा

बधाई हो! आपने स्पैनर - Vertex वेक्टर खोज को इसके ज़रिए लागू करने की प्रक्रिया सफलतापूर्वक पूरी कर ली है

  1. स्पैनर डेटा स्रोत बनाना और स्पैनर डेटाबेस से स्रोत वाले ऐप्लिकेशन के लिए एम्बेड करना.
  2. वेक्टर सर्च डेटाबेस इंडेक्स बनाया जा रहा है.
  3. Dataflow और Workflow जॉब का इस्तेमाल करके, स्पैनर से वेक्टर सर्च में वेक्टर डेटा इंटिग्रेट करना.
  4. एंडपॉइंट पर इंडेक्स डिप्लॉय किया जा रहा है.
  5. आखिर में, Vertex AI sdk के Python से चलने वाले उसे लागू करने के दौरान, उपयोगकर्ता के इनपुट पर वेक्टर सर्च को शुरू करना.

बेझिझक अपने इस्तेमाल के उदाहरण के साथ, लागू करने की प्रक्रिया को बढ़ाएं या मौजूदा इस्तेमाल के उदाहरण में नई सुविधाओं में सुधार करें. स्पैनर की मशीन लर्निंग क्षमताओं के बारे में यहां ज़्यादा जानें.