মূল content-এ যাও

Generative AI/LLM-এর ভিত্তি/Lesson 02

Embeddings — অর্থের মানচিত্র

শব্দ বা বাক্যকে সংখ্যার vector বানানো, যাতে কাছাকাছি অর্থ মানে কাছাকাছি vector। Cosine similarity, সবচেয়ে কাছের শব্দ খোঁজা, আর king − man + woman-এর বিখ্যাত অঙ্ক।

সময়
22 মিনিট
Exercise
1
Challenge
1
Quiz
3 প্রশ্ন

সহজ ভাষায়

Token id অর্থহীন নম্বর — "বিড়াল" 4021, "কুকুর" 9 হলে বোঝা যায় না যে দুটো কাছাকাছি জিনিস। Embedding প্রতিটা শব্দ বা বাক্যকে একটা vector (সংখ্যার list) বানায়, এমনভাবে যে:

কাছাকাছি অর্থ → কাছাকাছি vector

এটা একটা মানচিত্রের মতো। এখানে "বিড়াল" আর "কুকুর" একই পাড়ায়, "গাড়ি" অন্য শহরে।

main.py

(আসল embedding-এ শত শত বা হাজারখানেক dimension থাকে। এখানে বোঝার জন্য ২টা।)

কেন দরকার?

  • LLM-এর ভেতরে: প্রতিটা token প্রথমেই embedding-এ রূপান্তর হয়। Model এর পরে যা করে সব এই vector নিয়ে।
  • Semantic search: "আমার ল্যাপটপ চালু হচ্ছে না" দিয়ে খুঁজলে "computer won't boot" নামের লেখাও পাওয়া যায়, কারণ অর্থ মেলে, শব্দ না মিললেও।
  • RAG: Generative AI path-এর পরের module-এর ভিত্তি।
  • Recommendation, clustering, duplicate খোঁজা।

Cosine similarity

দুটো vector কতটা "একই দিকে":

cos⁡(a,b)=a⋅b∥a∥ ∥b∥\cos(a, b) = \frac{a \cdot b}{\lVert a \rVert \, \lVert b \rVert}
মানঅর্থ
1একই দিক — খুব মিল
0লম্ব — সম্পর্ক নেই
−1উল্টো দিক

অর্থের অঙ্ক

২০১৩-র word2vec-এর একটা বিখ্যাত আবিষ্কার:

king⃗−man⃗+woman⃗≈queen⃗\vec{king} - \vec{man} + \vec{woman} \approx \vec{queen}

"রাজা থেকে পুরুষত্ব বাদ দিয়ে নারীত্ব যোগ" করলে রানির কাছে পৌঁছায়। অর্থাৎ embedding-এর মধ্যে কিছু দিক (direction) অর্থ বহন করে, যেমন "লিঙ্গ" বা "রাজকীয়তা"। Challenge-এ ছোট হাতে বানানো embedding দিয়ে এটা নিজে করবে। আসল embedding-এ এই অঙ্ক সবসময় এত পরিষ্কারভাবে মেলে না। এটা একটা ঝোঁক, নিয়ম না।

Exercise

Exercise

Cosine similarity

+20 XP

দুটো vector কতটা একই দিকে আছে, সেটা মাপে cosine similarity:

cos(a, b) = (a · b) ÷ (‖a‖ × ‖b‖)

এর মান 1 মানে একদম একই দিক, 0 মানে সম্পর্কহীন, −1 মানে উল্টো।

cosine(a, b) লেখো (NumPy array নেবে, float দেবে)। তারপর দেওয়া vector দিয়ে sim_cat_dog আর sim_cat_car হিসাব করো।

solution.py

Quiz

  1. Q1Embedding কী?
  2. Q2Embedding-এর তুলনায় সাধারণত euclidean distance-এর বদলে cosine similarity কেন?
  3. Q3Embedding-এর সবচেয়ে বড় বাস্তব ব্যবহার কোনটা?
0/3 answered

Challenge

Challenge

সবচেয়ে কাছের শব্দ

+50 XP

most_similar(query, embeddings, k=3, exclude=()) লেখো:

  • query — একটা vector (NumPy array)
  • embeddings — dict {শব্দ: vector}
  • cosine similarity অনুযায়ী সবচেয়ে কাছের kটা শব্দের list return করো, বেশি থেকে কম ক্রমে
  • exclude-এ থাকা শব্দগুলো বাদ যাবে

তারপর analogy দিয়ে answer বের করো: vector king − man + woman-এর সবচেয়ে কাছের শব্দ। king, man আর woman বাদ দিয়ে খুঁজবে।

solution.py

বাস্তবে কোথায় ব্যবহার হয়?

আসল embedding আসে একটা embedding model থেকে (API বা open-source)। তারপর ঠিক তোমার challenge-এর কাজ — query-র সবচেয়ে কাছের document খোঁজা:

# sentence-transformers একটা জনপ্রিয় open-source লাইব্রেরি; বহুভাষিক model বাংলাও বোঝে
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2")
docs = ["ল্যাপটপ চালু হচ্ছে না", "How to cook rice", "Computer won't boot"]
vectors = model.encode(docs, normalize_embeddings=True)
query = model.encode(["আমার কম্পিউটার অন হয় না"], normalize_embeddings=True)
print(vectors @ query.T)   # normalize করা, তাই dot product = cosine

(তোমার computer-এ চালাবে।) লাখ লাখ document হলে প্রতিটার সাথে তুলনা ধীর। তখন vector database লাগে — RAG module-এ আসবে।

Interview প্রশ্ন

  • Beginner: Embedding কী? Token id থেকে কীভাবে আলাদা?
  • Intermediate: Cosine similarity কী, আর কেন ব্যবহার করা হয়?
  • Advanced: Semantic search-এর pipeline বর্ণনা করো। লাখ লাখ vector-এ দ্রুত খোঁজার জন্য কী করবে (approximate nearest neighbor)?

এরপর কী?

Token → embedding → ... → পরের token। LLM-এর মূল কাজটা আসলে একটাই: পরের token কী হবে, অনুমান করা। পরের lesson: Next-token prediction — একটা ছোট্ট language model নিজে বানাবে।