Word Embeddings: শব্দ কীভাবে সংখ্যার জগতে 'অর্থ' পায়

vector space ও semantic similarity (Series 07, Episode 03)

🟡 INTERMEDIATE Series 07 — NLP, Transformers ও LLM Episode 03 / 08

📑 এই পর্বে যা যা আছে

🧩 ১. গল্প: "job" আর "চাকরি" এক নয়?!

গত পর্বে Rahim TF-IDF দিয়ে একটা সুন্দর JD-matching feature বানাল। কিন্তু test করতে গিয়ে সে হতভম্ব — একটা JD-তে লেখা "python developer", আরেকটাতে "python programmer"। তার similarity score প্রায় শূন্য! অথচ আমরা সবাই জানি developer ≈ programmer।

Rahim: "আপা, TF-IDF তো 'developer' আর 'programmer'-কে সম্পূর্ণ আলাদা ধরছে। কিন্তু এগুলো তো একই জিনিস!"

Nila: "হ্যাঁ, কারণ TF-IDF শব্দকে শুধু একটা column-এর index হিসেবে দেখে — অর্থ (meaning) বোঝে না। computer-কে অর্থ শেখাতে হলে আমাদের শব্দকে এমন সংখ্যায় বসাতে হবে যেখানে কাছাকাছি অর্থের শব্দ কাছাকাছি বসে। এই ধারণাটাই word embedding — আধুনিক NLP-র সবচেয়ে গুরুত্বপূর্ণ ভিত্তি।"

২. সমস্যা: TF-IDF অর্থ বোঝে না

TF-IDF-এ প্রতিটা শব্দ একটা আলাদা column। "developer" column 5, "programmer" column 137 — এদের মধ্যে কোনো সম্পর্ক নেই। এই representation-কে বলে one-hot / sparse — বেশিরভাগ ঘর শূন্য, আর কোনো দুটো শব্দের মধ্যে "কাছাকাছি অর্থ" ধরার উপায় নেই।

আমরা চাই dense vector — যেখানে প্রতিটা শব্দ কয়েকশো সংখ্যার একটা ছোট vector, আর অর্থে কাছাকাছি শব্দের vector গণিতিকভাবেও কাছাকাছি। এটাই embedding।

🧭 ৩. Embedding কী — মূল ধারণা

Embedding হলো একটা শব্দ (বা বাক্য/document)-কে fixed-size dense vector-এ রূপান্তর, যেখানে সেই সংখ্যাগুলো শব্দের অর্থ ধারণ করে। এই vector গুলো model নিজে বিশাল text data থেকে শিখে নেয় — মূল ধারণা: "একটা শব্দকে চেনা যায় তার সঙ্গী শব্দ দিয়ে" (distributional hypothesis)।

one-hot (TF-IDF যুগ): "developer" = [0,0,0,1,0,0, ... ,0] (10,000 ঘর, একটাই 1) "programmer" = [0,0,0,0,0, ...,1,0] (সম্পর্কহীন) embedding (dense): "developer" = [0.21, -0.44, 0.87, ...] (300 সংখ্যা) "programmer" = [0.19, -0.41, 0.85, ...] (প্রায় কাছাকাছি!)

🪜 ৪. তিন স্তরে embedding

Level 1 — সহজ intuition:
ধরুন একটা মানচিত্র যেখানে প্রতিটা শব্দ একটা বিন্দু। "রাজা" আর "রানী" পাশাপাশি, "আম" আর "কলা" পাশাপাশি, কিন্তু "রাজা" আর "কলা" অনেক দূরে। embedding মানে এই "শব্দের মানচিত্র" — অর্থ যত কাছে, বিন্দু তত কাছে।

Level 2 — technical:
প্রতিটা শব্দ একটা vector (যেমন ৩০০-মাত্রার)। Word2Vec, GloVe-এর মতো algorithm বিশাল corpus-এ শব্দের আশপাশের context দেখে এই vector শেখে। ফলে সমান context-এ আসা শব্দগুলোর vector কাছাকাছি হয়।

Level 3 — AI Engineer perspective:
এখন আমরা সাধারণত static word embedding (Word2Vec) নিজে train করি না। আমরা sentence embedding model (যেমন sentence-transformers) ব্যবহার করি যা পুরো বাক্যের একটা vector দেয় — এটাই semantic search, RAG (S08), আর recommendation-এর ভিত্তি। এটাই বেশিরভাগ AI Engineer-এর দৈনন্দিন কাজ।

👑 ৫. Vector space ও বিখ্যাত king − man + woman

embedding-এর সবচেয়ে বিখ্যাত ম্যাজিক — শব্দের মধ্যে সম্পর্কও vector গণিতে ধরা পড়ে:

vector("king") − vector("man") + vector("woman") ≈ vector("queen") vector("Paris") − vector("France") + vector("Bangladesh") ≈ vector("Dhaka")

মানে embedding শুধু similarity নয়, শব্দের মধ্যেকার সম্পর্ক (analogy)-ও শেখে। এটা প্রমাণ করে যে vector-এর দিক (direction) অর্থবহ।

🖼️ ৬. Visual: শব্দ কীভাবে space-এ বসে

(২-মাত্রায় সরলীকৃত ছবি) পেশা অক্ষর ^ | developer programmer | • • | engineer • | | রাজা • • রানী | (রাজকীয় গুচ্ছ) | আম • • কলা | (ফল গুচ্ছ) +--------------------------------------> অর্থের অক্ষর কাছাকাছি অর্থ = কাছাকাছি বিন্দু = ছোট distance

📐 ৭. Semantic similarity ও cosine similarity

দুটো embedding vector কতটা কাছাকাছি সেটা মাপতে আমরা সাধারণত cosine similarity ব্যবহার করি — দুটো vector-এর মধ্যেকার কোণ। কেন cosine, দূরত্ব নয়? কারণ vector-এর দিক-ই অর্থ বহন করে, দৈর্ঘ্য নয়।

cosine similarity = 1.0 -> হুবহু একই দিক (অর্থে সবচেয়ে কাছে) cosine similarity = 0.0 -> সম্পর্কহীন (৯০° কোণ) cosine similarity = -1.0 -> বিপরীত developer vs programmer -> ~0.85 (খুব কাছে) developer vs banana -> ~0.05 (দূরে)
এই cosine similarity-ই পরে vector database (S08E03) আর RAG (S08E04)-এর মূল ইঞ্জিন। আজ আপনি সেই ভিত্তিটা তৈরি করছেন।

💻 ৮. Code: pretrained embedding দিয়ে similarity

কেন sentence-transformers? — কারণ এটা pretrained model দিয়ে সরাসরি বাক্যের quality embedding দেয়, নিজে train করা লাগে না, আর multilingual (বাংলা সহ) model আছে।

# pip install sentence-transformers from sentence_transformers import SentenceTransformer, util # multilingual model -> বাংলা + ইংরেজি একসাথে বোঝে model = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2") sentences = [ "python developer needed", "python programmer wanted", "sales officer for fmcg", "পাইথন ডেভেলপার প্রয়োজন", ] emb = model.encode(sentences) # shape: (4, 384) print(emb.shape) # প্রথম বাক্যের সাথে বাকি সবের similarity sims = util.cos_sim(emb[0], emb) for s, score in zip(sentences, sims[0]): print(f"{score:.3f} {s}")
ফলাফল: "python developer" এর সাথে "python programmer" আর বাংলা "পাইথন ডেভেলপার" দুটোরই similarity high আসবে, কিন্তু "sales officer" এর কম। TF-IDF যা কখনো পারত না — embedding সেটা অনায়াসে করছে।

🔬 ৯. Experiment: synonym খুঁজে বের করা

query = "machine learning engineer" pool = [ "AI/ML engineer role", "deep learning specialist", "accountant for audit firm", "data scientist position", ] q = model.encode(query) p = model.encode(pool) scores = util.cos_sim(q, p)[0] ranked = sorted(zip(pool, scores), key=lambda x: -x[1]) for text, sc in ranked: print(f"{sc:.3f} {text}")

খেয়াল করুন — "accountant" নিচে চলে যাবে, আর "AI/ML engineer", "deep learning", "data scientist" উপরে থাকবে। এটাই semantic search-এর মূল কৌশল।

🚧 ১০. embedding ≠ LLM (গুরুত্বপূর্ণ পার্থক্য)

অনেকে এই দুটো গুলিয়ে ফেলে। স্পষ্ট করি:

Embedding model: input text → একটা সংখ্যার vector। কাজ: অর্থ তুলনা, search, clustering। সে নতুন কোনো লেখা "generate" করে না।

LLM (যেমন GPT): input text → নতুন text generate করে। কাজ: উত্তর লেখা, summarize, translate।

দুটোই Deep Learning/Transformer থেকে আসে, কিন্তু কাজ আলাদা। RAG (S08)-এ এরা একসাথে কাজ করে — embedding দিয়ে relevant document খুঁজে, LLM দিয়ে উত্তর লেখা। কিন্তু embedding ≠ LLM

🇧🇩 ১১. বাস্তব উদাহরণ ও AI Engineer perspective

Must Know: embedding কী, cosine similarity, sentence-transformers দিয়ে semantic similarity।
Good to Know: Word2Vec/GloVe-এর ধারণা, dimensionality, multilingual model।
Learn Later: নিজে embedding model train/fine-tune করা, contrastive learning।

💼 ১২. Boss Question

Boss: "আমাদের search box-এ customer 'সস্তা ফোন' লিখলে কিছুই আসে না, কারণ product title-এ লেখা 'low budget smartphone'। এটা কি ঠিক করা যায়?"

উত্তর: এটাই ঠিক embedding-এর কাজ। keyword matching-এর বদলে আমরা query আর product-এর embedding তুলনা করব — তখন "সস্তা ফোন" আর "low budget smartphone" কাছাকাছি হবে, customer যা খুঁজছে তাই পাবে। ফল: better search → বেশি বিক্রি → সরাসরি revenue বৃদ্ধি।

🔎 ১৩. Job Requirement Decoder: "Embeddings"

JD-তে: "Understanding of embeddings and semantic similarity."
প্রশ্নউত্তর
কী বোঝায়?text-কে meaning-সহ dense vector-এ রূপান্তর করে similarity মাপতে পারা।
কেন চায়?semantic search, recommendation ও RAG — সবই embedding-এর উপর দাঁড়ানো।
কোন সমস্যা সমাধান করে?keyword matching-এর সীমা — synonym, ভিন্ন ভাষা, paraphrase ধরা।
junior-এর কী জানা লাগে?embedding তৈরি করা, cosine similarity, একটা ছোট semantic search বানানো।
এখনই কী master লাগে না?embedding model architecture বা নিজে train করা।
GitHub-এ কীভাবে দেখাবেন?একটা semantic search demo — query দিলে ranked result।
Interview-তে?"embedding কী?", "cosine similarity কেন?", "embedding vs LLM?", "king−man+woman?"

⚠️ ১৪. সাধারণ ভুল

ভুল ১: embedding আর LLM এক ভাবা। → embedding vector দেয়, generate করে না।

ভুল ২: ইংরেজি-only model দিয়ে বাংলা embed করা। → multilingual model ব্যবহার করুন।

ভুল ৩: similarity-তে Euclidean distance ধরে নেওয়া। → text embedding-এ সাধারণত cosine similarity মানানসই।

ভুল ৪: query আর document ভিন্ন model দিয়ে embed করা। → একই model লাগবে, নইলে তুলনা অর্থহীন।

🎤 ১৫. Interview Prep

প্রশ্ন ১: Word embedding কী এবং TF-IDF থেকে কীভাবে আলাদা?
উত্তর: embedding হলো dense, meaning-ধারণকারী vector; TF-IDF sparse ও অর্থহীন index। embedding-এ synonym কাছাকাছি বসে, TF-IDF-এ নয়।

প্রশ্ন ২: "king − man + woman ≈ queen" — এটা কী প্রমাণ করে?
উত্তর: embedding শুধু similarity নয়, শব্দের সম্পর্ক (analogy)-ও শেখে; vector-এর দিক অর্থবহ।

প্রশ্ন ৩: Embedding আর LLM কি এক?
উত্তর: না। embedding vector produce করে (search/similarity); LLM নতুন text generate করে। RAG-এ দুটো একসাথে লাগে।

✍️ ১৬. হাতে-কলমে ও Project Connection

১. ৫টা job title নিন (বাংলা+ইংরেজি মিশিয়ে)। সবগুলোর embedding বের করে একটা similarity matrix বানান।
২. একটা query দিয়ে top-2 নিকটতম title বের করার ছোট function লিখুন।
৩. একই কাজ TF-IDF দিয়ে করে তুলনা করুন — কোনটা synonym/বাংলা ভালো ধরল?

আমাদের flagship "Bangladesh Tech Career Assistant" এখন embedding পেয়ে অনেক বেশি স্মার্ট। আগে TF-IDF দিয়ে শুধু exact শব্দ মিলত; এখন "python developer" আর "পাইথন প্রোগ্রামার" একসাথে match হবে। এই embedding + cosine similarity-ই সরাসরি আমাদের পরবর্তী বড় লক্ষ্য — RAG (P8)-এর ভিত্তি।

📌 ১৭. সারসংক্ষেপ ও পরবর্তী পর্ব

এই পর্বে শিখলাম:

✓ Embedding = meaning-সহ dense vector; কাছাকাছি অর্থ = কাছাকাছি vector
✓ TF-IDF (sparse, অর্থহীন) বনাম embedding (dense, অর্থবহ)
✓ cosine similarity দিয়ে semantic similarity মাপা
✓ sentence-transformers দিয়ে বাংলা+ইংরেজি semantic search
✓ king − man + woman ≈ queen — সম্পর্কও vector গণিতে ধরা পড়ে
✓ embedding ≠ LLM — একটা vector দেয়, আরেকটা text generate করে
পরবর্তী পর্ব (S07E04): এতক্ষণ আমরা শব্দকে আলাদা করে দেখলাম। কিন্তু বাক্যে শব্দের ক্রম ও প্রসঙ্গ তো গুরুত্বপূর্ণ — "কুকুর মানুষকে কামড়ালো" আর "মানুষ কুকুরকে কামড়ালো" এক নয়! পরের পর্বে RNN ও LSTM — sequence মনে রাখার প্রথম চেষ্টা, এবং কেন সেই চেষ্টা attention-এর জন্ম দিল।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.