ভেক্টর এমবেডিংয়ের জন্য textembedding-gecko@003 ব্যবহার করা হচ্ছে

১. ভূমিকা

সর্বশেষ হালনাগাদ: ২০২৪-০৪-০৮

টেক্সট এমবেডিং

টেক্সট এমবেডিং বলতে পাঠ্য তথ্যকে সাংখ্যিক উপস্থাপনায় রূপান্তর করার প্রক্রিয়াকে বোঝায়। এই সাংখ্যিক উপস্থাপনাগুলো, যা প্রায়শই ভেক্টর হয়, একটি পাঠ্যের শব্দগুলোর অর্থগত তাৎপর্য এবং তাদের মধ্যকার সম্পর্ককে ধারণ করে। বিষয়টিকে এভাবে কল্পনা করুন:

লেখা একটি জটিল ভাষার মতো, যা সূক্ষ্মতা ও অস্পষ্টতায় পরিপূর্ণ।

টেক্সট এমবেডিং সেই ভাষাকে একটি সরলতর, গাণিতিক বিন্যাসে রূপান্তরিত করে যা কম্পিউটার বুঝতে ও ব্যবহার করতে পারে।

টেক্সট এমবেডিংয়ের সুবিধা

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

টেক্সট এমবেডিংয়ের ব্যবহার

টেক্সট এমবেডিং, টেক্সটকে সাংখ্যিক উপস্থাপনায় রূপান্তরিত করার মাধ্যমে, ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং (NLP)-এ বিভিন্ন ধরনের অ্যাপ্লিকেশনের দ্বার উন্মোচন করে। এখানে এর কিছু প্রধান ব্যবহার তুলে ধরা হলো:

১. সার্চ ইঞ্জিন ও তথ্য পুনরুদ্ধার:

টেক্সট এমবেডিং সার্চ ইঞ্জিনকে কোয়েরির পেছনের অর্থ বুঝতে এবং প্রাসঙ্গিক ডকুমেন্টের সাথে মেলাতে সাহায্য করে, এমনকি যদি হুবহু কীওয়ার্ডগুলো উপস্থিত না-ও থাকে।

কোনো সার্চ কোয়েরির এমবেডিংয়ের সাথে ডকুমেন্ট এমবেডিংয়ের তুলনা করে সার্চ ইঞ্জিনগুলো একই ধরনের বিষয় বা ধারণা নিয়ে তৈরি ডকুমেন্ট শনাক্ত করতে পারে।

২. সুপারিশ ব্যবস্থা:

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

এরপর সিস্টেমটি ব্যবহারকারীর দেখা পণ্য, নিবন্ধ বা অন্যান্য কন্টেন্টের এমবেডিং তুলনা করে অনুরূপ আইটেম সুপারিশ করতে পারে।

৩. রচনাচুরি শনাক্তকরণ:

দুটি পাঠ্যাংশের এমবেডিং তুলনা করলে তাদের শব্দার্থগত কাঠামোর উল্লেখযোগ্য সাদৃশ্য খুঁজে বের করার মাধ্যমে সম্ভাব্য রচনাচুরি শনাক্ত করা যেতে পারে।

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

টেক্সটএম্বেডিং-গেকো@০০৩

Textembedding-gecko@003 হলো একটি প্রি-ট্রেইনড টেক্সট এমবেডিং মডেলের বিশেষ সংস্করণ, যা গুগল ক্লাউড প্ল্যাটফর্ম (GCP) ভার্টেক্স এআই এবং তাদের এআই টুল ও পরিষেবাগুলোর মাধ্যমে প্রদান করে।

আপনি যা তৈরি করবেন

এই কোডল্যাবে, আপনি একটি পাইথন স্ক্রিপ্ট তৈরি করবেন। এই স্ক্রিপ্টটি যা করবে:

  • Vertex API ব্যবহার করে textembedding-gecko@003-কে কল করুন এবং টেক্সটকে টেক্সট এমবেডিং (ভেক্টর)-এ রূপান্তর করুন।
  • টেক্সট এবং তাদের ভেক্টর দিয়ে একটি সিমুলেটেড ডেটাবেস তৈরি করুন।
  • ভেক্টরগুলো তুলনা করে আমাদের সিমুলেটেড ভেক্টর ডেটাবেসে একটি কোয়েরি চালান এবং সবচেয়ে সম্ভাব্য প্রতিক্রিয়াটি পান।

আপনি যা শিখবেন

  • GCP-তে টেক্সট এমবেডিং কীভাবে ব্যবহার করবেন
  • কিভাবে টেক্সটেমবেডিং-gecko@003 কল করবেন
  • ওয়ার্কবেঞ্চে এটি কীভাবে চালাবেন
  • স্ক্রিপ্ট চালানোর জন্য কীভাবে Vertex AI - Workbench ব্যবহার করবেন

আপনার যা যা লাগবে

  • ক্রোমের একটি সাম্প্রতিক সংস্করণ
  • পাইথন সম্পর্কে জ্ঞান
  • একটি গুগল ক্লাউড প্রজেক্ট
  • ভার্টেক্স এআই - ওয়ার্কবেঞ্চে অ্যাক্সেস

২. প্রস্তুতি গ্রহণ

একটি ভার্টেক্স এআই ওয়ার্কবেঞ্চ ইনস্ট্যান্স তৈরি করুন

  1. গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন।
  1. প্রজেক্ট সিলেক্টরে যান
  2. আপনার গুগল ক্লাউড প্রোজেক্টের জন্য বিলিং চালু আছে কিনা, তা নিশ্চিত করুন।
  3. নোটবুক এপিআই সক্রিয় করুন।

আপনি গুগল ক্লাউড কনসোল, gcloud CLI, অথবা Terraform ব্যবহার করে একটি Vertex AI Workbench ইনস্ট্যান্স তৈরি করতে পারেন। এই টিউটোরিয়ালের জন্য, আমরা গুগল ক্লাউড কনসোল ব্যবহার করে এটি তৈরি করব। অন্যান্য পদ্ধতিগুলো সম্পর্কে আরও তথ্য এখানে পাওয়া যাবে।

  1. গুগল ক্লাউড কনসোলে, Vertex AI মেনুর নোটবুকস সেকশন থেকে ইনস্ট্যান্সেস পেজে যান এবং ওয়ার্কবেঞ্চ-এ ক্লিক করুন। 56c087d619c464dd.png
  2. ইনস্ট্যান্স-এ যান।
  3. নতুন তৈরি করুন-এ ক্লিক করুন। 381ff9b895e77641.png
  4. ইনস্ট্যান্স তৈরি করুন ডায়ালগ বক্সের 'বিবরণ' বিভাগে, আপনার নতুন ইনস্ট্যান্সের জন্য নিম্নলিখিত তথ্য প্রদান করুন:

নাম : আপনার নতুন ইনস্ট্যান্সের জন্য একটি নাম দিন। নামটি অবশ্যই একটি অক্ষর দিয়ে শুরু হতে হবে এবং এর পরে সর্বাধিক ৬২টি ছোট হাতের অক্ষর, সংখ্যা বা হাইফেন (-) থাকতে হবে, এবং নামটি হাইফেন দিয়ে শেষ হতে পারবে না।

অঞ্চল ও জোন : নতুন ইনস্ট্যান্সটির জন্য একটি অঞ্চল ও জোন নির্বাচন করুন। সর্বোত্তম নেটওয়ার্ক পারফরম্যান্সের জন্য, আপনার ভৌগোলিকভাবে নিকটতম অঞ্চলটি নির্বাচন করুন।

জিপিইউ ইনস্টল করার প্রয়োজন নেই

নেটওয়ার্কিং বিভাগে নিম্নলিখিত তথ্যগুলো প্রদান করুন:

নেটওয়ার্কিং : আপনার বর্তমান প্রজেক্টের কোনো নেটওয়ার্ক অথবা হোস্ট প্রজেক্টের কোনো শেয়ার্ড ভিপিসি (Shared VPC) নেটওয়ার্ক (যদি কনফিগার করা থাকে) ব্যবহার করার জন্য নেটওয়ার্ক অপশনগুলো অ্যাডজাস্ট করুন। আপনি যদি হোস্ট প্রজেক্টে একটি শেয়ার্ড ভিপিসি ব্যবহার করেন, তবে আপনাকে অবশ্যই সার্ভিস প্রজেক্ট থেকে নোটবুকস সার্ভিস এজেন্টকে কম্পিউট নেটওয়ার্ক ইউজার (Compute Network User) রোলটি (roles/compute.networkUser) প্রদান করতে হবে।

নেটওয়ার্ক ফিল্ডে : আপনার পছন্দের নেটওয়ার্কটি নির্বাচন করুন। আপনি একটি VPC নেটওয়ার্কও নির্বাচন করতে পারেন, তবে শর্ত হলো নেটওয়ার্কটিতে প্রাইভেট গুগল অ্যাক্সেস সক্রিয় থাকতে হবে অথবা এটি ইন্টারনেট অ্যাক্সেস করতে সক্ষম হতে হবে।

সাবনেটওয়ার্ক ফিল্ডে: আপনার পছন্দের সাবনেটওয়ার্কটি নির্বাচন করুন। আপনি ডিফল্টটি বেছে নিতে পারেন।

ইনস্ট্যান্স প্রপার্টিজে আপনি ডিফল্টটিই রাখতে পারেন, অর্থাৎ, একটি e2-standard-4।

d47bdc2d7f516c46.png

  1. Create-এ ক্লিক করুন।

ভার্টেক্স এআই ওয়ার্কবেঞ্চ একটি ইনস্ট্যান্স তৈরি করে এবং স্বয়ংক্রিয়ভাবে তা চালু করে। ইনস্ট্যান্সটি ব্যবহারের জন্য প্রস্তুত হলে, ভার্টেক্স এআই ওয়ার্কবেঞ্চ একটি ‘ওপেন জুপিটারল্যাব’ লিঙ্ক সক্রিয় করে। সেটিতে ক্লিক করুন।

একটি পাইথন ৩ নোটবুক তৈরি করুন

  1. Jupyterlab-এর ভিতরে, লঞ্চার থেকে, নোটবুক বিভাগে, Python লোগোযুক্ত এবং Python3 লেখা আইকনটিতে ক্লিক করুন। e16bb118cd28256f.png
  2. Untitled নামে এবং ipynb এক্সটেনশন দিয়ে একটি Jupyter নোটবুক তৈরি করা হয়। da9bd34cf307156c.png
  3. আপনি বাম দিকের ফাইল ব্রাউজার অংশ ব্যবহার করে এটির নাম পরিবর্তন করতে পারেন অথবা এটিকে যেমন আছে তেমনই রেখে দিতে পারেন।

এখন, আমরা নোটবুকে আমাদের কোড লেখা শুরু করতে পারি।

৩. প্রয়োজনীয় লাইব্রেরিগুলো ইম্পোর্ট করা

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

আমাদের যা যা লাগবে:

  1. নাম্পাই
  2. পান্ডা
  3. textEmbeddingInput, TextEmbeddingModel from vertexai.language_models

নিচের কোডটি একটি সেলে কপি করে পেস্ট করুন:

from vertexai.language_models import TextEmbeddingInput, TextEmbeddingModel

import numpy as np
import pandas as pd

এটা দেখতে অনেকটা এইরকম হবে:

6852d323eedcac93.png

৪. একটি সিমুলেটেড ভেক্টর ডাটাবেস তৈরি করুন

আমাদের কোড পরীক্ষা করার জন্য, আমরা gecko@003 টেক্সট এমবেডিং মডেল ব্যবহার করে অনূদিত টেক্সট এবং তাদের নিজ নিজ ভেক্টর দিয়ে একটি ডেটাবেস তৈরি করব।

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

আমাদের ভেক্টর ডাটাবেসে ৩টি রেকর্ড থাকবে, আমরা এটি এভাবে তৈরি করব:

নিচের কোডটি কপি করে একটি নতুন সেলে পেস্ট করুন।

DOCUMENT1 = {
    "title": "Operating the Climate Control System",
    "content": "Your Googlecar has a climate control system that allows you to adjust the temperature and airflow in the car. To operate the climate control system, use the buttons and knobs located on the center console.  Temperature: The temperature knob controls the temperature inside the car. Turn the knob clockwise to increase the temperature or counterclockwise to decrease the temperature. Airflow: The airflow knob controls the amount of airflow inside the car. Turn the knob clockwise to increase the airflow or counterclockwise to decrease the airflow. Fan speed: The fan speed knob controls the speed of the fan. Turn the knob clockwise to increase the fan speed or counterclockwise to decrease the fan speed. Mode: The mode button allows you to select the desired mode. The available modes are: Auto: The car will automatically adjust the temperature and airflow to maintain a comfortable level. Cool: The car will blow cool air into the car. Heat: The car will blow warm air into the car. Defrost: The car will blow warm air onto the windshield to defrost it."}

DOCUMENT2 = {
    "title": "Touchscreen",
    "content": "Your Googlecar has a large touchscreen display that provides access to a variety of features, including navigation, entertainment, and climate control. To use the touchscreen display, simply touch the desired icon.  For example, you can touch the \"Navigation\" icon to get directions to your destination or touch the \"Music\" icon to play your favorite songs."}

DOCUMENT3 = {
    "title": "Shifting Gears",
    "content": "Your Googlecar has an automatic transmission. To shift gears, simply move the shift lever to the desired position.  Park: This position is used when you are parked. The wheels are locked and the car cannot move. Reverse: This position is used to back up. Neutral: This position is used when you are stopped at a light or in traffic. The car is not in gear and will not move unless you press the gas pedal. Drive: This position is used to drive forward. Low: This position is used for driving in snow or other slippery conditions."}

documents = [DOCUMENT1, DOCUMENT2, DOCUMENT3]

df_initial_db = pd.DataFrame(documents)
df_initial_db.columns = ['Title', 'Text']
df_initial_db

এটা দেখতে এইরকম হবে:

26baa3b876c0605d.png

চলুন কোডটি বিশ্লেষণ করা যাক।

DOCUMENT1, DOCUMENT2 এবং DOCUMENT3 ভেরিয়েবলগুলোতে আমরা একটি ডিকশনারি সংরক্ষণ করছি যা শিরোনাম এবং বিষয়বস্তুসহ ডকুমেন্টগুলোর অনুকরণ করবে। এই "ডকুমেন্টগুলো" গুগলের তৈরি একটি গাড়ির সিমুলেটেড ম্যানুয়ালকে নির্দেশ করছে।

পরবর্তী লাইনে, আমরা ঐ ৩টি ডকুমেন্ট (ডিকশনারি) থেকে একটি লিস্ট তৈরি করি।

documents = [DOCUMENT1, DOCUMENT2, DOCUMENT3]

অবশেষে, pandas ব্যবহার করে আমরা সেই তালিকাটি থেকে একটি ডেটাফ্রেম তৈরি করব, যার নাম হবে df_initial_db।

df_initial_db = pd.DataFrame(documents)
df_initial_db.columns = ['Title', 'Text']
df_initial_db

৫. টেক্সট এমবেডিং তৈরি করুন

এখন আমরা আমাদের সিমুলেটেড ডকুমেন্ট ডেটাবেসের প্রতিটি রেকর্ডের জন্য gecko@003 মডেল ব্যবহার করে একটি টেক্সট এমবেডিং পাব।

নিচের কোডটি কপি করে একটি নতুন সেলে পেস্ট করুন:

def embed_fn(df_input):
    list_embedded_values = []
    for index, row in df_input.iterrows():        
        model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
        embeddings = model.get_embeddings([(row['Text'])])        
        list_embedded_values.append(embeddings[0].values)
    df_input['Embedded text'] = list_embedded_values
    return df_input        
                                           
df_embedded_values_db = embed_fn(df_initial_db)
df_embedded_values_db      

এটা দেখতে এইরকম হবে:

4c4af091c7a82861.png

চলুন কোডটি বিশ্লেষণ করা যাক।

আমরা embed_fn নামে একটি ফাংশন সংজ্ঞায়িত করেছি, যা ইনপুট হিসেবে একটি পান্ডাস ডেটাফ্রেম গ্রহণ করবে, যেটিতে এমবেডিং করার জন্য টেক্সট থাকবে। এরপর ফাংশনটি টেক্সটটিকে একটি ভেক্টর হিসেবে এনকোড করে রিটার্ন করবে।

def embed_fn(df_input):
    list_embedded_values = []
    for index, row in df_input.iterrows():        
        model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
        embeddings = model.get_embeddings([(row['Text'])])        
        list_embedded_values.append(embeddings[0].values)
    df_input['Embedded text'] = list_embedded_values
    return df_input             

list_embedded_values ​​নামক লিস্টটিতেই আমরা প্রতিটি সারির এনকোড করা টেক্সট সংরক্ষণ ও যুক্ত করব।

pandas-এর iterrows মেথড ব্যবহার করে, আমরা ডেটাফ্রেমের প্রতিটি সারিতে পুনরাবৃত্তি করতে পারি এবং Text কলাম থেকে মানগুলো নিতে পারি (যেটিতে আমাদের সিমুলেটেড ডেটাবেস থেকে হাতে লেখা তথ্য থাকে)।

gecko@003 মডেল ব্যবহার করে সাধারণ টেক্সট পাঠাতে এবং তার ভেক্টর ফেরত পেতে, আমরা `TextEmbeddingModel.from_pretrained` ফাংশনটি কল করে `model` ভ্যারিয়েবলটি ইনিশিয়ালাইজ করি, যেখানে আমরা ব্যবহারের জন্য মডেলটি সেট করি।

model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
embeddings = model.get_embeddings([(row['Text'])])                     

তারপর, `embeddings` ভেরিয়েবলে আমরা `model.get_embeddings` ফাংশনের মাধ্যমে পাঠানো টেক্সটের ভেক্টরটি ধারণ করি।

ফাংশনের শেষে, আমরা ডেটাফ্রেমে 'এমবেডেড টেক্সট' নামে একটি নতুন কলাম তৈরি করি এবং এতে gecko@003 মডেলের উপর ভিত্তি করে তৈরি ভেক্টরগুলির তালিকা থাকবে।

df_input['Embedded text'] = list_embedded_values
return df_input             

অবশেষে, df_embedded_values_db ভেরিয়েবলটিতে আমরা সিমুলেটেড ডেটাবেস থেকে আমাদের মূল ডেটা সম্বলিত ডেটাফ্রেমটি এবং প্রতিটি সারির জন্য ভেক্টরের তালিকা সম্বলিত একটি নতুন কলাম ধারণ করি।

df_embedded_values_db = embed_fn(df_initial_db)
df_embedded_values_db      

৬. ভেক্টর ডাটাবেসে প্রশ্ন জিজ্ঞাসা করা

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

এর জন্য, নিচের কোডটি কপি করে একটি নতুন সেলে পেস্ট করুন:

question='How do you shift gears in the Google car?'
model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
embeddings = model.get_embeddings([(question)])        
text_to_search=embeddings[0].values
len(text_to_search)

ফলাফলটি দেখতে অনেকটা এইরকম হবে:

6b7cf9b08e3b4573.png

চলুন কোডটি বিশ্লেষণ করা যাক।

পূর্ববর্তী ধাপের ফাংশনের মতোই, আমরা প্রথমে আমাদের ডাটাবেসকে যা জিজ্ঞাসা করতে চাই তা দিয়ে question ভেরিয়েবলটি ইনিশিয়ালাইজ করি।

question='How do you shift gears in the Google car?'

এরপর, মডেল ভেরিয়েবলে আমরা TextEmbeddingModel.from_pretrained ফাংশনের মাধ্যমে যে মডেলটি ব্যবহার করতে চাই তা সেট করি, যা এই ক্ষেত্রে gecko@003 মডেল।

model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")

embeddings ভেরিয়েবলে, আমরা model.get_embeddings ফাংশনটি কল করি এবং ভেক্টরে রূপান্তর করার জন্য টেক্সটটি পাস করি; এক্ষেত্রে, আমরা জিজ্ঞাসা করার প্রশ্নটি পাস করি।

embeddings = model.get_embeddings([(question)])        

অবশেষে, `text_to_search` ভেরিয়েবলটিতে প্রশ্ন থেকে অনূদিত ভেক্টরগুলোর তালিকা থাকে।

আমরা ভেক্টরটির দৈর্ঘ্য শুধু একটি রেফারেন্স হিসেবে প্রিন্ট করি।

text_to_search=embeddings[0].values
len(text_to_search)

৭. ভেক্টরের তুলনা

এখন আমাদের সিমুলেটেড ডেটাবেসে ভেক্টরের একটি তালিকা এবং ভেক্টরে রূপান্তরিত একটি প্রশ্ন রয়েছে। অর্থাৎ, আমাদের প্রশ্নের সবচেয়ে নির্ভুল উত্তর কোনটি দিতে পারে, তা খুঁজে বের করার জন্য আমরা এখন প্রশ্নটির ভেক্টরটিকে আমাদের ডেটাবেসের সমস্ত ভেক্টরের সাথে তুলনা করতে পারি।

এটি সম্পন্ন করার জন্য, আমরা প্রশ্নের ভেক্টর এবং ডাটাবেসের প্রতিটি ভেক্টরের মধ্যেকার দূরত্ব পরিমাপ করব। ভেক্টরগুলোর মধ্যে দূরত্ব পরিমাপ করার একাধিক কৌশল রয়েছে, এই নির্দিষ্ট কোডল্যাবের জন্য আমরা ইউক্লিডীয় দূরত্ব বা L2 নর্ম ব্যবহার করব।

73ea8635c4570bea.png

পাইথনে, আমরা এই কাজটি করার জন্য numpy ফাংশন ব্যবহার করতে পারি।

নিচের কোডটি কপি করে একটি নতুন সেলে পেস্ট করুন:

list_embedded_text_from_db = df_embedded_values_db['Embedded text']
shortest_distance=1
for position, embedded_value in enumerate(list_embedded_text_from_db):
    distance=np.linalg.norm((np.array(embedded_value) - np.array(text_to_search)), ord = 2)
    print(distance)
    if distance<shortest_distance:
        shortest_distance=distance
        shortest_position=position
        
print(f'The shortest distance is {shortest_distance} and the position of that value is {shortest_position}')

ফলাফলটি দেখতে এইরকম হবে:

b70563b50ea86668.png

চলুন কোডটি বিশ্লেষণ করা যাক।

আমরা প্রথমে আমাদের ডাটাবেসের এমবেডেড টেক্সট বা ভেক্টর ধারণকারী কলামটিকে একটি লিস্টে রূপান্তর করে list_embedded_text_from_db-তে সংরক্ষণ করি।

প্রকৃত সংক্ষিপ্ততম দূরত্ব খুঁজে না পাওয়া পর্যন্ত ভেরিয়েবলটিকে আপডেট করতে থাকার জন্য আমরা shortest_distance ভেরিয়েবলটির মানও ১ দিয়ে শুরু করেছি।

list_embedded_text_from_db = df_embedded_values_db['Embedded text']
shortest_distance=1

এরপর একটি for লুপ ব্যবহার করে আমরা প্রশ্ন থেকে পাওয়া ভেক্টর এবং ডাটাবেসের প্রতিটি ভেক্টরের মধ্যেকার দূরত্ব বের করি।

numpy-এর linalg.norm ফাংশন ব্যবহার করে আমরা তাদের দূরত্ব নির্ণয় করি।

যদি গণনা করা দূরত্ব shortest_distance ভেরিয়েবলের দূরত্বের চেয়ে কম হয়, তাহলে গণনা করা দূরত্বটি এই ভেরিয়েবলে সেট করা হবে।

এরপর আমরা সর্বনিম্ন দূরত্ব এবং তালিকায় এর অবস্থানটি `shortest_distance` ও `shortest_position` ভেরিয়েবলগুলোতে সংরক্ষণ করি।

for position, embedded_value in enumerate(list_embedded_text_from_db):
    distance=np.linalg.norm((np.array(embedded_value) - np.array(text_to_search)), ord = 2)
    print(distance)
    if distance<shortest_distance:
        shortest_distance=distance
        shortest_position=position

৮. ফলাফল

প্রশ্ন এবং ডাটাবেসের মধ্যে সর্বনিম্ন দূরত্ব ধারণকারী ভেক্টরটির তালিকার অবস্থান জানা থাকলে, আমরা ফলাফলগুলো প্রিন্ট করতে পারি।

নিচের কোডটি কপি করে একটি নতুন সেলে পেস্ট করুন:

print("Your question was:\n "+question+ " \nAnd our answer is:\n "+
      df_embedded_values_db.at[shortest_position, 'Title']+": "+
      df_embedded_values_db.at[shortest_position, 'Text'])

এটি কার্যকর করার পর, আপনি এইরকম কিছু পাবেন:

7a0e429171a19afe.png

৯. অভিনন্দন

অভিনন্দন, আপনি textembedding-gecko@003 মডেলটি ব্যবহার করে একটি বাস্তব ক্ষেত্রে আপনার প্রথম অ্যাপ্লিকেশনটি সফলভাবে তৈরি করেছেন!

আপনি টেক্সট এমবেডিংয়ের মূলনীতি এবং জিসিপি ওয়ার্কবেঞ্চে গেকো০০৩ মডেলটি কীভাবে ব্যবহার করতে হয়, তা শিখেছেন।

আপনার অর্জিত জ্ঞানকে আরও বিভিন্ন ক্ষেত্রে প্রয়োগ করার জন্য প্রয়োজনীয় মূল পদক্ষেপগুলো এখন আপনি জানেন।

এরপর কী?

এই কোডল্যাবগুলো দেখে নিন...

রেফারেন্স নথি