Spanner এবং Vertex AI এর সাথে মিল অনুসন্ধান

1. ভূমিকা

গভীর শিক্ষার সাম্প্রতিক অগ্রগতির ফলে পাঠ্য এবং অন্যান্য তথ্যকে এমনভাবে উপস্থাপন করা সম্ভব হয়েছে যা শব্দার্থিক অর্থ ধারণ করে। এর ফলে অনুসন্ধানের একটি নতুন পদ্ধতির উদ্ভব হয়েছে, যা ভেক্টর অনুসন্ধান নামে পরিচিত, যা ব্যবহারকারীর প্রশ্নের সাথে সবচেয়ে প্রাসঙ্গিক নথি খুঁজে পেতে পাঠ্যের ভেক্টর উপস্থাপনা (এম্বেডিং নামে পরিচিত) ব্যবহার করে। পোশাক অনুসন্ধানের মতো অ্যাপ্লিকেশনগুলির জন্য ঐতিহ্যবাহী অনুসন্ধানের চেয়ে ভেক্টর অনুসন্ধানকে অগ্রাধিকার দেওয়া হয়, যেখানে ব্যবহারকারীরা প্রায়শই সঠিক পণ্য বা ব্র্যান্ড নামের পরিবর্তে তাদের বর্ণনা, শৈলী বা প্রেক্ষাপট অনুসারে আইটেমগুলি অনুসন্ধান করেন। ভেক্টর সাদৃশ্য-মিলন সম্পাদনের জন্য আমরা ক্লাউড স্প্যানার ডাটাবেসকে ভেক্টর অনুসন্ধানের সাথে একীভূত করতে পারি। স্প্যানার এবং ভেক্টর অনুসন্ধান একসাথে ব্যবহার করে, গ্রাহকরা একটি শক্তিশালী ইন্টিগ্রেশন তৈরি করতে পারেন যা স্প্যানারের প্রাপ্যতা, নির্ভরযোগ্যতা এবং স্কেল এবং ভার্টেক্স এআই ভেক্টর অনুসন্ধানের উন্নত সাদৃশ্য অনুসন্ধান ক্ষমতাগুলিকে একত্রিত করে। এই অনুসন্ধানটি ভেক্টর অনুসন্ধান সূচকে আইটেমগুলির এম্বেডিং তুলনা করে এবং সবচেয়ে সাদৃশ্যপূর্ণ মিলগুলি ফিরিয়ে দেয়।

ব্যবহারের ধরণ

কল্পনা করুন আপনি একজন ফ্যাশন খুচরা বিক্রেতার একজন ডেটা বিজ্ঞানী যিনি দ্রুত পরিবর্তনশীল ট্রেন্ড, পণ্য অনুসন্ধান এবং সুপারিশগুলির সাথে তাল মিলিয়ে চলার চেষ্টা করছেন। চ্যালেঞ্জ হল আপনার সীমিত সম্পদ এবং ডেটা সাইলো রয়েছে। এই ব্লগ পোস্টটি পোশাকের ডেটাতে সাদৃশ্য অনুসন্ধান পদ্ধতি ব্যবহার করে পোশাক সুপারিশ ব্যবহারের ক্ষেত্রে কীভাবে বাস্তবায়ন করতে হয় তা দেখায়। নিম্নলিখিত পদক্ষেপগুলি কভার করা হয়েছে:

  1. স্প্যানার থেকে প্রাপ্ত তথ্য
  2. ML.PREDICT ব্যবহার করে পোশাকের ডেটার জন্য ভেক্টর তৈরি করা হয়েছে এবং স্প্যানারে সংরক্ষণ করা হয়েছে।
  3. ডেটাফ্লো এবং ওয়ার্কফ্লো জব ব্যবহার করে ভেক্টর অনুসন্ধানের সাথে স্প্যানার ভেক্টর ডেটা একত্রিত করা হয়েছে।
  4. ব্যবহারকারীর প্রবেশ করানো ইনপুটের সাথে মিল খুঁজে পেতে ভেক্টর অনুসন্ধান করা হয়েছে

আমরা ব্যবহারকারীর ইনপুট টেক্সটের উপর ভিত্তি করে পোশাক অনুসন্ধান করার জন্য একটি ডেমো ওয়েব অ্যাপ্লিকেশন তৈরি করব। অ্যাপ্লিকেশনটি ব্যবহারকারীদের একটি টেক্সট বিবরণ প্রবেশ করিয়ে পোশাক অনুসন্ধান করতে দেয়।

স্প্যানার থেকে ভেক্টর অনুসন্ধান সূচক:

পোশাক অনুসন্ধানের ডেটা স্প্যানারে সংরক্ষণ করা হয়। আমরা স্প্যানার ডেটা থেকে সরাসরি ML.PREDICT কনস্ট্রাক্টে Vertex AI Embeddings API ব্যবহার করব। তারপর আমরা Dataflow এবং Workflow জবগুলি ব্যবহার করব যা Vertex AI এর ভেক্টর অনুসন্ধানে এই ডেটা (ইনভেন্টরি এবং এম্বেডিং) বাল্ক আপলোড করে এবং সূচকটি রিফ্রেশ করে।

সূচকে ব্যবহারকারীর প্রশ্ন চালানো:

যখন একজন ব্যবহারকারী কোনও পোশাকের বিবরণ প্রবেশ করান, তখন অ্যাপটি টেক্সট এম্বেডিং API ব্যবহার করে রিয়েল টাইমে এম্বেডিং তৈরি করে। এরপর এটি ভেক্টর সার্চ API-তে ইনপুট হিসেবে পাঠানো হয় যাতে সূচক থেকে ১০টি প্রাসঙ্গিক পণ্যের বিবরণ পাওয়া যায় এবং সংশ্লিষ্ট চিত্রটি প্রদর্শিত হয়।

স্থাপত্যের সংক্ষিপ্ত বিবরণ

স্প্যানার- ভেক্টর অনুসন্ধান অ্যাপ্লিকেশনের স্থাপত্যটি নিম্নলিখিত 2-অংশের চিত্রে দেখানো হয়েছে:

স্প্যানার থেকে ভেক্টর অনুসন্ধান সূচক: a79932a25bee23a4.png সম্পর্কে

সূচকে ব্যবহারকারীর প্রশ্ন চালানোর জন্য ক্লায়েন্ট অ্যাপ:

b2b4d5a5715bd4c4.png সম্পর্কে তুমি কী তৈরি করবে

স্প্যানার থেকে ভেক্টর সূচক:

  • সোর্স ডেটা এবং সংশ্লিষ্ট এম্বেডিং সংরক্ষণ এবং পরিচালনা করার জন্য স্প্যানার ডাটাবেস
  • একটি ওয়ার্কফ্লো কাজ যা ভার্টেক্স এআই ভেক্টর অনুসন্ধান ডাটাবেসে প্রচুর পরিমাণে ডেটা (আইডি এবং এম্বেডিং) আপলোড করে।
  • একটি ভেক্টর অনুসন্ধান API যা সূচক থেকে প্রাসঙ্গিক পণ্যের বিবরণ খুঁজে পেতে ব্যবহৃত হয়।

সূচকে ব্যবহারকারীর প্রশ্ন চালানো:

  • একটি ওয়েব অ্যাপ্লিকেশন যা ব্যবহারকারীদের পোশাকের টেক্সট বর্ণনা প্রবেশ করতে দেয়, ডিপ্লয় করা সূচক শেষ বিন্দু ব্যবহার করে সাদৃশ্য অনুসন্ধান করে এবং ইনপুটে নিকটতম পোশাকগুলি ফেরত দেয়।

কিভাবে এটা কাজ করে

যখন একজন ব্যবহারকারী পোশাকের একটি টেক্সট বর্ণনা প্রবেশ করান, তখন ওয়েব অ্যাপ্লিকেশনটি বর্ণনাটি ভেক্টর অনুসন্ধান API-তে পাঠায়। ভেক্টর অনুসন্ধান API তারপর পোশাকের বিবরণের এম্বেডিং ব্যবহার করে সূচক থেকে সবচেয়ে প্রাসঙ্গিক পণ্য বিবরণ খুঁজে বের করে। পণ্যের বিবরণ এবং সংশ্লিষ্ট চিত্রগুলি ব্যবহারকারীর কাছে প্রদর্শিত হয়। সাধারণ কর্মপ্রবাহ নিম্নরূপ:

  1. স্প্যানারে সংরক্ষিত ডেটার জন্য এম্বেডিং তৈরি করুন
  2. একটি ভেক্টর অনুসন্ধান সূচীতে এম্বেডিং রপ্তানি এবং আপলোড করুন।
  3. নিকটতম-প্রতিবেশী অনুসন্ধান করে অনুরূপ আইটেমগুলির জন্য ভেক্টর অনুসন্ধান সূচকটি অনুসন্ধান করুন।

2. প্রয়োজনীয়তা

শুরু করার আগে

  1. গুগল ক্লাউড কনসোলে , প্রজেক্ট সিলেক্টর পৃষ্ঠায়, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন।
  2. আপনার ক্লাউড প্রোজেক্টের জন্য বিলিং সক্ষম আছে কিনা তা নিশ্চিত করুন। কোনও প্রোজেক্টে বিলিং সক্ষম আছে কিনা তা কীভাবে পরীক্ষা করবেন তা জানুন।
  3. নিশ্চিত করুন যে সমস্ত প্রয়োজনীয় API (Cloud Spanner, Vertex AI, Google Cloud Storage) সক্রিয় আছে।
  4. আপনি ক্লাউড শেল ব্যবহার করবেন, যা গুগল ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ যা gcloud এর সাথে আগে থেকে লোড করা থাকে। gcloud কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন দেখুন। যদি আপনার প্রকল্পটি সেট না করা থাকে, তাহলে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
  1. শুরু করতে আপনার সক্রিয় Google ক্লাউড প্রকল্পের সাথে ক্লাউড স্প্যানার পৃষ্ঠায় নেভিগেট করুন।

৩. ব্যাকএন্ড: আপনার স্প্যানার ডেটা সোর্স এবং এম্বেডিং তৈরি করুন

এই ব্যবহারের ক্ষেত্রে, স্প্যানার ডাটাবেসে সংশ্লিষ্ট ছবি এবং বর্ণনা সহ পোশাকের তালিকা থাকে। টেক্সট বর্ণনার জন্য এম্বেডিং তৈরি করুন এবং সেগুলি আপনার স্প্যানার ডাটাবেসে ARRAY<float64> হিসাবে সংরক্ষণ করুন।

  1. স্প্যানার ডেটা তৈরি করুন

"spanner-vertex" নামে একটি ইনস্ট্যান্স এবং "spanner-vertex-embeddings" নামে একটি ডাটাবেস তৈরি করুন। DDL ব্যবহার করে একটি টেবিল তৈরি করুন:

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. টেক্সট এম্বেডিং মডেল তৈরি করুন

ইনপুটের কন্টেন্টের জন্য এম্বেডিং তৈরি করতে এটি প্রয়োজন। এর জন্য DDL নিচে দেওয়া হল:

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)
) ;

এখন যেহেতু বাল্ক কন্টেন্ট এবং এম্বেডিং প্রস্তুত, আসুন আমরা একটি ভেক্টর সার্চ ইনডেক্স এবং এন্ডপয়েন্ট তৈরি করি যাতে এম্বেডিংগুলি সংরক্ষণ করা যায় যা ভেক্টর সার্চ সম্পাদনে সহায়তা করবে।

৪. ওয়ার্কফ্লো কাজ: স্প্যানার ডেটা ভেক্টর অনুসন্ধানে রপ্তানি করা

  1. একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন

স্প্যানার থেকে এম্বেডিংগুলিকে একটি GCS বাকেটে JSON ফর্ম্যাটে সংরক্ষণ করার জন্য এটি প্রয়োজন যা ভেক্টর সার্চ ইনপুট হিসাবে আশা করে। স্প্যানারে আপনার ডেটা যে অঞ্চলে রয়েছে সেই একই অঞ্চলে একটি বাকেট তৈরি করুন । প্রয়োজনে ভিতরে একটি ফোল্ডার তৈরি করুন, তবে মূলত এতে empty.json নামে একটি খালি ফাইল তৈরি করুন।

  1. ক্লাউড ওয়ার্কফ্লো সেট আপ করুন

স্প্যানার থেকে একটি ভার্টেক্স এআই ভেক্টর অনুসন্ধান সূচকে একটি ব্যাচ এক্সপোর্ট সেট আপ করতে:

একটি খালি সূচক তৈরি করুন :

নিশ্চিত করুন যে ভেক্টর সার্চ ইনডেক্সটি আপনার ক্লাউড স্টোরেজ বাকেট এবং ডেটার মতো একই অঞ্চলে রয়েছে। ম্যানেজ ইনডেক্স পৃষ্ঠায় "ব্যাচ আপডেটের জন্য একটি সূচক তৈরি করুন" বিভাগে কনসোল ট্যাবের অধীনে ১১টি ধাপের নির্দেশাবলী অনুসরণ করুন। contentsDeltaUri-তে পাঠানো ফোল্ডারে, empty.json নামে একটি খালি ফাইল তৈরি করুন কারণ এই ফাইলটি ছাড়া আপনি কোনও সূচক তৈরি করতে পারবেন না। এটি একটি খালি সূচক তৈরি করে।

যদি আপনার ইতিমধ্যেই একটি সূচী থাকে, তাহলে আপনি এই ধাপটি এড়িয়ে যেতে পারেন। কর্মপ্রবাহ আপনার সূচীকে ওভাররাইট করবে।

দ্রষ্টব্য : আপনি একটি এন্ডপয়েন্টে একটি খালি সূচক স্থাপন করতে পারবেন না। তাই আমরা ক্লাউড স্টোরেজে ভেক্টর ডেটা রপ্তানি করার পরে, এটিকে একটি এন্ডপয়েন্টে স্থাপনের ধাপটি পরবর্তী ধাপে স্থগিত করছি।

এই গিট রিপোজিটরিটি ক্লোন করুন : গিট রিপোজিটরি ক্লোন করার একাধিক উপায় আছে, একটি উপায় হল GitHub CLI ব্যবহার করে নিম্নলিখিত কমান্ডটি চালানো। ক্লাউড শেল টার্মিনাল থেকে নীচের 2টি কমান্ড চালান:

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 ভূমিকা প্রদানের সুপারিশ করছি। স্প্যানার (এম্বেডিং) থেকে ভেক্টর অনুসন্ধান সূচকে ডেটা রপ্তানি করার জন্য কর্মপ্রবাহ সেটআপ করার জন্য নিম্নলিখিত ভূমিকাগুলি প্রয়োজন:

ক্লাউড ওয়ার্কফ্লো সার্ভিস অ্যাকাউন্ট :

ডিফল্টরূপে এটি কম্পিউট ইঞ্জিন ডিফল্ট পরিষেবা অ্যাকাউন্ট ব্যবহার করে।

আপনি যদি ম্যানুয়ালি কনফিগার করা পরিষেবা অ্যাকাউন্ট ব্যবহার করেন, তাহলে আপনাকে নিম্নলিখিত ভূমিকাগুলি অন্তর্ভুক্ত করতে হবে:

ডেটাফ্লো কাজ শুরু করতে: ডেটাফ্লো অ্যাডমিন, ডেটাফ্লো ওয়ার্কার।

একটি ডেটাফ্লো কর্মী পরিষেবা অ্যাকাউন্টের ছদ্মবেশ ধারণ করতে: পরিষেবা অ্যাকাউন্ট ব্যবহারকারী।

লগ লেখার জন্য: লগ রাইটার।

ভার্টেক্স এআই ভেক্টর সার্চ পুনর্নির্মাণ ট্রিগার করতে: ভার্টেক্স এআই ব্যবহারকারী।

ডেটাফ্লো ওয়ার্কার সার্ভিস অ্যাকাউন্ট :

আপনি যদি ম্যানুয়ালি কনফিগার করা পরিষেবা অ্যাকাউন্ট ব্যবহার করেন, তাহলে আপনাকে নিম্নলিখিত ভূমিকাগুলি অন্তর্ভুক্ত করতে হবে:

ডেটাফ্লো পরিচালনা করতে: ডেটাফ্লো অ্যাডমিন , ডেটাফ্লো ওয়ার্কার। স্প্যানার থেকে ডেটা পড়ার জন্য: ক্লাউড স্প্যানার ডেটাবেস রিডার। নির্বাচিত GCS কন্টেইনার রেজিস্ট্রিতে লেখার অ্যাক্সেস: GCS স্টোরেজ বাকেট মালিক।

  1. ক্লাউড ওয়ার্কফ্লো স্থাপন করুন

আপনার Google ক্লাউড প্রোজেক্টে ওয়ার্কফ্লো yaml ফাইলটি স্থাপন করুন। আপনি সেই অঞ্চল বা অবস্থান কনফিগার করতে পারেন যেখানে ওয়ার্কফ্লো চালানো হবে।

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 কনসোল থেকেও ওয়ার্কফ্লো তৈরি এবং স্থাপন করতে পারেন। ক্লাউড কনসোলে প্রম্পটগুলি অনুসরণ করুন। ওয়ার্কফ্লো সংজ্ঞার জন্য, batch-export.yaml এর বিষয়বস্তু কপি এবং পেস্ট করুন।

এটি সম্পূর্ণ হয়ে গেলে, ওয়ার্কফ্লোটি কার্যকর করুন যাতে ডেটা রপ্তানি শুরু হয়।

  1. ক্লাউড ওয়ার্কফ্লো কার্যকর করুন

কর্মপ্রবাহ কার্যকর করতে নিম্নলিখিত কমান্ডটি চালান:

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

এক্সিকিউশনটি ওয়ার্কফ্লোতে এক্সিকিউশন ট্যাবে প্রদর্শিত হবে। এটি আপনার ডেটা ভেক্টর সার্চ ডাটাবেসে লোড করবে এবং এটিকে সূচী করবে।

দ্রষ্টব্য : আপনি Execute বোতাম ব্যবহার করে কনসোল থেকেও এক্সিকিউট করতে পারেন। প্রম্পটগুলি অনুসরণ করুন এবং ইনপুটের জন্য, আপনার কাস্টমাইজড input.json এর বিষয়বস্তু কপি এবং পেস্ট করুন।

৫. ভেক্টর অনুসন্ধান সূচক স্থাপন করুন

সূচকটিকে একটি শেষ বিন্দুতে স্থাপন করুন

সূচক স্থাপনের জন্য আপনি নীচের পদক্ষেপগুলি অনুসরণ করতে পারেন:

  1. ভেক্টর সার্চ ইনডেক্স পৃষ্ঠায়, আপনি পূর্ববর্তী বিভাগের ধাপ ২-এ তৈরি করা ইনডেক্সের পাশে একটি DEPLOY বোতাম দেখতে পাবেন। বিকল্পভাবে, আপনি ইনডেক্স তথ্য পৃষ্ঠায় নেভিগেট করতে পারেন এবং DEPLOY TO ENDPOINT বোতামে ক্লিক করতে পারেন।
  2. প্রয়োজনীয় তথ্য প্রদান করুন এবং সূচকটিকে একটি শেষ বিন্দুতে স্থাপন করুন।

অন্যথায়, আপনি এই নোটবুকটি একটি এন্ডপয়েন্টে স্থাপন করতে দেখতে পারেন (নোটবুকের ডিপ্লয় অংশে যান)। স্থাপন করা হয়ে গেলে, ডিপ্লয় করা ইনডেক্স আইডি এবং এন্ডপয়েন্ট ইউআরএলটি নোট করুন।

৬. ফ্রন্টএন্ড: ভেক্টর অনুসন্ধানে ব্যবহারকারীর ডেটা

আসুন আমরা গ্র্যাডিও চালিত UX সহ একটি সহজ পাইথন অ্যাপ্লিকেশন তৈরি করি যাতে আমাদের বাস্তবায়ন দ্রুত পরীক্ষা করা যায়: আপনার নিজস্ব কোল্যাব নোটবুকে এই ডেমো অ্যাপটি বাস্তবায়ন করতে আপনি এখানে বাস্তবায়নটি দেখতে পারেন।

  1. আমরা এম্বেডিং 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. আমরা যে AI অ্যাপ্লিকেশনটি তৈরি করছি তা দ্রুত এবং সহজে একটি ইউজার ইন্টারফেসের মাধ্যমে ডেমো করার জন্য গ্র্যাডিও ব্যবহার করব। এই ধাপটি বাস্তবায়নের আগে রানটাইম পুনরায় চালু করুন।
!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টি নিকটতম মিল সহ ফলাফল দেখান।

ভেক্টর অনুসন্ধানের জন্য নিচের পদ্ধতির সংজ্ঞায়, লক্ষ্য করুন যে find_neighbors পদ্ধতিটি 10টি নিকটতম ভেক্টর সনাক্ত করার জন্য ব্যবহার করা হয়েছে।

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. স্প্যানার রিড ডেটা পদ্ধতি বাস্তবায়ন সংজ্ঞায়িত করুন যা শেষ ধাপ থেকে ফিরে আসা নিকটতম প্রতিবেশী ভেক্টরের আইডির সাথে সম্পর্কিত চিত্রগুলি বের করার জন্য 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)

এটি নির্বাচিত ভেক্টরগুলির সাথে সম্পর্কিত চিত্রগুলির URL গুলি ফেরত দেবে।

  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)

আপনি নীচের চিত্রের মতো ফলাফল দেখতে পাবেন:

8093b39fbab1a9cc.png সম্পর্কে

ছবি: লিঙ্ক

ফলাফলের ভিডিওটি দেখুন: এখানে

৭. পরিষ্কার করা

এই পোস্টে ব্যবহৃত রিসোর্সের জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. গুগল ক্লাউড কনসোলে, রিসোর্স পরিচালনা পৃষ্ঠায় যান।
  2. প্রকল্পের তালিকায়, আপনি যে প্রকল্পটি মুছতে চান তা নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন।
  3. ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন, এবং তারপর প্রজেক্টটি মুছে ফেলতে Shut down এ ক্লিক করুন।
  4. যদি আপনি প্রকল্পটি মুছে ফেলতে না চান, তাহলে এই প্রকল্পের জন্য তৈরি করা ইনস্ট্যান্সে নেভিগেট করে স্প্যানার ইনস্ট্যান্সটি মুছে ফেলুন এবং ইনস্ট্যান্স ওভারভিউ পৃষ্ঠার উপরের ডানদিকে কোণায় DELETE INSTANCE বোতামে ক্লিক করুন।
  5. আপনি ভেক্টর অনুসন্ধান সূচকে নেভিগেট করতে পারেন, এন্ডপয়েন্ট এবং সূচকটি আনডিপ্লয় করতে পারেন এবং সূচকটি মুছে ফেলতে পারেন।

৮. উপসংহার

অভিনন্দন! আপনি স্প্যানার - ভার্টেক্স ভেক্টর অনুসন্ধান বাস্তবায়ন সফলভাবে সম্পন্ন করেছেন

  1. স্প্যানার ডাটাবেস থেকে সংগৃহীত অ্যাপ্লিকেশনগুলির জন্য স্প্যানার ডেটা সোর্স এবং এম্বেডিং তৈরি করা।
  2. ভেক্টর অনুসন্ধান ডাটাবেস সূচক তৈরি করা।
  3. ডেটাফ্লো এবং ওয়ার্কফ্লো জব ব্যবহার করে স্প্যানার থেকে ভেক্টর সার্চে ভেক্টর ডেটা একীভূত করা।
  4. একটি শেষ বিন্দুতে সূচক স্থাপন করা।
  5. অবশেষে Vertex AI sdk-এর একটি Python-চালিত বাস্তবায়নে ব্যবহারকারীর ইনপুটে ভেক্টর অনুসন্ধান ব্যবহার করা হচ্ছে।

আপনার নিজস্ব ব্যবহারের ক্ষেত্রে বাস্তবায়নটি সম্প্রসারিত করতে দ্বিধা করবেন না অথবা নতুন বৈশিষ্ট্য সহ বর্তমান ব্যবহারের ক্ষেত্রে উন্নতি করতে পারেন। স্প্যানারের মেশিন লার্নিং ক্ষমতা সম্পর্কে আরও জানুন এখানে