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