Chapter 34
BERT
BERT
🎬 Bidirectional Encoder
BERT (Devlin et al., 2018) Transformer encoder ব্যবহার করে — কিন্তু bidirectional ভাবে। প্রতিটি token-এর জন্য বাম ও ডান, উভয় context থেকে representation শেখে। NLP-তে নতুন SOTA যুগ।
Pretraining Objective
1. Masked Language Model (MLM)
ইনপুটের ১৫% token random mask — মডেল context থেকে predict করে।
Input: আমি [MASK] লার্নিং ভালোবাসি
Target: ডিপ2. Next Sentence Prediction (NSP)
দুটি বাক্য পরপর কিনা predict (পরে RoBERTa দেখাল NSP দরকার নেই)।
মডেল সাইজ
Variant
Layer
Hidden
Params
BERT-Base
12
768
110M
BERT-Large
24
1024
340M
HuggingFace দিয়ে inference
from transformers import AutoTokenizer, AutoModel
import torch
tok = AutoTokenizer.from_pretrained("bert-base-uncased")
mdl = AutoModel.from_pretrained("bert-base-uncased")
ids = tok("hello world", return_tensors="pt")
with torch.no_grad():
out = mdl(**ids)
print(out.last_hidden_state.shape) # (1, T, 768)
print(out.pooler_output.shape) # (1, 768) — [CLS]Fine-tuning Classification
from transformers import (AutoTokenizer, AutoModelForSequenceClassification,
Trainer, TrainingArguments)
from datasets import load_dataset
ds = load_dataset("imdb")
tok = AutoTokenizer.from_pretrained("distilbert-base-uncased")
ds = ds.map(lambda x: tok(x["text"], truncation=True, padding="max_length",
max_length=256), batched=True)
mdl = AutoModelForSequenceClassification.from_pretrained(
"distilbert-base-uncased", num_labels=2)
args = TrainingArguments(output_dir="out", per_device_train_batch_size=16,
num_train_epochs=2, learning_rate=2e-5,
evaluation_strategy="epoch")
Trainer(mdl, args, train_dataset=ds["train"].shuffle().select(range(5000)),
eval_dataset=ds["test"].select(range(1000))).train()BERT-পরিবার
- RoBERTa: NSP বাদ, বড় batch, বেশি data → উন্নত।
- DistilBERT: ৪০% ছোট, ৬০% দ্রুত, ৯৭% accuracy।
- ALBERT: parameter sharing — অনেক ছোট।
- ELECTRA: replaced-token-detection — সস্তা pretraining।
- mBERT, XLM-R: 100+ ভাষা — বাংলার জন্য ভালো।
- BanglaBERT: বাংলা-নির্দিষ্ট।
সাধারণ NLP টাস্কে BERT
- Text Classification — [CLS] → Linear।
- NER — token-level head।
- Question Answering — start/end logits।
- Sentence Pair (NLI, similarity) — [CLS] উপরে classifier।
- Embedding extraction — semantic search।
🔑 [CLS] টোকেন
BERT-এর শুরুতে সবসময় [CLS] token — পুরো বাক্যের "summary" এখানে জমা হয়। Classification-এ সাধারণত এর hidden state-এর উপরই head বসে।
অনুশীলন
১. DistilBERT দিয়ে IMDB-তে fine-tune করে accuracy report করুন।
২. mBERT/XLM-R দিয়ে বাংলা sentiment classification।
৩. BERT embedding + FAISS দিয়ে ছোট semantic search।
সারসংক্ষেপ
✨ এই অধ্যায়ে যা শিখলাম
- BERT = encoder-only Transformer + MLM pretraining।
- Fine-tune করে প্রায় সব NLP task-এ চমৎকার ফল।
- DistilBERT, RoBERTa, XLM-R — গুরুত্বপূর্ণ পরিবার।