রোডম্যাপ
PHASE 2 · অধ্যায় 12

ওয়ার্ড এমবেডিং

Word Embeddings (Word2Vec, GloVe)

Word কে geometry তে রূপান্তর — meaning কে গাণিতিক ভাবে capture।

ভূমিকা

TF-IDF এর কাছে 'king' আর 'queen' সম্পূর্ণ unrelated word। কিন্তু মানুষ জানে এদের একটা গভীর সম্পর্ক আছে। Word2Vec এর জন্ম এই rocking discovery থেকে — 'king - man + woman ≈ queen'। Words যে geometry তে বসবাস করে, সেই space কে বলে Embedding Space।

ধারণা

Word Embedding হলো প্রতিটা word কে একটা dense numeric vector (সাধারণত ৫০-৩০০ dimension) এ map করার technique, যেখানে similar meaning এর word গুলো vector space এ কাছাকাছি থাকে। Word2Vec (Mikolov, 2013) এবং GloVe (Stanford, 2014) — দুটো সবচেয়ে famous classical embedding model।

সহজ ব্যাখ্যা

ভাবুন একটা ৩০০-dimensional space যেখানে প্রতিটা word একটা point। 'king' এবং 'queen' কাছাকাছি। 'cat' এবং 'dog' কাছাকাছি। কিন্তু 'cat' এবং 'computer' দূরে। আশ্চর্যের ব্যাপার — vector arithmetic ও কাজ করে: vec('king') - vec('man') + vec('woman') ≈ vec('queen')। এই geometric relationship ই embedding এর জাদু। Word2Vec দুই version: CBOW (context থেকে word predict) এবং Skip-gram (word থেকে context predict)।

বাস্তব ব্যবহার

  • Google Search — semantic understanding এর foundation।
  • Recommendation — 'বই কিনলেন? এই বইগুলোও দেখুন' — embedding similarity।
  • Translation — দুই ভাষার embedding align করে।
  • Chatbot — user intent বোঝার base।
  • Modern Transformer (BERT, GPT) — সব embedding দিয়ে শুরু।

ধাপে ধাপে বিশ্লেষণ

1
Step 1 — Corpus collect করুন
Embedding train করতে অনেক text লাগে (millions of sentences)।
2
Step 2 — Tokenize
প্রতিটা sentence কে word list এ ভাঙুন।
3
Step 3 — Train করুন
Gensim এর Word2Vec দিয়ে CBOW বা Skip-gram model।
4
Step 4 — Vector explore করুন
model.wv[word] দিয়ে যেকোনো word এর vector পান।
5
Step 5 — Pre-trained use করুন
নিজে train না করে Google News, GloVe pre-trained download করুন।

Python কোড

# pip install gensim
from gensim.models import Word2Vec
from gensim.utils import simple_preprocess

# Tiny corpus (in real life, use millions of sentences)
corpus = [
    "the king rules the kingdom",
    "the queen is wise and kind",
    "a man works hard every day",
    "a woman manages the home and work",
    "the prince will become king one day",
    "the princess will become queen",
    "cats and dogs are common pets",
    "machine learning powers modern ai",
    "deep learning is a subfield of ml",
]

# Preprocess
tokenized = [simple_preprocess(s) for s in corpus]

# Train Word2Vec (Skip-gram)
model = Word2Vec(
    sentences=tokenized,
    vector_size=50,    # 50-dimensional embedding
    window=3,          # context window
    min_count=1,
    sg=1,              # 1=Skip-gram, 0=CBOW
    epochs=200,
)

# Vector for a word
print("Vector for 'king' (first 5 dims):", model.wv["king"][:5])
print("Vector size:", model.wv["king"].shape)

# Most similar words
print("\nMost similar to 'king':", model.wv.most_similar("king", topn=3))
print("Most similar to 'learning':", model.wv.most_similar("learning", topn=3))

# Similarity score
print("\nSimilarity king vs queen:", model.wv.similarity("king", "queen"))
print("Similarity king vs dog:", model.wv.similarity("king", "dog"))

# Famous analogy (works best with large pre-trained models)
try:
    result = model.wv.most_similar(positive=["king", "woman"], negative=["man"], topn=1)
    print("\nking - man + woman ≈", result)
except KeyError as e:
    print("Word not in vocab:", e)
ব্যাখ্যা

Gensim এর Word2Vec class দিয়ে আমরা ছোট একটা embedding train করলাম। `vector_size=50` মানে প্রতিটা word একটা ৫০-dimensional vector। `sg=1` = Skip-gram (slower, but better for rare words), `sg=0` = CBOW (faster)। ছোট corpus এ analogy কাজ করবে না — সেজন্য large pre-trained model (Google News 300d, GloVe) ব্যবহার করতে হয়। `model.wv.most_similar()` দিয়ে কাছের word, এবং `similarity()` দিয়ে দুই word এর closeness পাই।

সাধারণ ভুল

  • ছোট corpus এ train করে quality expect করা — Word2Vec কে millions of sentences লাগে।
  • Vector size যা ইচ্ছা set করা — সাধারণত 100-300 ভাল।
  • Out-of-vocabulary (OOV) word handle না করা — train এ না থাকলে error দিবে।
  • Embedding কে static ভাবা — modern Transformer contextual embedding দেয় (একই word আলাদা context এ আলাদা vector)।
  • নিজে train করতে যাওয়া যখন pre-trained ভাল available — FastText, GloVe download করুন।

অনুশীলন

  1. Pre-trained GloVe (50d) download করে 'happy' এর কাছের ১০টা word বের করুন।
  2. একটা analogy test করুন: 'paris - france + germany = ?' (pre-trained দিয়ে)।
  3. Gensim এর FastText (subword embedding) দিয়ে একই কাজ করুন এবং compare করুন।
  4. Bangla word embedding (FastText pre-trained Bangla) download করে similarity test করুন।

ছোট প্রজেক্ট

Mini Project: Semantic Word Explorer

Gensim এর pre-trained 'glove-wiki-gigaword-100' download করুন (`api.load`)। একটা CLI tool বানান যেখানে user একটা word দিলে output দিবে: top-৫ similar words, vector এর first ১০ dimension, এবং user দুটো word দিলে similarity score। Bonus: একটা analogy mode — user 3 words দিলে চতুর্থটা predict করবে (king - man + woman = ?)।

সারাংশ

  • Embedding = word কে dense vector এ map (semantic meaning carry করে)।
  • Word2Vec দুই variant: CBOW (fast) এবং Skip-gram (accurate)।
  • Vector arithmetic কাজ করে: king - man + woman ≈ queen।
  • GloVe, FastText — অন্যান্য জনপ্রিয় classical embedding।
  • Modern NLP এর foundation — Transformer ও এর contextual version use করে।