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

নেমড এনটিটি রিকগনিশন

Named Entity Recognition

Text থেকে person, place, organization detect করা।

ভূমিকা

'Sadiqul Islam lives in Dhaka and works at Google since 2021.' — এই sentence থেকে আপনি instantly বের করতে পারেন: Person = Sadiqul Islam, Location = Dhaka, Organization = Google, Date = 2021। Computer কে এই 'instant extraction' শেখানোর কাজটাই NER।

ধারণা

Named Entity Recognition (NER) হলো text থেকে real-world entities — Person, Organization, Location, Date, Money, Percent ইত্যাদি — automatically identify এবং classify করার process। এটা Information Extraction এর foundation।

সহজ ব্যাখ্যা

NER হলো একটা highlighter। Text এর উপর hover করলে সে আলাদা color এ mark করে — সবুজে person, নীলে place, হলুদে date। শুধু চেনা না — category ও বলে দেয়। ChatGPT যখন আপনার নাম মনে রাখে, বা Gmail যখন email থেকে automatic calendar event বানায় — সবই NER এর জাদু।

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

  • Gmail Smart Compose — email থেকে date, time, person extract করে event বানায়।
  • News aggregator — কোন article কোন person/company নিয়ে — auto-categorize।
  • Resume parser — name, skill, company name extract করে HR কে দেখায়।
  • Medical NLP — patient record থেকে disease, medicine, dosage extract।
  • Search engine — 'Apple' search করলে fruit না company বুঝতে NER দরকার।
  • ChatGPT memory — যখন আপনার preference মনে রাখে — NER এর backend।

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

1
Step 1 — Tokenize + POS tag
NER এর আগে এই দুটো ধাপ দরকার (অনেক tool এ automatic)।
2
Step 2 — Chunking
Adjacent words কে entity span হিসেবে group করা।
3
Step 3 — Classification
প্রতিটা span কে PERSON / ORG / LOC / DATE ইত্যাদি tag দেওয়া।
4
Step 4 — Use the entities
Extract করে database, knowledge graph, বা downstream task এ use।

Python কোড

import spacy
# python -m spacy download en_core_web_sm
nlp = spacy.load("en_core_web_sm")

text = ("Sadiqul Islam lives in Dhaka and works at Google since 2021. "
        "He earned 50000 dollars last year. Apple released iPhone 15 in September.")

doc = nlp(text)

print(f"{'Entity':<25}{'Label':<12}{'Meaning'}")
print("-" * 60)
for ent in doc.ents:
    print(f"{ent.text:<25}{ent.label_:<12}{spacy.explain(ent.label_)}")

# Get only persons and organizations
persons = [ent.text for ent in doc.ents if ent.label_ == "PERSON"]
orgs = [ent.text for ent in doc.ents if ent.label_ == "ORG"]
print("\nPersons:", persons)
print("Organizations:", orgs)

# HuggingFace approach — modern transformer-based NER
# pip install transformers
from transformers import pipeline
ner_model = pipeline("ner", grouped_entities=True)
results = ner_model("Elon Musk founded SpaceX in California.")
for r in results:
    print(r["word"], "->", r["entity_group"])
ব্যাখ্যা

spaCy এর pre-trained model 'en_core_web_sm' direct text থেকে entities extract করে। `doc.ents` সব detected entity দেয়, প্রতিটার `.text` (original word) এবং `.label_` (category) থাকে। Common labels: PERSON, ORG, GPE (country/city), DATE, MONEY, PERCENT। HuggingFace pipeline আরও powerful — BERT-based, কিন্তু slower। `grouped_entities=True` দিলে adjacent token গুলো merge করে দেয় (যেমন 'Elon' + 'Musk' = 'Elon Musk')।

সাধারণ ভুল

  • সব 'capitalized' word কে entity ধরা — sentence start এর word ও capital হয়।
  • Pre-trained model এ নিজের domain expect করা — medical/legal এ custom training লাগে।
  • Bangla এ English NER চালানো — কাজ করে না। BNLP, MuRIL, XLM-Roberta ব্যবহার করুন।
  • spaCy এর label মুখস্থ করতে যাওয়া — `spacy.explain(label)` দিয়ে যেকোনো সময় দেখা যায়।
  • Lowercase করার পর NER — proper noun হারিয়ে যায়।

অনুশীলন

  1. একটা news article copy করে spaCy দিয়ে সব entity extract করুন।
  2. নিজের একটা ছোট bio লিখুন এবং দেখুন কোন entity গুলো detect হয়।
  3. একটা function লিখুন যেটা শুধু LOCATION entities return করে।
  4. Bangla-supported model (xlm-roberta-large-finetuned-conll03-english এর alternative) খুঁজে try করুন।

ছোট প্রজেক্ট

Mini Project: News Entity Extractor

একটা script লিখুন যেটা ৫টা news article (text file বা URL) থেকে সব entity extract করবে এবং একটা summary report দিবে: প্রতিটা article এ কতজন person mentioned, কতগুলো organization, কতগুলো location। Bonus: সবচেয়ে frequent person/org/location কে বের করুন — কোন news এ কে সবচেয়ে বেশি আলোচিত। এই তথ্য একটা JSON file এ save করুন।

সারাংশ

  • NER = text থেকে real-world entity (Person, Org, Location) extract।
  • Information extraction এর foundation।
  • spaCy = fast, easy, production-ready। HuggingFace = accurate, modern।
  • Bangla NER এর জন্য বিশেষ model দরকার (BNLP, multilingual transformers)।
  • Phase 1 complete! আপনি এখন raw text কে structured data এ convert করতে পারেন।