রোডম্যাপ
PHASE 6 · অধ্যায় 28

টোকেনাইজার

Tokenizers

BPE, WordPiece, SentencePiece — modern tokenization।

ভূমিকা

BERT word level tokenize করে, GPT character level, T5 আবার অন্যভাবে। কেন এত variation? কারণ tokenization ই decide করে model কত efficiently ভাষা represent করবে, কত vocabulary লাগবে, rare word কীভাবে handle হবে। Modern tokenizer: BPE, WordPiece, SentencePiece।

ধারণা

Subword tokenization এর মূল idea: frequent word আস্ত রাখো, rare word কে subword এ ভাঙো। তিনটা popular algorithm: (1) BPE — frequent pair merge করে vocabulary বানায় (GPT, RoBERTa), (2) WordPiece — likelihood maximize করে merge (BERT), (3) SentencePiece — language-agnostic, whitespace ও token হিসেবে (T5, LLaMA)।

সহজ ব্যাখ্যা

ভাবুন 'unhappiness' একটা rare word — যদি word-level tokenize হয়, vocabulary তে আলাদা entry দরকার। কিন্তু BPE 'un' + 'happiness' এ ভাঙে — দুটোই common subword। 'happiness' = 'happi' + 'ness'। এতে vocabulary ছোট থাকে, rare word handle হয়, এমনকি নতুন word ও subword combination দিয়ে represent করা যায়।

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

  • GPT-2/3/4 — BPE tokenizer (tiktoken)।
  • BERT — WordPiece।
  • T5, LLaMA, Mistral — SentencePiece।
  • Multilingual model — SentencePiece (whitespace independent)।
  • Tokenizer choice = vocab size, sequence length, model speed এ direct impact।

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

1
Step 1 — Algorithm choose
Task + language অনুযায়ী BPE/WordPiece/SentencePiece।
2
Step 2 — Vocab size set
Common: 30K-50K (English), 100K+ (multilingual)।
3
Step 3 — Train on corpus
Large unlabeled text এ tokenizer train।
4
Step 4 — Encode/Decode
text ↔ token id ↔ text round trip verify।
5
Step 5 — Special token
[CLS], [SEP], <s>, </s>, [PAD], [MASK] add।

Python কোড

from transformers import AutoTokenizer
from tokenizers import Tokenizer, models, trainers, pre_tokenizers

bert_tok = AutoTokenizer.from_pretrained("bert-base-uncased")
gpt_tok = AutoTokenizer.from_pretrained("gpt2")
t5_tok = AutoTokenizer.from_pretrained("t5-small")

text = "Tokenization is fundamental for NLP models."

for name, tok in [("BERT/WordPiece", bert_tok), ("GPT-2/BPE", gpt_tok), ("T5/SentencePiece", t5_tok)]:
    tokens = tok.tokenize(text)
    ids = tok.encode(text)
    print(f"{name}: {tokens}")
    print(f"  ids ({len(ids)}): {ids[:12]}...\n")

print("--- Training custom BPE ---")
sample_corpus = [
    "deep learning is amazing",
    "natural language processing rocks",
    "transformers changed the world",
    "tokenizers are the unsung heroes of NLP",
]

tokenizer = Tokenizer(models.BPE())
tokenizer.pre_tokenizer = pre_tokenizers.Whitespace()
trainer = trainers.BpeTrainer(vocab_size=100, special_tokens=["<pad>", "<unk>"])
tokenizer.train_from_iterator(sample_corpus, trainer=trainer)

encoded = tokenizer.encode("learning tokenizers")
print("Custom BPE tokens:", encoded.tokens)
ব্যাখ্যা

AutoTokenizer pretrained tokenizer load — same text কে BERT/GPT/T5 ভিন্ন ভাবে ভাঙবে দেখুন। Tokenizers library দিয়ে scratch থেকে custom BPE train করা যায় — corpus, vocab size, special token দিয়ে।

সাধারণ ভুল

  • Model আর tokenizer mismatch — gpt2 model এ bert tokenizer।
  • Vocab size খুব ছোট — সব word UNK হয়ে যায়।
  • Special token যোগ করে model embedding resize না করা।
  • Sequence length 512 এর বেশি BERT এ pass — error।

অনুশীলন

  1. একই sentence কে 3টা tokenizer দিয়ে encode, token count compare।
  2. Custom BPE তে নিজের corpus train করুন।
  3. tiktoken (OpenAI) দিয়ে GPT-4 tokenizer try করুন।
  4. Bangla text এ multilingual tokenizer apply।

ছোট প্রজেক্ট

Tokenizer Comparison Tool

একটা script যা user input নেয় এবং BERT/GPT-2/T5/LLaMA tokenizer দিয়ে tokenize করে — token count, sequence length, vocabulary efficiency comparison table দেখায়।

সারাংশ

  • Tokenization = text কে model-readable unit এ ভাঙা।
  • Subword tokenization: rare word ও handle।
  • BPE (GPT), WordPiece (BERT), SentencePiece (T5/LLaMA)।
  • Tokenizer ও model জোড়ায় train — mismatch হলে garbage।
  • Custom tokenizer = domain-specific NLP এর key।