রোডম্যাপ
PHASE 1 · অধ্যায় 7

লেমাটাইজেশন

Lemmatization

Stemming এর intelligent বড় ভাই — dictionary-aware root finding।

ভূমিকা

Stemming একটা কুড়াল হলে, Lemmatization হলো একটা স্কাল্পেল — precise, intelligent। 'better' → 'good', 'went' → 'go', 'studies' → 'study'। কোনো 'studi' বা 'happili' এর গল্প নেই — সবসময় valid dictionary word।

ধারণা

Lemmatization হলো একটা word এর meaningful base form (lemma) খুঁজে বের করার process — যা সবসময় একটা valid dictionary word হয়। এটা dictionary-based এবং context-aware। 'better' এর lemma 'good', 'ran' এর lemma 'run', 'mice' এর lemma 'mouse'।

সহজ ব্যাখ্যা

Stemming = mechanical chopping। Lemmatization = dictionary দেখে intelligent reduction। Lemmatizer জানে — কোন word কোন part-of-speech (noun/verb/adjective), এবং সেই অনুসারে base form দেয়। 'meeting' (noun) → 'meeting'। 'meeting' (verb) → 'meet'। এই smartness এর দাম হলো — slower than stemming।

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

  • Chatbot — user intent বোঝার জন্য lemmatization করা হয়।
  • Question Answering — query এবং document দুটোই lemmatize করে match।
  • Text summarization — important word identify করতে।
  • Sentiment analysis — accurate feature extraction।
  • spaCy/WordNet — production NLP এর গুরুত্বপূর্ণ tool।

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

1
Step 1 — WordNet load করুন
NLTK এর WordNetLemmatizer এর জন্য wordnet corpus দরকার।
2
Step 2 — POS tag দিন
Default POS 'n' (noun)। Verb হলে 'v' দিতে হবে — না হলে wrong lemma।
3
Step 3 — Lemmatize করুন
lemmatizer.lemmatize(word, pos)।
4
Step 4 — spaCy দিয়ে advanced approach
spaCy automatic POS detect করে — production এ সবচেয়ে ভাল।

Python কোড

import nltk
from nltk.stem import WordNetLemmatizer
nltk.download("wordnet", quiet=True)
nltk.download("omw-1.4", quiet=True)

lem = WordNetLemmatizer()

# Default = noun ('n')
print(lem.lemmatize("studies"))           # 'study'
print(lem.lemmatize("better"))            # 'better' (treated as noun)

# With POS tag
print(lem.lemmatize("better", pos="a"))   # 'good' (adjective)
print(lem.lemmatize("ran", pos="v"))      # 'run' (verb)
print(lem.lemmatize("mice"))              # 'mouse'
print(lem.lemmatize("running", pos="v"))  # 'run'

# spaCy — automatic and powerful
# pip install spacy && python -m spacy download en_core_web_sm
import spacy
nlp = spacy.load("en_core_web_sm")

text = "The children are running and they ate better food yesterday."
doc = nlp(text)
for token in doc:
    print(f"{token.text:<12} -> {token.lemma_:<10} ({token.pos_})")
ব্যাখ্যা

NLTK এর lemmatizer কে POS tag না দিলে সব noun ধরে নেয় — তাই 'better' → 'better' হয়ে যায়। POS দিলে magic — 'better' → 'good'। spaCy automatic POS detect করে, তাই production এ spaCy ব্যবহার করা সবচেয়ে easy এবং accurate। 'children' → 'child', 'ate' → 'eat' — irregular form ও সঠিক ভাবে handle করে।

সাধারণ ভুল

  • POS না দিয়ে NLTK lemmatize করা — most common mistake, ভুল result আসে।
  • Stemming আর lemmatization একই ভাবা — speed এবং accuracy এ বিশাল পার্থক্য।
  • Bangla এ English lemmatizer use করা — Bangla এর জন্য বিশেষ tool (BNLP) দরকার।
  • Performance critical app এ lemmatization use করা — slow, stemming faster।

অনুশীলন

  1. এই word গুলো POS সহ lemmatize করুন: 'leaves' (noun vs verb), 'flies' (noun vs verb)।
  2. spaCy দিয়ে একটা paragraph এর সব lemma বের করুন এবং original এর সাথে compare করুন।
  3. Stemming এর Mini Project এর search system টা lemmatization দিয়ে redo করুন। Result কেমন improve হলো?

ছোট প্রজেক্ট

Mini Project: Smart Word Normalizer

একটা function `normalize(text, method='lemma')` লিখুন যেটা method='stem' বা 'lemma' হলে যথাক্রমে stemming বা lemmatization করবে। spaCy ব্যবহার করুন lemma এর জন্য। User input হিসেবে paragraph নিয়ে দুটো method এর result side-by-side দেখান — কোনটা কত সঠিক বুঝবেন।

সারাংশ

  • Lemmatization = dictionary-based, valid word return করে।
  • POS tag essential — না দিলে wrong lemma।
  • spaCy automatic POS করে — production choice।
  • Stemming faster, Lemmatization accurate — দরকার অনুসারে choose করুন।