১. সংক্ষিপ্ত বিবরণ
মাস্টার ডেটা ম্যানেজমেন্ট কী?
মাস্টার ডেটা ম্যানেজমেন্ট (এমডিএম)-এর মূল উদ্দেশ্য হলো আপনার প্রতিষ্ঠানের সবচেয়ে গুরুত্বপূর্ণ ডেটার জন্য একটি একক ও নির্ভরযোগ্য তথ্যের উৎস তৈরি করা। একটি অত্যন্ত সুসংগঠিত লাইব্রেরির কথা ভাবুন, যেখানে প্রতিটি বই (ডেটা পয়েন্ট) সঠিকভাবে লেবেল করা, হালনাগাদ এবং সহজেই খুঁজে পাওয়া যায়।
মাস্টার ডেটা হলো একটি কোম্পানির কার্যক্রমের জন্য অপরিহার্য মূল ও ভিত্তিগত ব্যবসায়িক সত্তাগুলো। মাস্টার ডেটার প্রধান উপাদানগুলো হলো:
- ব্যবসায়িক সত্তা: গ্রাহক, পণ্য, সরবরাহকারী, অবস্থান এবং কর্মচারী-এর মতো সত্তা, যেগুলোকে কেন্দ্র করে আপনার ব্যবসা পরিচালিত হয়।
- শনাক্তকারী: অনন্য শনাক্তকারী যা নিশ্চিত করে যে প্রতিটি সত্তা বিভিন্ন সিস্টেম জুড়ে স্বতন্ত্র এবং শনাক্তযোগ্য।
- বৈশিষ্ট্যসমূহ : যে সকল বৈশিষ্ট্য প্রতিটি সত্তাকে বর্ণনা করে, যেমন, একজন গ্রাহকের ঠিকানা, একটি পণ্যের মূল্য ইত্যাদি।
মাস্টার ডেটা সম্পর্কে আপনাকে আরও ভালোভাবে বোঝানোর জন্য, চলুন এটিকে ট্রানজ্যাকশনাল ডেটার সাথে তুলনা করা যাক। ট্রানজ্যাকশনাল ডেটা স্বতন্ত্র ঘটনাগুলোকে (যেমন—একটি ক্রয়, একটি চালান ইত্যাদি) ধারণ করে। অপরদিকে, মাস্টার ডেটা সংশ্লিষ্ট সত্তাগুলোকে সংজ্ঞায়িত করার মাধ্যমে সেই ঘটনাগুলোর প্রেক্ষাপট প্রদান করে। উদাহরণস্বরূপ, একটি বিক্রয় লেনদেন গ্রাহক, পণ্য এবং বিক্রয়কর্মীর মাস্টার ডেটার সাথে সংযুক্ত থাকে।
কৌশলগত সিদ্ধান্ত গ্রহণের জন্য শক্তিশালী মাল্টি-ডেসট্রাকশন ম্যানেজমেন্ট (MDM) বাস্তবায়ন করা অপরিহার্য হলেও, এটি জটিল এবং সম্পদ-নিবিড় হতে পারে। এখানেই জেনারেটিভ এআই-এর রূপান্তরকারী শক্তি, বিশেষ করে Gemini 1.0 Pro, Gemini 1.0 Pro Vision, Gemini 1.5 Pro-এর মতো মডেলগুলো, কার্যকর ভূমিকা পালন করে।
২. উদ্দেশ্য
এই কোডল্যাবে, আপনি দেখাবেন কিভাবে Gemini 1.0 Pro, BigQuery পাবলিক ডেটাসেটে উপলব্ধ citibike_stations ডেটার জন্য এনরিচমেন্ট এবং ডিডুপ্লিকেশনের মতো মাস্টার ডেটা ম্যানেজমেন্ট অ্যাপ্লিকেশনগুলিকে সহজ করে তোলে।
আপনি যা ব্যবহার করবেন
- BigQuery পাবলিক ডেটাসেট
bigquery-public-data.new_york_citibike. - জেমিনি ফাংশন কলিং (একটি জাভা ক্লাউড ফাংশন যা citibike_stations ডেটাতে উপলব্ধ স্থানাঙ্কের জন্য রিভার্স জিওকোডিং এপিআই ব্যবহার করে ঠিকানার তথ্য সংগ্রহ করে)।
- ডুপ্লিকেট শনাক্ত করতে ভার্টেক্স এআই এমবেডিংস এপিআই এবং বিগকোয়েরিতে ভেক্টর সার্চ ব্যবহার করা হয়।
আপনি যা তৈরি করবেন
- আপনি এই ব্যবহারের জন্য একটি BigQuery ডেটাসেট তৈরি করবেন। এই ডেটাসেটে, আপনি
bigquery-public-data.new_york_citibike.citibike_stationsপাবলিক ডেটাসেট টেবিল থেকে ডেটা নিয়ে একটি ল্যান্ডিং টেবিল তৈরি করবেন। - আপনি অ্যাড্রেস প্রমিতকরণের জন্য জেমিনি ফাংশন কলিং অন্তর্ভুক্ত ক্লাউড ফাংশনটি স্থাপন করবেন।
- আপনি এই প্রদর্শনের জন্য প্রদত্ত দুটি উৎস থেকে প্রাপ্ত সমৃদ্ধ ঠিকানার ডেটা ল্যান্ডিং টেবিলগুলিতে সংরক্ষণ করবেন।
- আপনি ঠিকানার ডেটার উপর BigQuery থেকে Vertex AI Embeddings API প্রয়োগ করবেন।
- ডুপ্লিকেট রেকর্ড শনাক্ত করতে আপনি BigQuery ভেক্টর সার্চ ব্যবহার করবেন।
নিম্নোক্ত চিত্রটিতে তথ্যের প্রবাহ এবং বাস্তবায়নের ধাপসমূহ দেখানো হয়েছে।

৩. প্রয়োজনীয়তা
- ক্রোম বা ফায়ারফক্সের মতো একটি ব্রাউজার
- বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট।
৪. শুরু করার আগে
- গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন।
- আপনার ক্লাউড প্রোজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন। কোনো প্রোজেক্টে বিলিং চালু আছে কিনা তা কীভাবে পরীক্ষা করবেন, তা জেনে নিন।
- আপনি ক্লাউড শেল ব্যবহার করবেন, যা গুগল ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ এবং এটি bq-এর সাথে আগে থেকেই লোড করা থাকে। গুগল ক্লাউড কনসোলের শীর্ষে থাকা ‘Activate Cloud Shell’-এ ক্লিক করুন।

- ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে যাচাই করে নিন যে আপনি ইতিমধ্যেই প্রমাণীকৃত এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে:
gcloud auth list
- gcloud কমান্ডটি আপনার প্রজেক্ট সম্পর্কে অবগত আছে কিনা, তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।
gcloud config list project
- আপনার প্রজেক্টটি সেট করা না থাকলে, এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
- এপিআই (API) সক্রিয় করতে Gemini for Google Cloud Marketplace- এ যান। এছাড়াও আপনি ক্লাউড শেল টার্মিনালে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- BigQuery, BigQuery Connection, Cloud Function, Cloud Run, Vertex AI, এবং Cloud Build API-গুলো সক্রিয় আছে কিনা তা নিশ্চিত করুন। gcloud কমান্ডের বিকল্প হলো এই লিঙ্কটি ব্যবহার করে কনসোলের মাধ্যমে কাজটি করা।
gcloud কমান্ড এবং এর ব্যবহার সম্পর্কে জানতে ডকুমেন্টেশন দেখুন।
৫. একটি BigQuery ডেটাসেট এবং বাহ্যিক সংযোগ তৈরি করুন
প্রথমে একটি ডেটাসেট এবং একটি ক্লাউড রিসোর্স সংযোগ তৈরি করে নেওয়া যাক।
BigQuery-তে একটি ডেটাসেট হলো আপনার অ্যাপ্লিকেশনের সমস্ত টেবিল এবং অবজেক্টের জন্য একটি ধারক।
একটি ডেটাসেট তৈরি করতে, নিম্নলিখিতগুলি করুন:
- Google Cloud কনসোলে BigQuery পৃষ্ঠায় যান।
- এক্সপ্লোরার প্যানেলে, সেই প্রজেক্টটি নির্বাচন করুন যেখানে আপনি ডেটাসেটটি তৈরি করতে চান।
- অ্যাকশন অপশনটি (উল্লম্ব এলিপসিস আইকন) প্রসারিত করুন এবং ক্রিয়েট ডেটাসেট-এ ক্লিক করুন।

- ডেটাসেট আইডি ফিল্ডে
mdm_geminiলিখুন। - আপনার অবস্থানের ধরণ হিসেবে
Multi-regionসেট করুন এবং ডিফল্ট মানটি গ্রহণ করুন, যা হলোUS(multiple regions in United States. - ডেটা সেট তৈরি করুন -এ ক্লিক করুন।
- এক্সপ্লোরার প্যানে ডেটা সেটটি তৈরি হয়েছে এবং আপনার প্রজেক্ট আইডির অধীনে তালিকাভুক্ত আছে কিনা তা যাচাই করুন।
আপনার ক্লাউড ফাংশনের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি BigQuery কানেকশন প্রয়োজন। একটি রিমোট ফাংশন তৈরি করতে হলে, আপনাকে অবশ্যই একটি BigQuery কানেকশন তৈরি করতে হবে। এই কোডল্যাবে, আমরা ক্লাউড ফাংশনের মাধ্যমে BigQuery থেকে মডেলটি অ্যাক্সেস করার জন্য BigLake কানেকশন ব্যবহার করব। BigLake কানেকশনগুলো BigQuery-এর সূক্ষ্ম অ্যাক্সেস কন্ট্রোল এবং নিরাপত্তা বজায় রেখে এক্সটার্নাল ডেটা সোর্সের সাথে সংযোগ স্থাপন করতে সাহায্য করে, যা আমাদের ক্ষেত্রে হলো Vertex AI Gemini Pro API।
BigLake সংযোগ তৈরি করতে, নিম্নলিখিতগুলি করুন:
- BigQuery পেজের Explorer প্যানে Add- এ ক্লিক করুন।

- বাহ্যিক ডেটা উৎসের সাথে সংযোগ করতে ক্লিক করুন।
- কানেকশন টাইপ লিস্ট থেকে ভার্টেক্স এআই রিমোট মডেল, রিমোট ফাংশন এবং বিগলেক (ক্লাউড রিসোর্স) সিলেক্ট করুন।
- কানেকশন আইডি ফিল্ডে আপনার কানেকশনের নাম
gemini-bq-connহিসেবে লিখুন। - আপনার অবস্থানের ধরণ হিসেবে
Multi-regionসেট করুন এবং ডিফল্ট মানটি গ্রহণ করুন, যা হলোUS(multiple regions in United States. - সংযোগ তৈরি করুন -এ ক্লিক করুন।
- 'Go to connection'-এ ক্লিক করুন এবং তারপরে 'Connection info' প্যানে থেকে সার্ভিস অ্যাকাউন্ট আইডিটি কপি করুন।

- IAM ও অ্যাডমিন পেজে যান এবং 'অ্যাক্সেস দিন'-এ ক্লিক করুন।
- সার্ভিস অ্যাকাউন্ট আইডিটি 'নতুন নীতি' ফিল্ডে পেস্ট করুন।
- রোল তালিকা থেকে
Vertex AI userরোলটি নির্বাচন করুন, এবং তারপর সেভ-এ ক্লিক করুন।

আপনি এখন সফলভাবে ডেটাসেট এবং BigQuery সংযোগ তৈরি করেছেন।
৬. জেমিনি ফাংশন কলিং (জাভা ক্লাউড ফাংশন) স্থাপন করুন
জেমিনি ফাংশন কলিং অন্তর্ভুক্ত জাভা ক্লাউড ফাংশনটি ডিপ্লয় করতে এই ধাপগুলো অনুসরণ করুন।
- আপনার ক্লাউড শেল টার্মিনাল থেকে নিম্নলিখিত কমান্ডটি ব্যবহার করে গিটহাব রিপোজিটরিটি ক্লোন করুন:
git clone https://github.com/AbiramiSukumaran/GeminiFunctionCalling
-
YOUR_API_KEYএবংYOUR_PROJECT_IDপ্লেসহোল্ডারগুলিতে আপনার মানগুলি প্রতিস্থাপন করুন।
আপনি যদি এখানকার ব্লগটি পড়েন, তাহলে জানতে পারবেন যে ফাংশন কলিং ইমপ্লিমেন্টেশনগুলো রিভার্স জিওকোডিং এপিআই (Reverse Geocoding API) ব্যবহার করে। আপনি এখানকার নির্দেশাবলী থেকে আপনার নিজস্ব API_KEY তৈরি করতে পারেন।
- ক্লাউড শেল টার্মিনালে, নতুন ক্লোন করা প্রজেক্ট ডিরেক্টরি GeminiFunctionCalling- এ যান এবং ক্লাউড ফাংশনটি বিল্ড ও ডিপ্লয় করতে নিম্নলিখিত স্টেটমেন্টটি চালান:
gcloud functions deploy gemini-fn-calling --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http
যখন আপনাকে "Allow unauthenticated invocations" প্রশ্নগুলি জিজ্ঞাসা করা হবে, তখন "y" বলুন। সুপারিশ অনুযায়ী, আদর্শগতভাবে আপনার এন্টারপ্রাইজ অ্যাপ্লিকেশনগুলির জন্য অথেনটিকেশন সেট আপ করা উচিত। কিন্তু যেহেতু এটি একটি ডেমো অ্যাপ, তাই আমরা অথেনটিকেশন ছাড়াই এগিয়ে যাব।
আউটপুটটি নিম্নলিখিত বিন্যাসে একটি REST URL:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling
- টার্মিনাল থেকে নিম্নলিখিত কমান্ডটি চালিয়ে এই ক্লাউড ফাংশনটি পরীক্ষা করুন:
gcloud functions call gemini-fn-calling --region=us-central1 --gen2 --data '{"calls":[["40.714224,-73.961452"]]}'
দৈবচয়নের ভিত্তিতে নমুনা সংগ্রহের নির্দেশনার উত্তর:
'{"replies":["{ \"DOOR_NUMBER\": \"277\", \"STREET_ADDRESS\": \"Bedford Ave\", \"AREA\":
null, \"CITY\": \"Brooklyn\", \"TOWN\": null, \"COUNTY\": \"Kings County\", \"STATE\":
\"NY\", \"COUNTRY\": \"USA\", \"ZIPCODE\": \"11211\", \"LANDMARK\": null}}```"]}'
এই ক্লাউড ফাংশনের রিকোয়েস্ট এবং রেসপন্স প্যারামিটারগুলো এমনভাবে প্রয়োগ করা হয়েছে যা BigQuery-এর রিমোট ফাংশন ইনভোকেশনের সাথে সামঞ্জস্যপূর্ণ। এটি BigQuery ডেটা থেকে সরাসরি ইন-প্লেস ব্যবহার করা যায়। এর মানে হলো, যদি আপনার ডেটা ইনপুট (lat এবং long ডেটা) BigQuery-তে থাকে, তাহলে আপনি সেই ডেটার উপর রিমোট ফাংশনটি কল করে ফাংশনের রেসপন্স পেতে পারেন, যা সরাসরি BigQuery-এর মধ্যেই সংরক্ষণ বা প্রসেস করা যাবে।
- এই ডেপ্লয় করা ক্লাউড ফাংশনটিকে কল করার জন্য একটি রিমোট ফাংশন তৈরি করতে BigQuery থেকে নিম্নলিখিত DDL-টি চালান:
CREATE OR REPLACE FUNCTION
`mdm_gemini.MDM_GEMINI` (latlng STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (
endpoint = 'https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling', max_batching_rows = 1
);
নতুন তৈরি করা রিমোট ফাংশনটি ব্যবহার করার জন্য টেস্ট কোয়েরি:
SELECT mdm_gemini.MDM_GEMINI (latlong) from mdm_gemini.CITIBIKE_STATIONS limit 1;
BigQuery-তে তৈরি করা নতুন রিমোট ফাংশন ব্যবহার করা টেস্ট কোয়েরিটি যদি Cloud Functions-এর পারমিশন সংক্রান্ত সমস্যার কারণে ব্যর্থ হয়, তাহলে Google Cloud Console থেকে Cloud Functions-এ যান এবং " gemini-fn-calling" নামের ডেপ্লয় করা Cloud Function-টি খুঁজুন। পারমিশন ট্যাবে গিয়ে, প্রিন্সিপাল হিসেবে "allUsers" যোগ করুন এবং "Cloud Functions Invoker" রোলটি প্রদান করুন, যাতে Cloud Functions-টি সকল ব্যবহারকারীর জন্য অ্যাক্সেসযোগ্য হয় (শুধুমাত্র এটি একটি ডেমো অ্যাপ বলে)।
৭. একটি বিকল্প উপায় চেষ্টা করুন
যদি কোনো কারণে আপনার কাছে রিভার্স জিওকোডিং ফাংশন কলিং পদ্ধতির জন্য প্রয়োজনীয় API_KEY না থাকে, অথবা ক্লাউড ফাংশনটি ডেপ্লয় করা না থাকে, তাহলে বিকল্প হিসেবে আপনি নিম্নলিখিত কাজটি করতে পারেন:
- রিপোজিটরি থেকে CITIBIKE_STATIONS.csv ফাইলটি আপনার ক্লাউড শেল প্রজেক্ট ফোল্ডারে ডাউনলোড করুন এবং সেই ফোল্ডারে প্রবেশ করুন।
- ক্লাউড শেল টার্মিনালে নিম্নলিখিত কমান্ডটি ব্যবহার করে csv থেকে আপনার নতুন BigQuery ডেটাসেট
mdm_geminiতে ডেটা এক্সপোর্ট করুন:
bq load --source_format=CSV --skip_leading_rows=1 mdm_gemini.CITIBIKE_STATIONS ./CITIBIKE_STATIONS.csv \ name:string,latlng:string,capacity:numeric,num_bikes_available:numeric,num_docks_available:numeric,last_reported:timestamp,full_address_string:string
৮. টেবিল তৈরি করুন এবং ঠিকানার ডেটা সমৃদ্ধ করুন।
ধাপ ১: টেবিলটি তৈরি করুন
গুরুত্বপূর্ণ: আপনি যদি বিকল্প পদ্ধতিটি ব্যবহার করে থাকেন, তাহলে এই ধাপটি এড়িয়ে যান, কারণ আপনি ইতিমধ্যেই টেবিলটি তৈরি করে ফেলেছেন।
যদি আপনি বিকল্প পদ্ধতিটি ব্যবহার না করে থাকেন, তাহলে BigQuery SQL Editor-এ নিম্নলিখিত DDL-টি চালান:
CREATE TABLE mdm_gemini.CITIBIKE_STATIONS as (
select name, latitude || ',' || longitude as latlong, capacity, num_bikes_available, num_docks_available,last_reported,
'' as full_address_string
from bigquery-public-data.new_york_citibike.citibike_stations) ;
এখন টেবিলে থাকা অক্ষাংশ এবং দ্রাঘিমাংশের স্থানাঙ্কের উপর রিমোট ফাংশনটি প্রয়োগ করে ঠিকানার ডেটা আরও সমৃদ্ধ করা যাক। ডেটার জন্য নিম্নলিখিত শর্তগুলো নির্ধারণ করুন:
- ২০২৪ সালে রিপোর্ট করা হয়েছে
- উপলব্ধ বাইকের সংখ্যা > ০
- ধারণক্ষমতা > ১০০
নিম্নলিখিত কোয়েরিটি চালান:
update `mdm_gemini.CITIBIKE_STATIONS`
set full_address_string = `mdm_gemini.MDM_GEMINI`(latlong)
where EXTRACT(YEAR FROM last_reported) = 2024 and num_bikes_available > 0 and capacity > 100;
ধাপ ২: বাইক স্টেশনের অবস্থানের ডেটার জন্য একটি দ্বিতীয় উৎস তৈরি করুন।
টেবিলটি তৈরি করার জন্য আপনি বিকল্প পদ্ধতি ব্যবহার করলেও এই ধাপটি এড়িয়ে যাবেন না।
এই ধাপে, এই কোডল্যাবের উদ্দেশ্যে আপনি বাইক স্টেশনের অবস্থানের ডেটার জন্য একটি দ্বিতীয় উৎস তৈরি করবেন। এর মাধ্যমে দেখানো হবে যে, MDM একাধিক উৎস থেকে ডেটা একত্রিত করে আসল তথ্যটি শনাক্ত করছে।
দুটি রেকর্ড সহ অবস্থানের ডেটার দ্বিতীয় উৎস তৈরি করার জন্য BigQuery SQL Editor-এ নিম্নলিখিত DDL-গুলো চালান। চলুন এই টেবিলটির নাম দিই mdm_gemini.CITIBIKE_STATIONS_SOURCE2 এবং এতে দুটি রেকর্ড ইনসার্ট করি।
CREATE TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE2 (name STRING(55), address STRING(1000), embeddings_src ARRAY<FLOAT64>);
insert into mdm_gemini.CITIBIKE_STATIONS_SOURCE2 VALUES ('Location broadway and 29','{ "DOOR_NUMBER": "1593", "STREET_ADDRESS": "Broadway", "AREA": null, "CITY": "New York", "TOWN": null, "COUNTY": "New York County", "STATE": "NY", "COUNTRY": "USA", "ZIPCODE": "10019", "LANDMARK": null}', null);
insert into mdm_gemini.CITIBIKE_STATIONS_SOURCE2 VALUES ('Allen St & Hester','{ "DOOR_NUMBER": "36", "STREET_ADDRESS": "Allen St", "AREA": null, "CITY": "New York", "TOWN": null, "COUNTY": "New York County", "STATE": "NY", "COUNTRY": "USA", "ZIPCODE": "10002", "LANDMARK": null}', null);
৯. ঠিকানা ডেটার জন্য এমবেডিং তৈরি করুন
এমবেডিং হলো উচ্চ-মাত্রিক সাংখ্যিক ভেক্টর যা কোনো প্রদত্ত সত্তাকে, যেমন কোনো লেখা বা অডিও ফাইলকে, উপস্থাপন করে। মেশিন লার্নিং (ML) মডেলগুলো এই ধরনের সত্তা সম্পর্কে অর্থ বা তাৎপর্য এনকোড করতে এমবেডিং ব্যবহার করে, যাতে সেগুলোকে বোঝা এবং তুলনা করা সহজ হয়। উদাহরণস্বরূপ, ক্লাস্টারিং, ক্লাসিফিকেশন এবং রিকমেন্ডেশন মডেলের একটি সাধারণ কাজ হলো এমবেডিং স্পেসের ভেক্টরগুলোর মধ্যে দূরত্ব পরিমাপ করে সবচেয়ে অর্থগতভাবে সাদৃশ্যপূর্ণ আইটেমগুলো খুঁজে বের করা। Vertex AI টেক্সট-এমবেডিংস API আপনাকে Vertex AI-এর জেনারেটিভ AI ব্যবহার করে একটি টেক্সট এমবেডিং তৈরি করতে দেয়। টেক্সট এমবেডিং হলো লেখার সাংখ্যিক উপস্থাপনা যা শব্দ এবং বাক্যাংশের মধ্যেকার সম্পর্ককে ধারণ করে। Vertex AI টেক্সট এমবেডিংস সম্পর্কে আরও জানতে এখানে পড়ুন।
- Vertex AI টেক্সট এমবেডিংস API-এর জন্য একটি রিমোট মডেল তৈরি করতে নিচের DDL-টি চালান:
CREATE OR REPLACE MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (ENDPOINT = 'textembedding-gecko@latest');
- এখন যেহেতু রিমোট এমবেডিংস মডেলটি প্রস্তুত, চলুন নিম্নলিখিত কোয়েরিটি ব্যবহার করে প্রথম সোর্সের জন্য এমবেডিংস তৈরি করি এবং একটি টেবিলে তা সংরক্ষণ করি:
CREATE TABLE `mdm_gemini.CITIBIKE_STATIONS_SOURCE1` AS (
SELECT *
FROM ML.GENERATE_EMBEDDING(
MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`,
( select name, full_address_string as content from `mdm_gemini.CITIBIKE_STATIONS`
where full_address_string is not null )
)
);
নতুন টেবিল তৈরি করার পরিবর্তে, আপনি পূর্বে তৈরি করা একই mdm_gemini.CITIBIKE_STATIONS টেবিলে এমবেডিংস রেজাল্ট ফিল্ডটি সংরক্ষণ করতে পারেন।
- CITIBIKE_STATIONS_SOURCE2 টেবিলের ঠিকানা ডেটার জন্য এমবেডিং তৈরি করতে, নিম্নলিখিত কোয়েরিটি চালান:
update `mdm_gemini.CITIBIKE_STATIONS_SOURCE2` a set embeddings_src =
(
SELECT ml_generate_embedding_result
FROM ML.GENERATE_EMBEDDING(
MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`,
( select name, address as content from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2` ))
where name = a.name) where name is not null;
এটি দ্বিতীয় উৎসের জন্য এমবেডিং তৈরি করবে। উল্লেখ্য যে, আমরা CITIBIKE_STATIONS_SOURCE2 একই টেবিলে এমবেডিং ফিল্ডটি তৈরি করেছি।
- উৎস ডেটা টেবিল ১ এবং ২-এর জন্য তৈরি এমবেডিংগুলো দেখার জন্য, নিম্নলিখিত কোয়েরিটি চালান:
select name,address,embeddings_src from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2`;
select name,content,ml_generate_embedding_result from `mdm_gemini.CITIBIKE_STATIONS_SOURCE1`;
এবার ডুপ্লিকেট শনাক্ত করার জন্য একটি ভেক্টর সার্চ করা যাক।
১০. সদৃশ ঠিকানা চিহ্নিত করার জন্য একটি ভেক্টর অনুসন্ধান চালান।
এই ধাপে, আপনি mdm_gemini.CITIBIKE_STATIONS_SOURCE2 টেবিলের embeddings_src কলামের প্রতিটি ডেটা সারির সাথে মেলে এমন শীর্ষ দুটি এমবেডিং খুঁজে বের করার জন্য mdm_gemini.CITIBIKE_STATIONS_SOURCE1 টেবিলের ml_generate_embedding_result কলামে অনুসন্ধান করবেন।
এটি করার জন্য, নিম্নলিখিত কোয়েরিটি চালান:
select query.name name1,base.name name2,
/* (select address from mdm_gemini.CITIBIKE_STATIONS_SOURCE2 where name = query.name) content1, base.content content2, */
distance
from VECTOR_SEARCH(
TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE1,
'ml_generate_embedding_result',
(SELECT * FROM mdm_gemini.CITIBIKE_STATIONS_SOURCE2),
'embeddings_src',
top_k => 2
) where query.name <> base.name
order by distance desc;
যে টেবিলটি আমরা কোয়েরি করছি: mdm_gemini.CITIBIKE_STATIONS_SOURCE1 ml_generate_embedding_result ফিল্ডের উপর।
যে টেবিলটি আমরা ভিত্তি হিসেবে ব্যবহার করি: mdm_gemini.CITIBIKE_STATIONS_SOURCE2 যার embeddings_src ফিল্ডটি রয়েছে।
top_k: কতগুলো নিকটতম প্রতিবেশী ফেরত দেওয়া হবে তা নির্দিষ্ট করে। এর ডিফল্ট মান হলো ১০। একটি ঋণাত্মক মানকে অসীম হিসেবে গণ্য করা হয়, যার অর্থ হলো সমস্ত মানকেই প্রতিবেশী হিসেবে গণনা করে ফেরত দেওয়া হয়।
distance_type: দুটি ভেক্টরের মধ্যে দূরত্ব গণনা করার জন্য ব্যবহৃত মেট্রিকের ধরন নির্দিষ্ট করে। সমর্থিত দূরত্বের ধরণগুলো হলো ইউক্লিডীয় এবং কোসাইন । ডিফল্ট হলো ইউক্লিডীয় ।
কোয়েরিটির ফলাফল নিম্নরূপ:

যেমনটি আপনি দেখতে পাচ্ছেন, এটি CITIBIKE_STATIONS_SOURCE1 থেকে CITIBIKE_STATIONS_SOURCE2 এর দুটি সারির জন্য দুটি নিকটতম প্রতিবেশী (অন্য কথায়, সবচেয়ে কাছের সদৃশ) তালিকাভুক্ত করেছে। যেহেতু distance_type অনির্দিষ্ট, তাই এটি ধরে নেয় যে দূরত্বটি ইউক্লিডিয়ান এবং দূরত্বটি দুটি উৎসের মধ্যে address TEXT মানের দূরত্ব হিসাবে পড়া হয়, যেখানে সর্বনিম্ন মানটি সবচেয়ে সাদৃশ্যপূর্ণ address text-কে নির্দেশ করে।
নিচের কোয়েরিটি ব্যবহার করে distance_type কে Cosine- এ সেট করা যাক:
select query.name name1,base.name name2,
/* (select address from mdm_gemini.CITIBIKE_STATIONS_SOURCE2 where name = query.name) content1, base.content content2, */
distance
from VECTOR_SEARCH(
TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE1,
'ml_generate_embedding_result',
(SELECT * FROM mdm_gemini.CITIBIKE_STATIONS_SOURCE2),
'embeddings_src',
top_k => 2,distance_type => 'COSINE'
) where query.name <> base.name
order by distance desc;
কোয়েরিটির ফলাফল নিম্নরূপ:

উভয় কোয়েরিই (উভয় ধরনের দূরত্বের) দূরত্ব অনুসারে অবরোহী ক্রমে সাজানো হয়েছে, যার অর্থ হলো আমরা ফলাফলগুলোকে দূরত্বের ক্রমহ্রাসমান অনুসারে তালিকাভুক্ত করতে চাই। কিন্তু আপনি লক্ষ্য করবেন যে দ্বিতীয় কোয়েরিটির দূরত্বের ক্রমটি উল্টো। আপনি কি অনুমান করতে পারেন এর কারণ কী?
হ্যাঁ!! আপনি ঠিক ধরেছেন! কোসাইন সিমিলারিটিতে, সংখ্যা যত বড় হয়, সাদৃশ্য তত বেশি এবং দূরত্ব তত কম হয়। ইউক্লিডিয়ান ডিসট্যান্সে, সংখ্যা যত বড় হয়, মানগুলোর মধ্যে দূরত্ব তত বেশি হয়।
MDM বোঝার বিষয়ে আরও তথ্যের জন্য এবং ইউক্লিডিয়ান ও কোসাইনের পার্থক্য ও প্রয়োগ বোঝার কৌশল জানতে ব্লগটি পড়ুন।
১১. পরিষ্কার করুন
এই পোস্টে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, এই ধাপগুলো অনুসরণ করুন:
- গুগল ক্লাউড কনসোলে, রিসোর্স পরিচালনা (Manage resources) পৃষ্ঠায় যান।
- প্রজেক্ট তালিকা থেকে, আপনি যে প্রজেক্টটি মুছতে চান সেটি নির্বাচন করুন এবং তারপর ডিলিট বোতামে ক্লিক করুন।
- ডায়ালগ বক্সে প্রজেক্ট আইডি টাইপ করুন এবং তারপর প্রজেক্টটি মুছে ফেলার জন্য 'শাট ডাউন'-এ ক্লিক করুন।
- আপনি যদি আপনার প্রজেক্টটি রাখতে চান, তাহলে উপরের ধাপগুলো এড়িয়ে যান এবং Cloud Functions-এ গিয়ে ফাংশনগুলোর তালিকা থেকে আপনি যেটি মুছতে চান সেটি চেক করে Delete-এ ক্লিক করুন।
১২. অভিনন্দন
অভিনন্দন! আপনি জেমিনি ১.০ প্রো এবং ফাংশন কলিং ব্যবহার করে কয়েকটি এমডিএম কার্যক্রমকে সরলীকৃত অথচ শক্তিশালী, ডিটারমিনিস্টিক এবং নির্ভরযোগ্য জেনারেটিভ এআই ক্ষমতায় রূপান্তরিত করার শক্তি প্রদর্শন করেছেন। এখন যেহেতু আপনি জানেন, একই ইউজ কেস বা অন্যান্য এমডিএম কার্যকারিতা বাস্তবায়নের অন্যান্য উপায় খুঁজে বের করতে পারেন। এমন কোনো ডেটাসেট আছে যা আপনি যাচাই করতে পারেন, তথ্যের ঘাটতি পূরণ করতে পারেন, অথবা এমন কোনো কাজ আছে যা আপনার জেনারেটিভ এআই প্রতিক্রিয়ার মধ্যে এমবেড করা স্ট্রাকচার্ড কলের মাধ্যমে স্বয়ংক্রিয় করা যেতে পারে? আরও বিস্তারিত নির্দেশনার জন্য ভার্টেক্স এআই , বিগকোয়েরি রিমোট ফাংশন , ক্লাউড ফাংশন , এমবেডিংস এবং ভেক্টর সার্চ -এর ডকুমেন্টেশন দেখুন। এই প্রজেক্টটির গিটহাব রিপো এখানে দেওয়া হলো। এই শিক্ষা দিয়ে আপনি কী তৈরি করেন তা আমাদের জানান!