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

টোকেনাইজেশন

Tokenization

Text কে ছোট ছোট token-এ ভাঙা — language understanding-এর প্রথম step।

ভূমিকা

আপনি একটা বড় কেক হাতে পেলেন। মুখে পুরো ঢোকানো সম্ভব? — না। ছোট ছোট টুকরো করে খেতে হবে। NLP তেও ঠিক একই কাজ — পুরো sentence model কে এক সাথে দেওয়া যায় না, ছোট ছোট 'token' এ ভাঙতে হয়। এই 'ভেঙে ফেলার শিল্প' এর নাম Tokenization।

ধারণা

Tokenization হলো একটা text কে ছোট ছোট meaningful units — token এ ভাঙার process। Token হতে পারে একটা word, একটা subword (যেমন 'play' + 'ing'), অথবা একটা character। এটাই NLP pipeline এর সবচেয়ে প্রথম এবং সবচেয়ে গুরুত্বপূর্ণ step — কারণ পরের সব কাজ (embedding, model) এই token এর উপর ভিত্তি করে চলে।

সহজ ব্যাখ্যা

ভাবুন আপনি একটা lego set ভেঙে দেখছেন কী কী piece আছে। Token হলো সেই piece। Word-level tokenization — পুরো word একসাথে নেওয়া। Subword — বড় word কে ছোট অংশে ভাঙা (modern LLM এই strategy ব্যবহার করে)। Character — একদম অক্ষর-পর্যায়ে ভাঙা। যত smart tokenization, তত ভাল NLP model।

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

  • ChatGPT, GPT-4 — সব input কে BPE (Byte Pair Encoding) দিয়ে tokenize করে।
  • Google Translate — sentence কে subword এ ভেঙে translate করে।
  • Search engine — query কে token এ ভেঙে index এ match করে।
  • Bangla NLP — যুক্তাক্ষর এবং sandhi এর জন্য special tokenizer দরকার।
  • Code autocomplete (GitHub Copilot) — code কে token এ ভাঙে।

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

1
Step 1 — Whitespace Tokenization
সবচেয়ে naive — শুধু space দিয়ে ভাঙা। দ্রুত কিন্তু punctuation মিস করে।
2
Step 2 — Rule-based Tokenization
NLTK এর word_tokenize — punctuation আলাদা করে।
3
Step 3 — Sentence Tokenization
sent_tokenize — abbreviation (Dr., Mr.) handle করে।
4
Step 4 — Subword Tokenization
BPE, WordPiece — unknown word break করে ছোট piece এ।
5
Step 5 — Modern Tokenizers
HuggingFace AutoTokenizer — যেকোনো model এর জন্য right tokenizer।

Python কোড

import nltk
from nltk.tokenize import word_tokenize, sent_tokenize

nltk.download("punkt", quiet=True)
nltk.download("punkt_tab", quiet=True)

text = "Dr. Sadiq loves NLP. He works on Bangla AI! It's amazing."

# 1. Naive whitespace tokenization
naive = text.split()
print("Naive:", naive)

# 2. Smart word tokenization
words = word_tokenize(text)
print("Smart words:", words)

# 3. Sentence tokenization
sentences = sent_tokenize(text)
print("Sentences:", sentences)

# 4. Subword tokenization (modern, used in BERT/GPT)
# pip install transformers
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
subwords = tokenizer.tokenize("Tokenization is unbelievably powerful!")
print("Subwords:", subwords)
# Output: ['token', '##ization', 'is', 'un', '##believable', '##ly', 'powerful', '!']
ব্যাখ্যা

Naive split() 'Dr.' কে একটা token ধরে — ভুল। NLTK এর word_tokenize 'Dr.' কে আলাদা করে, punctuation কে আলাদা token হিসেবে রাখে। Subword tokenizer (BERT) 'unbelievably' কে ভেঙে দেয় 'un' + '##believable' + '##ly' এ — '##' মানে এটা আগের token এর সাথে যুক্ত। এই subword trick এর কারণে modern model নতুন/বিরল word ও handle করতে পারে।

সাধারণ ভুল

  • সব ভাষায় same tokenizer use করা — বাংলা/চাইনিজে English tokenizer কাজ করে না।
  • Lowercase করে fully tokenize করার আগে — সবসময় না, NER এর ক্ষেত্রে case matter করে।
  • Subword token দেখে confused হওয়া — '##' prefix মানে continuation, error না।
  • split() দিয়ে production NLP করার চেষ্টা — অবশ্যই proper tokenizer use করুন।

অনুশীলন

  1. 'It's a beautiful day, isn't it?' — word_tokenize দিয়ে ভাঙুন। কয়টা token পেলেন? 'isn't' কী হলো?
  2. একটা বাংলা sentence: 'আমি ভাত খেয়েছি।' — split() এবং word_tokenize দুটো দিয়ে try করুন।
  3. HuggingFace tokenizer দিয়ে 'Lovablely' (বানানো word) tokenize করুন। কয়টা subword হলো?

ছোট প্রজেক্ট

Mini Project: Multi-level Tokenizer

একটা function `tokenize_all(text)` লিখুন যেটা return করবে একটা dictionary: {sentences: [...], words: [...], chars: [...], subwords: [...]}। User input হিসেবে যেকোনো paragraph নিয়ে চার level এ ভেঙে দেখাবে। Bonus: প্রতিটা level এর count print করুন।

সারাংশ

  • Tokenization = text কে ছোট meaningful unit (token) এ ভাঙা।
  • Levels: sentence → word → subword → character।
  • Modern LLM (GPT, BERT) সব subword tokenization use করে।
  • সঠিক tokenizer বেছে নেওয়া = ভাল NLP এর প্রথম শর্ত।