১. ভূমিকা
ডিপ লার্নিং-এর সাম্প্রতিক অগ্রগতি টেক্সট এবং অন্যান্য ডেটাকে এমনভাবে উপস্থাপন করা সম্ভব করেছে যা শব্দার্থিক অর্থ ধারণ করে। এর ফলে অনুসন্ধানের একটি নতুন পদ্ধতির উদ্ভব হয়েছে, যাকে ভেক্টর সার্চ বলা হয়, যা ব্যবহারকারীর অনুসন্ধানের জন্য সবচেয়ে প্রাসঙ্গিক ডকুমেন্ট খুঁজে বের করতে টেক্সটের ভেক্টর উপস্থাপনা (যা এমবেডিং নামে পরিচিত) ব্যবহার করে। পোশাক অনুসন্ধানের মতো অ্যাপ্লিকেশনগুলির জন্য প্রচলিত অনুসন্ধানের চেয়ে ভেক্টর সার্চ বেশি পছন্দের, যেখানে ব্যবহারকারীরা প্রায়শই সঠিক পণ্য বা ব্র্যান্ডের নামের পরিবর্তে সেগুলোর বিবরণ, স্টাইল বা প্রেক্ষাপট দিয়ে আইটেম খোঁজেন। আমরা ভেক্টর সিমিলারিটি-ম্যাচিং করার জন্য ভেক্টর সার্চের সাথে ক্লাউড স্প্যানার ডেটাবেসকে একীভূত করতে পারি। স্প্যানার এবং ভেক্টর সার্চ একসাথে ব্যবহার করে, গ্রাহকরা একটি শক্তিশালী ইন্টিগ্রেশন তৈরি করতে পারেন যা স্প্যানারের সহজলভ্যতা, নির্ভরযোগ্যতা ও পরিধি এবং ভার্টেক্স এআই ভেক্টর সার্চের উন্নত সিমিলারিটি সার্চ ক্ষমতাকে একত্রিত করে। এই অনুসন্ধানটি ভেক্টর সার্চ ইনডেক্সে থাকা আইটেমগুলির এমবেডিং তুলনা করে এবং সবচেয়ে সাদৃশ্যপূর্ণ ম্যাচগুলো ফেরত দিয়ে সম্পন্ন করা হয়।
ব্যবহারের ক্ষেত্র
ধরুন, আপনি একটি ফ্যাশন রিটেইলারের একজন ডেটা সায়েন্টিস্ট, যিনি দ্রুত পরিবর্তনশীল ট্রেন্ড, প্রোডাক্ট সার্চ এবং রিকমেন্ডেশনের সাথে তাল মিলিয়ে চলার চেষ্টা করছেন। চ্যালেঞ্জটি হলো আপনার কাছে সীমিত রিসোর্স এবং ডেটা সাইলো রয়েছে। এই ব্লগ পোস্টে দেখানো হয়েছে কীভাবে পোশাকের ডেটার উপর সিমিলারিটি সার্চ অ্যাপ্রোচ ব্যবহার করে একটি অ্যাপারেল রিকমেন্ডেশন ইউজ কেস বাস্তবায়ন করা যায়। নিম্নলিখিত ধাপগুলো এখানে আলোচনা করা হয়েছে:
- স্প্যানার থেকে প্রাপ্ত ডেটা
- ML.PREDICT ব্যবহার করে পোশাকের ডেটার জন্য ভেক্টর তৈরি করা হয়েছে এবং স্প্যানারে সংরক্ষণ করা হয়েছে।
- ডেটাফ্লো এবং ওয়ার্কফ্লো জব ব্যবহার করে ভেক্টর সার্চের সাথে স্প্যানার ভেক্টর ডেটা একীভূত করা হয়েছে
- ব্যবহারকারীর দেওয়া ইনপুটের সাথে সাদৃশ্য খুঁজে বের করার জন্য ভেক্টর অনুসন্ধান করা হয়েছে।
আমরা ব্যবহারকারীর দেওয়া টেক্সটের উপর ভিত্তি করে পোশাক অনুসন্ধানের জন্য একটি ডেমো ওয়েব অ্যাপ্লিকেশন তৈরি করব। অ্যাপ্লিকেশনটি ব্যবহারকারীদের একটি টেক্সট বিবরণ লিখে পোশাক অনুসন্ধান করার সুযোগ দেবে।
ভেক্টর অনুসন্ধান সূচকে স্প্যানার:
পোশাক অনুসন্ধানের ডেটা স্প্যানারে সংরক্ষিত থাকে। আমরা ML.PREDICT কনস্ট্রাক্টে সরাসরি স্প্যানার ডেটা থেকে ভার্টেক্স এআই এমবেডিংস এপিআই কল করব। তারপর আমরা ডেটাফ্লো এবং ওয়ার্কফ্লো জব ব্যবহার করব, যা এই ডেটা (ইনভেন্টরি এবং এমবেডিংস) ভার্টেক্স এআই-এর ভেক্টর সার্চে বাল্ক আপলোড করবে এবং ইনডেক্স রিফ্রেশ করবে।
ইনডেক্সে ব্যবহারকারীর কোয়েরি চালানো:
যখন কোনো ব্যবহারকারী পোশাকের বিবরণ দেন, তখন অ্যাপটি টেক্সট এমবেডিংস এপিআই ব্যবহার করে রিয়েল টাইমে এমবেডিংগুলো তৈরি করে। এরপর এই এমবেডিংগুলো ভেক্টর সার্চ এপিআই-তে ইনপুট হিসেবে পাঠানো হয়, যা ইনডেক্স থেকে ১০টি প্রাসঙ্গিক পণ্যের বিবরণ খুঁজে বের করে এবং সংশ্লিষ্ট ছবিটি প্রদর্শন করে।
স্থাপত্যের সংক্ষিপ্ত বিবরণ
স্প্যানার-ভেক্টর সার্চ অ্যাপ্লিকেশনটির স্থাপত্য নিম্নলিখিত ২-অংশ বিশিষ্ট ডায়াগ্রামে দেখানো হয়েছে:
ভেক্টর অনুসন্ধান সূচকে স্প্যানার: 
ইনডেক্সে ব্যবহারকারীর কোয়েরি চালানোর জন্য ক্লায়েন্ট অ্যাপ:
আপনি যা তৈরি করবেন
স্প্যানার থেকে ভেক্টর সূচক:
- উৎস ডেটা এবং সংশ্লিষ্ট এমবেডিংগুলি সংরক্ষণ ও পরিচালনা করার জন্য স্প্যানার ডাটাবেস
- একটি ওয়ার্কফ্লো জব যা ভার্টেক্স এআই ভেক্টর সার্চ ডাটাবেসে ডেটা (আইডি এবং এমবেডিং) বাল্ক আপলোড করে।
- একটি ভেক্টর সার্চ এপিআই যা ইনডেক্স থেকে প্রাসঙ্গিক পণ্যের বিবরণ খুঁজে বের করতে ব্যবহৃত হয়।
ইনডেক্সে ব্যবহারকারীর কোয়েরি চালানো:
- একটি ওয়েব অ্যাপ্লিকেশন যা ব্যবহারকারীদের পোশাকের টেক্সট বিবরণ প্রবেশ করাতে দেয়, ডেপ্লয় করা ইনডেক্স এন্ডপয়েন্ট ব্যবহার করে সাদৃশ্য অনুসন্ধান করে এবং ইনপুটের নিকটতম পোশাকগুলো ফেরত দেয়।
এটি কীভাবে কাজ করে
যখন কোনো ব্যবহারকারী পোশাকের টেক্সট বিবরণ দেন, তখন ওয়েব অ্যাপ্লিকেশনটি সেই বিবরণটি ভেক্টর সার্চ এপিআই-তে পাঠিয়ে দেয়। এরপর ভেক্টর সার্চ এপিআই পোশাকের বিবরণের এমবেডিংগুলো ব্যবহার করে ইনডেক্স থেকে সবচেয়ে প্রাসঙ্গিক পণ্যের বিবরণ খুঁজে বের করে। তারপর পণ্যের বিবরণ এবং সংশ্লিষ্ট ছবিগুলো ব্যবহারকারীকে দেখানো হয়। সাধারণ কার্যপ্রবাহটি নিম্নরূপ:
- স্প্যানারে সংরক্ষিত ডেটার জন্য এমবেডিং তৈরি করুন ।
- ভেক্টর সার্চ ইনডেক্সে এমবেডিংগুলো এক্সপোর্ট ও আপলোড করুন।
- নিকটতম-প্রতিবেশী অনুসন্ধান সম্পাদন করে ভেক্টর সার্চ ইনডেক্সে অনুরূপ আইটেমগুলির জন্য কোয়েরি করুন।
২. প্রয়োজনীয়তা
- ক্রোম বা ফায়ারফক্সের মতো একটি ব্রাউজার
- বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট
শুরু করার আগে
- গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন।
- আপনার ক্লাউড প্রোজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন। কোনো প্রোজেক্টে বিলিং চালু আছে কিনা তা কীভাবে পরীক্ষা করবেন তা জানুন।
- প্রয়োজনীয় সকল এপিআই (ক্লাউড স্প্যানার, ভার্টেক্স এআই, গুগল ক্লাউড স্টোরেজ) সক্রিয় আছে কিনা তা নিশ্চিত করুন।
- আপনি ক্লাউড শেল ব্যবহার করবেন, যা গুগল ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ এবং এটি gcloud-এর সাথে আগে থেকেই লোড করা থাকে। gcloud কমান্ড এবং এর ব্যবহারবিধি জানতে ডকুমেন্টেশন দেখুন। যদি আপনার প্রজেক্ট সেট করা না থাকে, তবে তা সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
- শুরু করার জন্য আপনার সক্রিয় গুগল ক্লাউড প্রজেক্ট সহ ক্লাউড স্প্যানার পৃষ্ঠায় যান।
৩. ব্যাকএন্ড: আপনার স্প্যানার ডেটা সোর্স এবং এমবেডিং তৈরি করুন
এই ব্যবহারের ক্ষেত্রে, স্প্যানার ডেটাবেসে পোশাকের ইনভেন্টরি, তার সংশ্লিষ্ট ছবি এবং বিবরণ সংরক্ষিত থাকে। নিশ্চিত করুন যে আপনি টেক্সট বিবরণের জন্য এমবেডিং তৈরি করেছেন এবং সেগুলোকে আপনার স্প্যানার ডেটাবেসে ARRAY<float64> হিসেবে সংরক্ষণ করেছেন।
- স্প্যানার ডেটা তৈরি করুন
"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);
- INSERT SQL ব্যবহার করে টেবিলে ডেটা প্রবেশ করান।
নমুনা ডেটার জন্য ইনসার্ট স্ক্রিপ্টগুলো এখানে পাওয়া যাবে।
- টেক্সট এমবেডিংস মডেল তৈরি করুন
ইনপুটের কন্টেন্টের জন্য এমবেডিং তৈরি করতে এটি প্রয়োজন। এর জন্য ডিডিএল (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');
- উৎস ডেটার জন্য টেক্সট এমবেডিং তৈরি করুন
এমবেডিংগুলো সংরক্ষণ করার জন্য একটি টেবিল তৈরি করুন এবং তৈরি করা এমবেডিংগুলো ইনসার্ট করুন। একটি বাস্তব ডাটাবেস অ্যাপ্লিকেশনে, ধাপ ২ পর্যন্ত স্প্যানারে ডেটা লোড করা ট্রানজ্যাকশনাল হবে। ডিজাইনের সর্বোত্তম অনুশীলনগুলো অক্ষুণ্ণ রাখার উদ্দেশ্যে, আমি ট্রানজ্যাকশনাল টেবিলগুলোকে নর্মালাইজড রাখতে পছন্দ করি, তাই এমবেডিংগুলোর জন্য একটি আলাদা টেবিল তৈরি করি।
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)
) ;
এখন যেহেতু বাল্ক কন্টেন্ট এবং এমবেডিংগুলো প্রস্তুত, চলুন একটি ভেক্টর সার্চ ইনডেক্স এবং এন্ডপয়েন্ট তৈরি করি, যেখানে ভেক্টর সার্চ সম্পাদনে সহায়ক এমবেডিংগুলো সংরক্ষণ করা হবে।
৪. ওয়ার্কফ্লো জব: স্প্যানার ডেটা ভেক্টর সার্চে এক্সপোর্ট করা
- একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন
ভেক্টর সার্চ ইনপুট হিসেবে যে json ফরম্যাটটি আশা করে, সেই ফরম্যাটে স্প্যানার থেকে এমবেডিংগুলো একটি GCS বাকেটে সংরক্ষণ করার জন্য এটি প্রয়োজন। স্প্যানারে আপনার ডেটার মতো একই অঞ্চলে একটি বাকেট তৈরি করুন । প্রয়োজনে এর ভিতরে একটি ফোল্ডার তৈরি করুন, তবে প্রধানত এর মধ্যে empty.json নামে একটি খালি ফাইল তৈরি করুন।
- ক্লাউড ওয়ার্কফ্লো সেট আপ করুন
স্প্যানার থেকে ভার্টেক্স এআই ভেক্টর সার্চ ইনডেক্সে ব্যাচ এক্সপোর্ট সেট আপ করতে:
একটি খালি ইনডেক্স তৈরি করুন :
নিশ্চিত করুন যে ভেক্টর সার্চ ইনডেক্সটি আপনার ক্লাউড স্টোরেজ বাকেট এবং ডেটার মতো একই অঞ্চলে রয়েছে। ম্যানেজ ইনডেক্সেস পেজের 'ক্রিয়েট অ্যান ইনডেক্স ফর ব্যাচ আপডেট' সেকশনের কনসোল ট্যাবের অধীনে থাকা ১১টি ধাপের নির্দেশনা অনুসরণ করুন। contentsDeltaUri-তে পাঠানো ফোল্ডারটিতে empty.json নামে একটি খালি ফাইল তৈরি করুন, কারণ এই ফাইলটি ছাড়া আপনি কোনো ইনডেক্স তৈরি করতে পারবেন না। এটি একটি খালি ইনডেক্স তৈরি করে।
আপনার যদি আগে থেকেই একটি ইনডেক্স থাকে, তাহলে আপনি এই ধাপটি বাদ দিতে পারেন। ওয়ার্কফ্লোটি আপনার ইনডেক্সটি ওভাররাইট করে দেবে।
দ্রষ্টব্য : আপনি কোনো এন্ডপয়েন্টে একটি খালি ইনডেক্স ডেপ্লয় করতে পারবেন না। তাই, ভেক্টর ডেটা ক্লাউড স্টোরেজে এক্সপোর্ট করার পর, আমরা এটিকে এন্ডপয়েন্টে ডেপ্লয় করার ধাপটি পরবর্তী কোনো ধাপের জন্য স্থগিত রাখছি।
এই গিট রিপোজিটরিটি ক্লোন করুন : একটি গিট রিপোজিটরি ক্লোন করার একাধিক উপায় আছে, তার মধ্যে একটি হলো GitHub CLI ব্যবহার করে নিম্নলিখিত কমান্ডটি চালানো। ক্লাউড শেল টার্মিনাল থেকে নিচের দুটি কমান্ড চালান:
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 স্টোরেজ বাকেট ওনার।
- ক্লাউড ওয়ার্কফ্লো স্থাপন করুন
আপনার গুগল ক্লাউড প্রজেক্টে ওয়ার্কফ্লো 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"
ওয়ার্কফ্লোটি এখন গুগল ক্লাউড কনসোলের ওয়ার্কফ্লো পেজে দেখা যাবে।
দ্রষ্টব্য : আপনি গুগল ক্লাউড কনসোল থেকেও ওয়ার্কফ্লো তৈরি এবং স্থাপন করতে পারেন। ক্লাউড কনসোলের নির্দেশাবলী অনুসরণ করুন। ওয়ার্কফ্লো সংজ্ঞার জন্য, batch-export.yaml-এর বিষয়বস্তু কপি করে পেস্ট করুন।
এটি সম্পন্ন হয়ে গেলে, ওয়ার্কফ্লোটি চালান যাতে ডেটা এক্সপোর্ট শুরু হয়।
- ক্লাউড ওয়ার্কফ্লোটি কার্যকর করুন
ওয়ার্কফ্লোটি কার্যকর করতে নিম্নলিখিত কমান্ডটি চালান:
gcloud workflows execute vector-export-workflow --data="$(cat input.json)"
এক্সিকিউশনটি ওয়ার্কফ্লো-এর এক্সিকিউশন ট্যাবে দেখা যাবে। এটি আপনার ডেটা ভেক্টর সার্চ ডেটাবেসে লোড করে ইনডেক্স করবে।
দ্রষ্টব্য : আপনি কনসোল থেকে 'Execute' বাটন ব্যবহার করেও এটি চালাতে পারেন। নির্দেশাবলী অনুসরণ করুন এবং ইনপুটের জন্য, আপনার কাস্টমাইজ করা input.json ফাইলের বিষয়বস্তু কপি করে পেস্ট করুন।
৫. ভেক্টর সার্চ ইনডেক্স স্থাপন করুন
ইনডেক্সটি একটি এন্ডপয়েন্টে স্থাপন করুন
ইনডেক্সটি ডেপ্লয় করতে আপনি নিচের ধাপগুলো অনুসরণ করতে পারেন:
- ভেক্টর সার্চ ইনডেক্স পেজে, পূর্ববর্তী বিভাগের ২ নং ধাপে আপনার তৈরি করা ইনডেক্সটির পাশে একটি DEPLOY বাটন দেখতে পাবেন। বিকল্পভাবে, আপনি ইনডেক্স ইনফো পেজে গিয়ে DEPLOY TO ENDPOINT বাটনটিতে ক্লিক করতে পারেন।
- প্রয়োজনীয় তথ্য সরবরাহ করুন এবং একটি এন্ডপয়েন্টে ইনডেক্সটি ডেপ্লয় করুন।
বিকল্পভাবে, এটিকে একটি এন্ডপয়েন্টে ডেপ্লয় করার জন্য আপনি এই নোটবুকটি দেখতে পারেন (নোটবুকটির ডেপ্লয় অংশে চলে যান)। ডেপ্লয় করা হয়ে গেলে, ডেপ্লয় করা ইনডেক্স আইডি এবং এন্ডপয়েন্ট ইউআরএলটি লিখে রাখুন।
৬. ফ্রন্টএন্ড: ব্যবহারকারীর ডেটা থেকে ভেক্টর সার্চ
আমাদের ইমপ্লিমেন্টেশনটি দ্রুত পরীক্ষা করার জন্য চলুন গ্র্যাডিও চালিত ইউএক্স সহ একটি সাধারণ পাইথন অ্যাপ্লিকেশন তৈরি করি: আপনার নিজের কোলাব নোটবুকে এই ডেমো অ্যাপটি ইমপ্লিমেন্ট করতে আপনি এখান থেকে ইমপ্লিমেন্টেশনটি দেখতে পারেন।
- আমরা এমবেডিংস এপিআই কল করতে এবং ভেক্টর সার্চ ইনডেক্স এন্ডপয়েন্ট চালু করতে এআইপ্ল্যাটফর্ম পাইথন এসডিকে ব্যবহার করব।
# [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()
- আমরা যে এআই অ্যাপ্লিকেশনটি তৈরি করছি, তা একটি ইউজার ইন্টারফেসের মাধ্যমে দ্রুত ও সহজে প্রদর্শন করতে গ্রেডিও ব্যবহার করব। এই ধাপটি বাস্তবায়নের আগে রানটাইম রিস্টার্ট করুন।
!pip install gradio
import gradio as gr
- ওয়েব অ্যাপ থেকে ব্যবহারকারীর ইনপুটের ভিত্তিতে এমবেডিংস এপিআই (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")
আপনি নীচের মতো একটি আউটপুট দেখতে পাবেন (অনুগ্রহ করে মনে রাখবেন যে ছবিটি উচ্চতায় ক্রপ করা হয়েছে, তাই আপনি সম্পূর্ণ ভেক্টর প্রতিক্রিয়াটি দেখতে পাচ্ছেন না):

- ডেপ্লয় করা ইনডেক্স আইডি এবং এন্ডপয়েন্ট আইডি ঘোষণা করুন।
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')
- ব্যবহারকারীর ইনপুট করা টেক্সটের সাথে সঙ্গতিপূর্ণ এমবেডিং রেসপন্সের জন্য নিকটতম ১০টি মিলসহ ফলাফল দেখানোর জন্য ইনডেক্স এন্ডপয়েন্টকে কল করতে ভেক্টর সার্চ মেথডটি সংজ্ঞায়িত করুন।
ভেক্টর সার্চের জন্য নিচের মেথড ডেফিনিশনে লক্ষ্য করুন যে, নিকটতম ১০টি ভেক্টর শনাক্ত করার জন্য 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 মেথডটির কলটিও লক্ষ্য করবেন। চলুন, পরবর্তী ধাপে এটি দেখা যাক।
- স্প্যানার রিড ডেটা মেথডের ইমপ্লিমেন্টেশনটি সংজ্ঞায়িত করুন, যা শেষ ধাপ থেকে প্রাপ্ত নিকটতম প্রতিবেশী ভেক্টরগুলোর আইডি অনুযায়ী ছবিগুলো বের করার জন্য 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)
আপনি নিচে দেখানো ফলাফলটি দেখতে পাবেন:

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