AlloyDB-তে মাল্টিমোডাল এম্বেডিং

1. ভূমিকা

bb67830f66d83d3f.png সম্পর্কে

এই কোডল্যাবটি মাল্টিমোডাল এম্বেডিং ব্যবহার করে শব্দার্থিক অনুসন্ধানের জন্য AlloyDB স্থাপন এবং AI ইন্টিগ্রেশন ব্যবহার করার জন্য একটি নির্দেশিকা প্রদান করে। এই ল্যাবটি AlloyDB AI বৈশিষ্ট্যগুলির জন্য নিবেদিত একটি ল্যাব সংগ্রহের অংশ। আপনি ডকুমেন্টেশনে AlloyDB AI পৃষ্ঠায় আরও পড়তে পারেন।

পূর্বশর্ত

  • গুগল ক্লাউড, কনসোল সম্পর্কে প্রাথমিক ধারণা
  • কমান্ড লাইন ইন্টারফেস এবং ক্লাউড শেলের মৌলিক দক্ষতা।

তুমি কি শিখবে

  • পোস্টগ্রেসের জন্য অ্যালয়ডিবি কীভাবে স্থাপন করবেন
  • AlloyDB স্টুডিও কীভাবে ব্যবহার করবেন
  • মাল্টিমোডাল ভেক্টর অনুসন্ধান কীভাবে ব্যবহার করবেন
  • AlloyDB AI অপারেটরগুলিকে কীভাবে সক্ষম করবেন
  • মাল্টিমোডাল অনুসন্ধানের জন্য বিভিন্ন AlloyDB AI অপারেটর কীভাবে ব্যবহার করবেন
  • টেক্সট এবং ছবির অনুসন্ধান ফলাফল একত্রিত করতে AlloyDB AI কীভাবে ব্যবহার করবেন

তোমার যা লাগবে

  • একটি গুগল ক্লাউড অ্যাকাউন্ট এবং গুগল ক্লাউড প্রকল্প
  • ক্রোমের মতো একটি ওয়েব ব্রাউজার যা গুগল ক্লাউড কনসোল এবং ক্লাউড শেল সমর্থন করে

2. সেটআপ এবং প্রয়োজনীয়তা

প্রকল্প সেটআপ

  1. গুগল ক্লাউড কনসোলে সাইন-ইন করুন। যদি আপনার ইতিমধ্যেই একটি জিমেইল বা গুগল ওয়ার্কস্পেস অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

কর্মক্ষেত্র বা স্কুল অ্যাকাউন্টের পরিবর্তে ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন।

  1. একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি পুনরায় ব্যবহার করুন। গুগল ক্লাউড কনসোলে একটি নতুন প্রকল্প তৈরি করতে, হেডারে, একটি প্রকল্প নির্বাচন করুন বোতামে ক্লিক করুন যা একটি পপআপ উইন্ডো খুলবে।

295004821bab6a87.png সম্পর্কে

"একটি প্রকল্প নির্বাচন করুন" উইন্ডোতে "নতুন প্রকল্প" বোতামটি টিপুন যা নতুন প্রকল্পের জন্য একটি ডায়ালগ বক্স খুলবে।

37d264871000675d.png সম্পর্কে

ডায়ালগ বক্সে আপনার পছন্দের প্রকল্পের নাম লিখুন এবং অবস্থানটি নির্বাচন করুন।

96d86d3d5655cdbe.png সম্পর্কে

  • এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রজেক্টের নামটি প্রদর্শন করা হবে। প্রোজেক্টের নামটি গুগল এপিআই দ্বারা ব্যবহৃত হয় না এবং এটি যেকোনো সময় পরিবর্তন করা যেতে পারে।
  • সমস্ত Google ক্লাউড প্রোজেক্টে প্রোজেক্ট আইডি অনন্য এবং অপরিবর্তনীয় (সেট করার পরে এটি পরিবর্তন করা যাবে না)। Google ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য আইডি তৈরি করে, তবে আপনি এটি কাস্টমাইজ করতে পারেন। যদি আপনি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি র‍্যান্ডম আইডি তৈরি করতে পারেন অথবা এর উপলব্ধতা পরীক্ষা করার জন্য আপনার নিজস্ব আইডি প্রদান করতে পারেন। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রোজেক্ট আইডি উল্লেখ করতে হবে, যা সাধারণত PROJECT_ID প্লেসহোল্ডার দিয়ে চিহ্নিত করা হয়।
  • আপনার তথ্যের জন্য, তৃতীয় একটি মান আছে, একটি Project Number , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।

বিলিং সক্ষম করুন

বিলিং সক্ষম করার জন্য, আপনার কাছে দুটি বিকল্প আছে। আপনি হয় আপনার ব্যক্তিগত বিলিং অ্যাকাউন্ট ব্যবহার করতে পারেন অথবা নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করে ক্রেডিট রিডিম করতে পারেন।

$৫ গুগল ক্লাউড ক্রেডিট রিডিম করুন (ঐচ্ছিক)

এই কর্মশালাটি পরিচালনা করার জন্য, আপনার কিছু ক্রেডিট সহ একটি বিলিং অ্যাকাউন্ট প্রয়োজন। আপনি যদি নিজের বিলিং ব্যবহার করার পরিকল্পনা করেন, তাহলে আপনি এই ধাপটি এড়িয়ে যেতে পারেন।

  1. এই লিঙ্কে ক্লিক করুন এবং একটি ব্যক্তিগত গুগল অ্যাকাউন্ট দিয়ে সাইন ইন করুন।
  2. তুমি এরকম কিছু দেখতে পাবে:

f54628965f465486.png সম্পর্কে

  1. আপনার ক্রেডিট অ্যাক্সেস করতে এখানে ক্লিক করুন বোতামটি ক্লিক করুন। এটি আপনাকে আপনার বিলিং প্রোফাইল সেট আপ করার জন্য একটি পৃষ্ঠায় নিয়ে যাবে। যদি আপনাকে একটি বিনামূল্যে ট্রায়াল সাইন আপ স্ক্রিন দেখানো হয়, তাহলে বাতিল করুন ক্লিক করুন এবং বিলিং লিঙ্ক করতে থাকুন।

20e88842cf2a732e.png সম্পর্কে

  1. আপনি এখন একটি Google Cloud Platform ট্রায়াল বিলিং অ্যাকাউন্টের সাথে সংযুক্ত আছেন কিনা তা নিশ্চিত করুন-এ ক্লিক করুন।

cdc87f1c57777951.png সম্পর্কে

একটি ব্যক্তিগত বিলিং অ্যাকাউন্ট সেট আপ করুন

আপনি যদি গুগল ক্লাউড ক্রেডিট ব্যবহার করে বিলিং সেট আপ করেন, তাহলে আপনি এই ধাপটি এড়িয়ে যেতে পারেন।

একটি ব্যক্তিগত বিলিং অ্যাকাউন্ট সেট আপ করতে, ক্লাউড কনসোলে বিলিং সক্ষম করতে এখানে যান

কিছু নোট:

  • এই ল্যাবটি সম্পূর্ণ করতে ক্লাউড রিসোর্সে $3 USD এর কম খরচ হবে।
  • আরও চার্জ এড়াতে আপনি এই ল্যাবের শেষে রিসোর্স মুছে ফেলার ধাপগুলি অনুসরণ করতে পারেন।
  • নতুন ব্যবহারকারীরা $300 USD বিনামূল্যে ট্রায়ালের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।

গুগল ক্লাউড কনসোল থেকে, উপরের ডানদিকের টুলবারে ক্লাউড শেল আইকনে ক্লিক করুন:

ক্লাউড শেল সক্রিয় করুন

অথবা আপনি G তারপর S টিপতে পারেন। আপনি যদি Google Cloud Console-এর মধ্যে থাকেন অথবা এই লিঙ্কটি ব্যবহার করেন তবে এই ক্রমটি Cloud Shell সক্রিয় করবে।

পরিবেশের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। এটি সম্পন্ন হলে, আপনি এরকম কিছু দেখতে পাবেন:

গুগল ক্লাউড শেল টার্মিনালের স্ক্রিনশট যা দেখায় যে পরিবেশটি সংযুক্ত হয়েছে

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

৩. শুরু করার আগে

API সক্ষম করুন

AlloyDB , Compute Engine , Networking পরিষেবা এবং Vertex AI ব্যবহার করার জন্য, আপনার Google Cloud Project-এ তাদের নিজ নিজ API গুলি সক্ষম করতে হবে।

টার্মিনালে ক্লাউড শেলের ভিতরে, নিশ্চিত করুন যে আপনার প্রোজেক্ট আইডি সেটআপ করা আছে:

gcloud config set project [YOUR-PROJECT-ID]

পরিবেশ পরিবর্তনশীল PROJECT_ID সেট করুন:

PROJECT_ID=$(gcloud config get-value project)

সমস্ত প্রয়োজনীয় পরিষেবা সক্ষম করুন:

gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       aiplatform.googleapis.com \
                       discoveryengine.googleapis.com \
                       secretmanager.googleapis.com

প্রত্যাশিত আউটপুট

student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417
Updated property [core/project].
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$ 
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       aiplatform.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.

API গুলির সাথে পরিচয় করিয়ে দেওয়া হচ্ছে

  • AlloyDB API ( alloydb.googleapis.com ) আপনাকে PostgreSQL ক্লাস্টারের জন্য AlloyDB তৈরি, পরিচালনা এবং স্কেল করার অনুমতি দেয়। এটি একটি সম্পূর্ণরূপে পরিচালিত, PostgreSQL-সামঞ্জস্যপূর্ণ ডাটাবেস পরিষেবা প্রদান করে যা এন্টারপ্রাইজ লেনদেন এবং বিশ্লেষণাত্মক কাজের চাপের জন্য ডিজাইন করা হয়েছে।
  • কম্পিউট ইঞ্জিন API ( compute.googleapis.com ) আপনাকে ভার্চুয়াল মেশিন (VM), স্থায়ী ডিস্ক এবং নেটওয়ার্ক সেটিংস তৈরি এবং পরিচালনা করতে দেয়। এটি আপনার কাজের চাপ চালানোর জন্য এবং অনেক পরিচালিত পরিষেবার জন্য অন্তর্নিহিত অবকাঠামো হোস্ট করার জন্য প্রয়োজনীয় মূল অবকাঠামো-অ্যাজ-এ-সার্ভিস (IaaS) ভিত্তি প্রদান করে।
  • ক্লাউড রিসোর্স ম্যানেজার API ( cloudresourcemanager.googleapis.com ) আপনাকে আপনার গুগল ক্লাউড প্রকল্পের মেটাডেটা এবং কনফিগারেশন প্রোগ্রাম্যাটিকভাবে পরিচালনা করতে দেয়। এটি আপনাকে সংস্থানগুলি সংগঠিত করতে, পরিচয় এবং অ্যাক্সেস ম্যানেজমেন্ট (IAM) নীতিগুলি পরিচালনা করতে এবং প্রকল্পের শ্রেণিবিন্যাস জুড়ে অনুমতিগুলি যাচাই করতে সক্ষম করে।
  • সার্ভিস নেটওয়ার্কিং API ( servicenetworking.googleapis.com ) আপনাকে আপনার ভার্চুয়াল প্রাইভেট ক্লাউড (VPC) নেটওয়ার্ক এবং গুগলের পরিচালিত পরিষেবাগুলির মধ্যে ব্যক্তিগত সংযোগের সেটআপ স্বয়ংক্রিয় করতে দেয়। AlloyDB এর মতো পরিষেবাগুলির জন্য ব্যক্তিগত IP অ্যাক্সেস স্থাপন করা বিশেষভাবে প্রয়োজন যাতে তারা আপনার অন্যান্য সংস্থানগুলির সাথে নিরাপদে যোগাযোগ করতে পারে।
  • Vertex AI API ( aiplatform.googleapis.com ) আপনার অ্যাপ্লিকেশনগুলিকে মেশিন লার্নিং মডেল তৈরি, স্থাপন এবং স্কেল করতে সক্ষম করে। এটি Google ক্লাউডের সমস্ত AI পরিষেবার জন্য একীভূত ইন্টারফেস প্রদান করে, যার মধ্যে রয়েছে জেনারেটিভ AI মডেলগুলিতে অ্যাক্সেস (যেমন জেমিনি) এবং কাস্টম মডেল প্রশিক্ষণ।

৪. অ্যালয়ডিবি স্থাপন করুন

AlloyDB ক্লাস্টার এবং প্রাথমিক ইন্সট্যান্স তৈরি করুন। নিম্নলিখিত পদ্ধতিতে Google Cloud SDK ব্যবহার করে একটি AlloyDB ক্লাস্টার এবং ইন্সট্যান্স তৈরি করার পদ্ধতি বর্ণনা করা হয়েছে। আপনি যদি কনসোল পদ্ধতি পছন্দ করেন তবে আপনি এখানে ডকুমেন্টেশন অনুসরণ করতে পারেন।

AlloyDB ক্লাস্টার তৈরি করার আগে আমাদের VPC-তে একটি প্রাইভেট IP রেঞ্জ থাকা দরকার যা ভবিষ্যতের AlloyDB ইনস্ট্যান্স ব্যবহার করবে। যদি আমাদের কাছে এটি না থাকে তবে আমাদের এটি তৈরি করতে হবে, এটি অভ্যন্তরীণ Google পরিষেবাগুলির দ্বারা ব্যবহারের জন্য বরাদ্দ করতে হবে এবং তারপরে আমরা ক্লাস্টার এবং ইনস্ট্যান্স তৈরি করতে সক্ষম হব।

ব্যক্তিগত আইপি পরিসর তৈরি করুন

AlloyDB-এর জন্য আমাদের VPC-তে Private Service Access কনফিগারেশন কনফিগার করতে হবে। এখানে ধরে নেওয়া হচ্ছে যে আমাদের প্রকল্পে "ডিফল্ট" VPC নেটওয়ার্ক রয়েছে এবং এটি সমস্ত কাজের জন্য ব্যবহার করা হবে।

ব্যক্তিগত আইপি পরিসর তৈরি করুন:

gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=24 \
    --description="VPC private service access" \
    --network=default

বরাদ্দকৃত আইপি পরিসর ব্যবহার করে ব্যক্তিগত সংযোগ তৈরি করুন:

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range \
    --network=default

প্রত্যাশিত কনসোল আউটপুট:

student@cloudshell:~ (test-project-402417)$ gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=24 \
    --description="VPC private service access" \
    --network=default
Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/global/addresses/psa-range].

student@cloudshell:~ (test-project-402417)$ gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range \
    --network=default
Operation "operations/pssn.p24-4470404856-595e209f-19b7-4669-8a71-cbd45de8ba66" finished successfully.

student@cloudshell:~ (test-project-402417)$

AlloyDB ক্লাস্টার তৈরি করুন

এই বিভাগে আমরা us-central1 অঞ্চলে একটি AlloyDB ক্লাস্টার তৈরি করছি।

পোস্টগ্রেস ব্যবহারকারীর জন্য পাসওয়ার্ড নির্ধারণ করুন। আপনি নিজের পাসওয়ার্ড নির্ধারণ করতে পারেন অথবা একটি র্যান্ডম ফাংশন ব্যবহার করে একটি তৈরি করতে পারেন।

export PGPASSWORD=`openssl rand -hex 12`

প্রত্যাশিত কনসোল আউটপুট:

student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`

ভবিষ্যতে ব্যবহারের জন্য PostgreSQL পাসওয়ার্ডটি নোট করুন।

echo $PGPASSWORD

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

প্রত্যাশিত কনসোল আউটপুট:

student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD
bbefbfde7601985b0dee5723 (Note: Yours will be different!)

একটি বিনামূল্যের ট্রায়াল ক্লাস্টার তৈরি করুন

যদি আপনি আগে AlloyDB ব্যবহার না করে থাকেন, তাহলে একটি বিনামূল্যের ট্রায়াল ক্লাস্টার তৈরি করতে পারেন:

অঞ্চল এবং AlloyDB ক্লাস্টারের নাম নির্ধারণ করুন। আমরা us-central1 region এবং alloydb-aip-01 কে ক্লাস্টারের নাম হিসেবে ব্যবহার করব:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01

ক্লাস্টার তৈরি করতে কমান্ড চালান:

gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION \
    --subscription-type=TRIAL

প্রত্যাশিত কনসোল আউটপুট:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION \
    --subscription-type=TRIAL
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.                                                                                                                                                                                                                                                           

একই ক্লাউড শেল সেশনে আমাদের ক্লাস্টারের জন্য একটি AlloyDB প্রাথমিক উদাহরণ তৈরি করুন। যদি আপনার সংযোগ বিচ্ছিন্ন থাকে তবে আপনাকে আবার অঞ্চল এবং ক্লাস্টারের নাম পরিবেশ ভেরিয়েবল সংজ্ঞায়িত করতে হবে।

gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=8 \
    --region=$REGION \
    --cluster=$ADBCLUSTER

প্রত্যাশিত কনসোল আউটপুট:

student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=8 \
    --region=$REGION \
    --availability-type ZONAL \
    --cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.                                                                                                                                                                                                                                                     

AlloyDB স্ট্যান্ডার্ড ক্লাস্টার তৈরি করুন

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

অঞ্চল এবং AlloyDB ক্লাস্টারের নাম নির্ধারণ করুন। আমরা us-central1 region এবং alloydb-aip-01 কে ক্লাস্টারের নাম হিসেবে ব্যবহার করব:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01

ক্লাস্টার তৈরি করতে কমান্ড চালান:

gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION

প্রত্যাশিত কনসোল আউটপুট:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION 
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.                                                                                                                                                                                                                                                           

একই ক্লাউড শেল সেশনে আমাদের ক্লাস্টারের জন্য একটি AlloyDB প্রাথমিক উদাহরণ তৈরি করুন। যদি আপনার সংযোগ বিচ্ছিন্ন থাকে তবে আপনাকে আবার অঞ্চল এবং ক্লাস্টারের নাম পরিবেশ ভেরিয়েবল সংজ্ঞায়িত করতে হবে।

gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --region=$REGION \
    --cluster=$ADBCLUSTER

প্রত্যাশিত কনসোল আউটপুট:

student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --region=$REGION \
    --availability-type ZONAL \
    --cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.                                                                                                                                                                                                                                                     

৫. ডাটাবেস প্রস্তুত করুন

আমাদের একটি ডাটাবেস তৈরি করতে হবে, ভার্টেক্স এআই ইন্টিগ্রেশন সক্ষম করতে হবে, ডাটাবেস অবজেক্ট তৈরি করতে হবে এবং ডেটা আমদানি করতে হবে।

AlloyDB-কে প্রয়োজনীয় অনুমতি প্রদান করুন

AlloyDB পরিষেবা এজেন্টে Vertex AI অনুমতি যোগ করুন।

উপরে "+" চিহ্ন ব্যবহার করে আরেকটি ক্লাউড শেল ট্যাব খুলুন।

abc505ac4d41f24e.png সম্পর্কে

নতুন ক্লাউড শেল ট্যাবে এক্সিকিউট করুন:

PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"

প্রত্যাশিত কনসোল আউটপুট:

student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-11039]
student@cloudshell:~ (test-project-001-402417)$ gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"
Updated IAM policy for project [test-project-001-402417].
bindings:
- members:
  - serviceAccount:service-4470404856@gcp-sa-alloydb.iam.gserviceaccount.com
  role: roles/aiplatform.user
- members:
...
etag: BwYIEbe_Z3U=
version: 1
 

ট্যাবে "exit" এক্সিকিউশন কমান্ডের মাধ্যমে ট্যাবটি বন্ধ করুন:

exit

AlloyDB স্টুডিওতে সংযোগ করুন

পরবর্তী অধ্যায়গুলিতে ডাটাবেসের সাথে সংযোগের জন্য প্রয়োজনীয় সমস্ত SQL কমান্ড AlloyDB স্টুডিওতে কার্যকর করা যেতে পারে।

একটি নতুন ট্যাবে, Postgres এর জন্য AlloyDB-তে ক্লাস্টার পৃষ্ঠায় নেভিগেট করুন।

প্রাথমিক ইনস্ট্যান্সে ক্লিক করে আপনার AlloyDB ক্লাস্টারের জন্য ওয়েব কনসোল ইন্টারফেসটি খুলুন।

1d7298e7096e7313.png সম্পর্কে

তারপর বাম দিকে AlloyDB Studio-তে ক্লিক করুন:

a33131c72ad29478.png সম্পর্কে

পোস্টগ্রেস ডাটাবেস, ব্যবহারকারী পোস্টগ্রেস নির্বাচন করুন এবং ক্লাস্টার তৈরি করার সময় উল্লেখিত পাসওয়ার্ডটি প্রদান করুন। তারপর "প্রমাণীকরণ" বোতামে ক্লিক করুন। যদি আপনি পাসওয়ার্ডটি নোট করতে ভুলে যান বা এটি আপনার জন্য কাজ না করে - আপনি পাসওয়ার্ডটি পরিবর্তন করতে পারেন। এটি কীভাবে করবেন তার ডকুমেন্টেশন পরীক্ষা করুন।

2fcb84f70448118c.png সম্পর্কে

এটি AlloyDB স্টুডিও ইন্টারফেস খুলবে। ডাটাবেসে কমান্ডগুলি চালানোর জন্য আপনাকে ডানদিকে "Untitled Query" ট্যাবে ক্লিক করতে হবে।

a127047c343731ff.png সম্পর্কে

এটি ইন্টারফেস খোলে যেখানে আপনি SQL কমান্ড চালাতে পারবেন

9d312d5053c1296c.png সম্পর্কে

ডাটাবেস তৈরি করুন

ডাটাবেস কুইকস্টার্ট তৈরি করুন।

AlloyDB স্টুডিও এডিটরে নিম্নলিখিত কমান্ডটি কার্যকর করুন।

ডাটাবেস তৈরি করুন:

CREATE DATABASE quickstart_db

প্রত্যাশিত আউটপুট:

Statement executed successfully

quickstart_db-এর সাথে সংযোগ করুন

ব্যবহারকারী/ডাটাবেস পরিবর্তন করতে বোতামটি ব্যবহার করে স্টুডিওতে পুনরায় সংযোগ করুন।

5ac657387f7b6ec3.png সম্পর্কে

ড্রপডাউন তালিকা থেকে নতুন quickstart_db ডাটাবেসটি তুলে নিন এবং আগের মতো একই ব্যবহারকারী এবং পাসওয়ার্ড ব্যবহার করুন।

309e09003db414c3.png সম্পর্কে

এটি একটি নতুন সংযোগ খুলবে যেখানে আপনি quickstart_db ডাটাবেসের বস্তুগুলির সাথে কাজ করতে পারবেন।

6. নমুনা তথ্য

এখন আমাদের ডাটাবেসে অবজেক্ট তৈরি করতে হবে এবং ডেটা লোড করতে হবে। আমরা কাল্পনিক ডেটা সহ একটি কাল্পনিক "সিম্বাল" স্টোর ব্যবহার করতে যাচ্ছি।

ডেটা আমদানি করার আগে আমাদের ডেটাটাইপ এবং ইনডেক্স সমর্থনকারী এক্সটেনশনগুলি সক্ষম করতে হবে। আমাদের দুটি এক্সটেনশন প্রয়োজন যেখানে একটি ভেক্টর ডেটা টাইপ সমর্থন করে এবং অন্যটি AlloyDB ScaNN সূচক সমর্থন করে।

AlloyDB স্টুডিওতে quickstart_db এক্সিকিউটের সাথে সংযোগ স্থাপন করা হচ্ছে।

CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS alloydb_scann;

ডেটাসেটটি প্রস্তুত করা হয় এবং একটি SQL ফাইল হিসাবে স্থাপন করা হয় যা আমদানি ইন্টারফেস ব্যবহার করে ডাটাবেসে লোড করা যেতে পারে। ক্লাউডে শেল নিম্নলিখিত কমান্ডগুলি কার্যকর করে:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters import $ADBCLUSTER --region=$REGION --database=quickstart_db --gcs-uri='gs://sample-data-and-media/ecomm-retail/ecom_generic_vectors.sql' --user=postgres --sql

কমান্ডটি AlloyDB SDK ব্যবহার করে এবং agentspace_user নাম দিয়ে একটি ব্যবহারকারী তৈরি করে এবং তারপর GCS বাকেট থেকে সরাসরি ডাটাবেসে নমুনা ডেটা আমদানি করে, সমস্ত প্রয়োজনীয় বস্তু তৈরি করে এবং ডেটা সন্নিবেশ করায়।

আমদানির পরে আমরা AlloyDB স্টুডিওতে টেবিলগুলি পরীক্ষা করতে পারি। টেবিলগুলি ecomm স্কিমায় রয়েছে:

c6b0663eb31c3347.png সম্পর্কে

এবং টেবিলের যেকোনো একটিতে সারির সংখ্যা যাচাই করুন।

select count(*) from ecomm.products;

a1d5301989c10a25.png সম্পর্কে

আমরা সফলভাবে আমাদের নমুনা ডেটা আমদানি করেছি এবং পরবর্তী পদক্ষেপগুলি চালিয়ে যেতে পারি।

৭. টেক্সট এম্বেডিং ব্যবহার করে শব্দার্থিক অনুসন্ধান

এই অধ্যায়ে আমরা টেক্সট এম্বেডিং ব্যবহার করে শব্দার্থিক অনুসন্ধান ব্যবহার করার চেষ্টা করব এবং এটিকে ঐতিহ্যবাহী পোস্টগ্রেস টেক্সট এবং ফুলটেক্সট অনুসন্ধানের সাথে তুলনা করব।

প্রথমে LIKE অপারেটর সহ স্ট্যান্ডার্ড PostgreSQL SQL ব্যবহার করে ক্লাসিক অনুসন্ধান চেষ্টা করা যাক।

Quickstart_db এর সাথে সংযুক্ত AlloyDB স্টুডিওতে, নিম্নলিখিত কোয়েরি ব্যবহার করে একটি রেইন জ্যাকেট অনুসন্ধান করার চেষ্টা করুন:

SET session.my_search_var='%wet%conditions%jacket%';
SELECT
  name,
  product_description,
  retail_price,   replace(product_image_uri,'gs://','https://storage.googleapis.com/') AS public_url
FROM
  ecomm.products
WHERE
  name ILIKE current_setting('session.my_search_var')
  OR product_description ILIKE current_setting('session.my_search_var')
LIMIT
  10;

কোয়েরিটি কোনও সারি ফেরত দেয় না কারণ পণ্যের নাম বা বর্ণনায় wet conditions এবং jacket এর মতো সঠিক শব্দগুলির প্রয়োজন হবে। এবং 'wet conditions jacket' এবং 'rain conditions jacket' একই জিনিস নয়।

আমরা অনুসন্ধানে সম্ভাব্য সকল প্রকার পরিবর্তন অন্তর্ভুক্ত করার চেষ্টা করতে পারি। আসুন মাত্র দুটি শব্দ অন্তর্ভুক্ত করার চেষ্টা করি। উদাহরণস্বরূপ:

SELECT
  name,
  product_description,
  retail_price,
   replace(product_image_uri,'gs://','https://storage.googleapis.com/') AS public_url
FROM
  ecomm.products
WHERE
  name ILIKE '%wet%jacket%'
  OR name ILIKE '%jacket%wet%'
  OR name ILIKE '%jacket%'
  OR name ILIKE '%%wet%'
  OR product_description ILIKE '%wet%jacket%'
  OR product_description ILIKE '%jacket%wet%'
  OR product_description ILIKE '%jacket%'
  OR product_description ILIKE '%wet%'
LIMIT
  10;

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

এখন আমরা এম্বেডিং ব্যবহার করে একই রকম অনুসন্ধান করতে পারি। আমরা ইতিমধ্যেই বিভিন্ন মডেল ব্যবহার করে আমাদের পণ্যের জন্য পূর্বনির্ধারিত এম্বেডিং তৈরি করেছি। আমরা সর্বশেষ Google এর gemini-embedding-001 মডেলটি ব্যবহার করতে যাচ্ছি। আমরা ecomm.products টেবিলের " product_embedding " কলামে সেগুলি সংরক্ষণ করেছি। যদি আমরা নিম্নলিখিত কোয়েরি ব্যবহার করে আমাদের "men rain jacket" অনুসন্ধানের শর্তের জন্য একটি কোয়েরি চালাই:

SELECT
  name,
  product_description,
  retail_price,
   replace(product_image_uri,'gs://','https://storage.googleapis.com/') AS public_url,
  product_embedding <=> embedding ('gemini-embedding-001','wet conditions jacket for men')::vector AS distance
FROM
  ecomm.products
ORDER BY distance
LIMIT
  10;

এটি কেবল ভেজা আবহাওয়ার জন্য জ্যাকেটই ফেরত দেবে না বরং সমস্ত ফলাফলও সবচেয়ে প্রাসঙ্গিক ফলাফলের উপরে রেখে সাজানো হবে।

এম্বেডিং সহ কোয়েরিটি 90-150 মিলিসেকেন্ডে ফলাফল ফেরত দেয় যেখানে ক্লাউড এম্বেডিং মডেল থেকে ডেটা পেতে কিছু সময় ব্যয় হয়। যদি আমরা এক্সিকিউশন প্ল্যানের দিকে তাকাই, তাহলে মডেলের কাছে অনুরোধটি পরিকল্পনার সময়ের মধ্যে অন্তর্ভুক্ত করা হয়। অনুসন্ধানের জন্য কোয়েরির অংশটি বেশ কম। AlloyDB ScaNN সূচক ব্যবহার করে 29k রেকর্ডে অনুসন্ধান করতে 7 মিলিসেকেন্ডেরও কম সময় লাগে।

এখানে এক্সিকিউশন প্ল্যান আউটপুট হল:

সীমা (খরচ=২৭০৯.২০..২৭১৮.৮২ সারি=১০ প্রস্থ=৪৯০) (প্রকৃত সময়=৬.৯৬৬..৭.০৪৯ সারি=১০ লুপ=১)

-> পণ্যগুলিতে embedding_scann ব্যবহার করে সূচক স্ক্যান করুন (খরচ=২৭০৯.২০..৩০৭৩৬.৪০ সারি=২৯১২০ প্রস্থ=৪৯০) (প্রকৃত সময়=৬.৯৬৪..৭.০৪৬ সারি=১০ লুপ=১)

     Order By: (product_embedding &lt;=&gt; '[-0.0020264734,-0.016582033,0.027258193

...

-0.0051468653, -0.012440448]'::ভেক্টর)

     Limit: 10

পরিকল্পনা সময়: ১৩৬.৫৭৯ মিলিসেকেন্ড

কার্যকর করার সময়: ৬.৭৯১ মিলিসেকেন্ড

(৬টি সারি)

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

৮. মাল্টিমোডাল অনুসন্ধান ব্যবহার করা

টেক্সট-ভিত্তিক শব্দার্থিক অনুসন্ধান কার্যকর হলেও, জটিল বিবরণ বর্ণনা করা চ্যালেঞ্জিং হতে পারে। AlloyDB-এর মাল্টিমোডাল অনুসন্ধান ইমেজ ইনপুটের মাধ্যমে পণ্য আবিষ্কার সক্ষম করে একটি সুবিধা প্রদান করে। এটি বিশেষভাবে সহায়ক যখন ভিজ্যুয়াল উপস্থাপনা শুধুমাত্র টেক্সট বর্ণনার চেয়ে অনুসন্ধানের উদ্দেশ্যকে আরও কার্যকরভাবে স্পষ্ট করে। উদাহরণস্বরূপ - "ছবিতে এই ধরণের একটি কোট খুঁজে বের করুন"।

আমাদের জ্যাকেটের উদাহরণে ফিরে আসা যাক। যদি আমার কাছে এমন একটি জ্যাকেটের ছবি থাকে যা আমি খুঁজে পেতে চাই তার মতো, তাহলে আমি এটি Google মাল্টিমোডাল এম্বেডিং মডেলে পাঠাতে পারি এবং আমার পণ্যের ছবির জন্য এম্বেডিংয়ের সাথে তুলনা করতে পারি। আমাদের টেবিলে আমরা ইতিমধ্যেই product_image_embedding কলামে আমাদের পণ্যের ছবির জন্য এম্বেডিং গণনা করেছি এবং আপনি product_image_embedding_model কলামে ব্যবহৃত মডেলটি দেখতে পারেন।

আমাদের অনুসন্ধানের জন্য আমরা image_embedding ফাংশন ব্যবহার করে আমাদের ছবির জন্য embedding পেতে পারি এবং এটি পূর্বনির্ধারিত এম্বেডিংয়ের সাথে তুলনা করতে পারি। ফাংশনটি সক্রিয় করার জন্য আমাদের নিশ্চিত করতে হবে যে আমরা google_ml_integration এক্সটেনশনের সঠিক সংস্করণ ব্যবহার করছি।

বর্তমান এক্সটেনশন সংস্করণটি যাচাই করা যাক। AlloyDB স্টুডিওতে এক্সিকিউট করুন।

SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
  

যদি সংস্করণটি 1.5.2 এর কম হয় তাহলে নিম্নলিখিত পদ্ধতিটি চালান।

CALL google_ml.upgrade_to_preview_version();

এবং এক্সটেনশনটির সংস্করণটি পুনরায় পরীক্ষা করুন। এটি 1.5.3 হওয়া উচিত।

SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';

আমাদের ডাটাবেসে AI কোয়েরি ইঞ্জিন বৈশিষ্ট্যগুলিও সক্ষম করতে হবে। এটি ইনস্ট্যান্সের সমস্ত ডাটাবেসের জন্য ইনস্ট্যান্স ফ্ল্যাগ দ্বারা আপডেট করে অথবা শুধুমাত্র আমাদের ডাটাবেসের জন্য এটি সক্ষম করে করা যেতে পারে। quickstart_db ডাটাবেসের জন্য এটি সক্ষম করতে AlloyDB স্টুডিওতে নিম্নলিখিত কমান্ডটি কার্যকর করুন।

ALTER DATABASE quickstart_db SET google_ml_integration.enable_ai_query_engine = 'on';

এখন আমরা ছবি দিয়ে অনুসন্ধান করতে পারি। অনুসন্ধানের জন্য এখানে আমার নমুনা চিত্রটি দেওয়া হল, তবে আপনি যেকোনো কাস্টম চিত্র ব্যবহার করতে পারেন। আপনাকে কেবল এটি গুগল স্টোরেজে বা অন্য কোনও পাবলিকলি উপলব্ধ রিসোর্সে আপলোড করতে হবে এবং কোয়েরিতে URI লিখতে হবে।

664bf0bc3fc4e72d.jpeg সম্পর্কে

এবং এটি gs://pr-public-demo-data/alloydb-retail-demo/user_photos/4.png এ আপলোড করা হয়েছে।

ছবি দ্বারা ছবি অনুসন্ধান

প্রথমে, আমরা কেবল ছবিটি দিয়ে অনুসন্ধান করার চেষ্টা করি:

SELECT
  name,
  product_description,
  retail_price,
  replace(product_image_uri,'gs://','https://storage.googleapis.com/') AS public_url,
  product_image_embedding <=> google_ml.image_embedding (model_id => 'multimodalembedding@001',image => 'gs://pr-public-demo-data/alloydb-retail-demo/user_photos/4.png', mimetype => 'image/png')::vector AS distance
FROM
  ecomm.products
ORDER BY distance
LIMIT
  4;

আর আমরা ইনভেন্টরিতে কিছু উষ্ণ জ্যাকেট খুঁজে পেয়েছি। ছবিগুলি দেখতে আপনি public_url কলামটি সরবরাহ করে ক্লাউড SDK ( gcloud storage cp ) ব্যবহার করে ডাউনলোড করতে পারেন এবং তারপর ছবিগুলির সাথে কাজ করে এমন যেকোনো সরঞ্জাম ব্যবহার করে এটি খুলতে পারেন।

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

আমরা আমাদের ইমেজ সার্চের জন্য গুগলের 'multimodalembedding@001' মডেল ব্যবহার করেছি। আমাদের ইমেজ_এমবেডিং ফাংশন ছবিটিকে Vertex AI-তে পাঠায়, এটিকে একটি ভেক্টরে রূপান্তর করে এবং আমাদের ডাটাবেসে সংরক্ষিত ইমেজ ভেক্টরের সাথে তুলনা করার জন্য ফিরে আসে।

আমরা "EXPLAIN ANALYZE" ব্যবহার করেও পরীক্ষা করতে পারি যে এটি আমাদের AlloyDB ScaNN সূচকের সাথে কত দ্রুত কাজ করে।

এক্সিকিউশন প্ল্যানের আউটপুট এখানে:

সীমা (খরচ=৯৭১.৭০..৯৭৫.৫৫ সারি=৪ প্রস্থ=৪৯০) (প্রকৃত সময়=২.৪৫৩..২.৪৭৭ সারি=৪ লুপ=১)

-> পণ্যগুলিতে product_image_embedding_scann ব্যবহার করে সূচক স্ক্যান করুন (খরচ=৯৭১.৭০..২৮৯৯৮.৯০ সারি=২৯১২০ প্রস্থ=৪৯০) (প্রকৃত সময়=২.৪৫১..২.৪৭৫ সারি=৪ লুপ=১)

     Order By: (product_image_embedding &lt;=&gt; '[0.02119865,0.034206174,0.030682731,

...

,-0.010307034,-0.010053742]'::ভেক্টর)

     Limit: 4

পরিকল্পনা সময়: ৯১৩.৩২২ মিলিসেকেন্ড

কার্যকর করার সময়: ২.৫১৭ মিলিসেকেন্ড

(৬টি সারি)

এবং আবার আগের উদাহরণের মতো আমরা দেখতে পাচ্ছি যে ক্লাউড এন্ডপয়েন্ট ব্যবহার করে আমাদের ছবিকে এম্বেডিংয়ে রূপান্তর করতে বেশিরভাগ সময় ব্যয় করা হয়েছে এবং ভেক্টর অনুসন্ধান নিজেই মাত্র 2.5 মিলিসেকেন্ড সময় নেয়।

টেক্সট অনুসারে ছবি অনুসন্ধান

মাল্টিমোডালের সাহায্যে আমরা যে জ্যাকেটটি অনুসন্ধান করার চেষ্টা করছি তার একটি টেক্সট বর্ণনা মডেলটিতে পাঠাতে পারি, একই মডেলের জন্য google_ml.text_embedding ব্যবহার করে এবং ইমেজ এম্বেডিংয়ের সাথে তুলনা করে দেখতে পারি যে এটি কোন ছবি ফেরত দেয়।

SELECT
  name,
  product_description,
  retail_price,
  replace(product_image_uri,'gs://','https://storage.googleapis.com/') AS public_url,
  product_image_embedding <=> google_ml.text_embedding (model_id => 'multimodalembedding@001',content => 'puffy jacket for men, grey or dark colour')::vector AS distance
FROM
  ecomm.products
ORDER BY distance
LIMIT
  4;

আর আমরা ধূসর বা গাঢ় রঙের এক সেট ফুলে ওঠা জ্যাকেট পেয়েছি।

আমরা একটু ভিন্ন ধরণের জ্যাকেট পেয়েছি কিন্তু আমাদের বর্ণনা এবং ছবির এম্বেডিং অনুসন্ধানের উপর ভিত্তি করে এটি সঠিকভাবে জ্যাকেটগুলি বেছে নিয়েছে।

অনুসন্ধান চিত্রের জন্য আমাদের এম্বেডিং ব্যবহার করে বর্ণনাগুলির মধ্যে অনুসন্ধান করার আরেকটি উপায় চেষ্টা করা যাক।

ছবি দ্বারা টেক্সট অনুসন্ধান

আমরা আমাদের ছবির জন্য এম্বেডিং পাস করা ছবিগুলি অনুসন্ধান করার চেষ্টা করেছি এবং আমাদের পণ্যের জন্য পূর্বনির্ধারিত চিত্র এম্বেডিংয়ের সাথে তুলনা করেছি। আমরা আমাদের টেক্সট অনুরোধের জন্য এম্বেডিং পাস করা ছবিগুলি অনুসন্ধান করার এবং পণ্যের চিত্রগুলির জন্য একই এম্বেডিংয়ের মধ্যে অনুসন্ধান করার চেষ্টা করেছি। এখন আমাদের ছবির জন্য এম্বেডিং ব্যবহার করার চেষ্টা করি এবং পণ্যের বর্ণনার জন্য টেক্সট এম্বেডিংয়ের সাথে তুলনা করি। এম্বেডিংটি product_description_embedding কলামে সংরক্ষিত আছে এবং একই multimodalembedding@001 মডেল ব্যবহার করে।

আমাদের জিজ্ঞাসা এখানে:

SELECT
  name,
  product_description,
  retail_price,
  replace(product_image_uri,'gs://','https://storage.googleapis.com/') AS public_url,
  product_description_embedding <=> google_ml.image_embedding (model_id => 'multimodalembedding@001',image => 'gs://pr-public-demo-data/alloydb-retail-demo/user_photos/4.png', mimetype => 'image/png')::vector AS distance

FROM
  ecomm.products
ORDER BY distance
LIMIT
  4;

এবং এখানে আমরা ধূসর বা গাঢ় রঙের জ্যাকেটের একটি সামান্য ভিন্ন সেট পেয়েছি যেখানে কিছু একই রকম বা বিভিন্ন অনুসন্ধানের মাধ্যমে বেছে নেওয়া খুব কাছাকাছি।

এবং এটি উপরের মতো একই জ্যাকেটগুলিকে একটু ভিন্ন ক্রমে ফেরত পাঠায়। আমাদের ছবির এম্বেডিংয়ের উপর ভিত্তি করে এটি টেক্সট বর্ণনার জন্য গণনা করা এম্বেডিংয়ের সাথে তুলনা করতে পারে এবং পণ্যের সঠিক সেট ফেরত দিতে পারে।

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

WITH image_search AS (
            SELECT id,
                RANK () OVER (ORDER BY  product_image_embedding <=>google_ml.image_embedding(model_id => 'multimodalembedding@001',image => 'gs://pr-public-demo-data/alloydb-retail-demo/user_photos/4.png', mimetype => 'image/png')::vector) AS rank
                FROM ecomm.products
                ORDER BY product_image_embedding <=>google_ml.image_embedding(model_id => 'multimodalembedding@001',image => 'gs://pr-public-demo-data/alloydb-retail-demo/user_photos/4.png', mimetype => 'image/png')::vector LIMIT 5
        ),
      text_search AS (
            SELECT id,
                RANK () OVER (ORDER BY product_description_embedding <=>google_ml.text_embedding(model_id => 'multimodalembedding@001',content => 'puffy jacket for men, grey or dark colour'
    )::vector) AS rank
            FROM ecomm.products
            ORDER BY product_description_embedding <=>google_ml.text_embedding(model_id => 'multimodalembedding@001',content => 'puffy jacket for men, grey or dark colour'
    )::vector LIMIT 5
        ),
      rrf_score AS (
        SELECT
            COALESCE(image_search.id, text_search.id) AS id,
            COALESCE(1.0 / (60 + image_search.rank), 0.0) + COALESCE(1.0 / (60 + text_search.rank), 0.0) AS rrf_score
        FROM image_search FULL OUTER JOIN text_search ON image_search.id = text_search.id
        ORDER BY rrf_score DESC
      )
      SELECT 
        ep.name,
        ep.product_description,
        ep.retail_price,
        replace(ep.product_image_uri,'gs://','https://storage.googleapis.com/') AS public_url
      FROM ecomm.products ep, rrf_score 
      WHERE 
        ep.id=rrf_score.id 
      ORDER by rrf_score DESC
      LIMIT 4;

আপনি কোয়েরিতে বিভিন্ন প্যারামিটার ব্যবহার করে দেখতে পারেন এবং দেখতে পারেন যে এটি আপনার অনুসন্ধানের ফলাফল উন্নত করতে পারে কিনা।

এতে ল্যাবটি শেষ হবে এবং অপ্রত্যাশিত চার্জ রোধ করার জন্য অব্যবহৃত রিসোর্সগুলি মুছে ফেলার পরামর্শ দেওয়া হচ্ছে।

এছাড়াও, ডকুমেন্টেশনে বর্ণিত ফলাফলগুলি র‍্যাঙ্ক করার জন্য আপনি অন্যান্য AI অপারেটর ব্যবহার করতে পারেন।

৯. পরিবেশ পরিষ্কার করুন

ল্যাবের কাজ শেষ হলে AlloyDB ইনস্ট্যান্স এবং ক্লাস্টার ধ্বংস করুন।

AlloyDB ক্লাস্টার এবং সমস্ত ইনস্ট্যান্স মুছে ফেলুন

যদি আপনি AlloyDB এর ট্রায়াল ভার্সন ব্যবহার করে থাকেন। যদি আপনার ট্রায়াল ক্লাস্টার ব্যবহার করে অন্যান্য ল্যাব এবং রিসোর্স পরীক্ষা করার পরিকল্পনা থাকে, তাহলে ট্রায়াল ক্লাস্টারটি মুছে ফেলবেন না। আপনি একই প্রকল্পে আরেকটি ট্রায়াল ক্লাস্টার তৈরি করতে পারবেন না।

ক্লাস্টারটি অপশন ফোর্স দিয়ে ধ্বংস করা হয় যা ক্লাস্টারের সমস্ত ইনস্ট্যান্সও মুছে ফেলে।

যদি আপনার সংযোগ বিচ্ছিন্ন হয়ে যায় এবং পূর্ববর্তী সমস্ত সেটিংস হারিয়ে যায়, তাহলে ক্লাউড শেলে প্রকল্প এবং পরিবেশের ভেরিয়েবলগুলি সংজ্ঞায়িত করুন:

gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)

ক্লাস্টারটি মুছুন:

gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force

প্রত্যাশিত কনসোল আউটপুট:

student@cloudshell:~ (test-project-001-402417)$ gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
All of the cluster data will be lost when the cluster is deleted.

Do you want to continue (Y/n)?  Y

Operation ID: operation-1697820178429-6082890a0b570-4a72f7e4-4c5df36f
Deleting cluster...done.   

AlloyDB ব্যাকআপ মুছে ফেলুন

ক্লাস্টারের জন্য সমস্ত AlloyDB ব্যাকআপ মুছে ফেলুন:

for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done

প্রত্যাশিত কনসোল আউটপুট:

student@cloudshell:~ (test-project-001-402417)$ for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done
Operation ID: operation-1697826266108-60829fb7b5258-7f99dc0b-99f3c35f
Deleting backup...done.                                                                                                                                                                                                                                                            

১০. অভিনন্দন

কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন। আপনি টেক্সট এবং ছবির জন্য এমবেডিং ফাংশন ব্যবহার করে AlloyDB-তে মাল্টিমোডাল অনুসন্ধান কীভাবে ব্যবহার করবেন তা শিখেছেন। আপনি AlloyDB AI অপারেটরদের জন্য codelab ব্যবহার করে google_ml.rank ফাংশন দিয়ে মাল্টিমোডাল অনুসন্ধান পরীক্ষা করার এবং এটি উন্নত করার চেষ্টা করতে পারেন।

গুগল ক্লাউড লার্নিং পাথ

এই ল্যাবটি গুগল ক্লাউড লার্নিং পাথ সহ প্রোডাকশন-রেডি এআই-এর অংশ।

আমরা যা কভার করেছি

  • পোস্টগ্রেসের জন্য অ্যালয়ডিবি কীভাবে স্থাপন করবেন
  • AlloyDB স্টুডিও কীভাবে ব্যবহার করবেন
  • মাল্টিমোডাল ভেক্টর অনুসন্ধান কীভাবে ব্যবহার করবেন
  • AlloyDB AI অপারেটরগুলিকে কীভাবে সক্ষম করবেন
  • মাল্টিমোডাল অনুসন্ধানের জন্য বিভিন্ন AlloyDB AI অপারেটর কীভাবে ব্যবহার করবেন
  • টেক্সট এবং ছবির অনুসন্ধান ফলাফল একত্রিত করতে AlloyDB AI কীভাবে ব্যবহার করবেন

১১. জরিপ

আউটপুট:

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু এটি পড়ুন এটি পড়ুন এবং অনুশীলনগুলি সম্পূর্ণ করুন।