রোডম্যাপ
PHASE 5 · অধ্যায় 24

বার্ট

BERT

Bidirectional understanding এর master।

ভূমিকা

Transformer দারুণ, কিন্তু একটা সমস্যা — train করতে massive labeled data দরকার। ২০১৮ — Google BERT publish করল একটা genius idea নিয়ে: massive unlabeled text এ pretrain করো 'মাস্কড word predict' task এ, তারপর small labeled data দিয়ে fine-tune করো। Result? প্রায় সব NLP benchmark এ state-of-the-art।

ধারণা

BERT (Bidirectional Encoder Representations from Transformers) একটি encoder-only transformer যা দুটো task এ pretrain করা হয়েছে: (1) Masked Language Modeling — random 15% token mask করে predict, (2) Next Sentence Prediction — দুটো sentence consecutive কিনা। 'Bidirectional' কারণ মাস্কড word predict এ left + right দুই context ই দেখে।

সহজ ব্যাখ্যা

GPT (decoder) শুধু left-to-right পড়ে — 'The cat sat on the ___' এ পরের word predict। BERT bidirectional — 'The cat ___ on the mat' এর mask দুই দিক থেকে context দেখে fill করে। এই bidirectional context BERT কে সব classification, NER, QA task এ powerful বানায়। Fine-tuning এ pretrained model এর উপর small head লাগিয়ে দিলেই হয়।

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

  • Google Search ranking (২০১৯ থেকে)।
  • Question answering — SQuAD benchmark।
  • Sentiment classification — production grade।
  • Named entity recognition।
  • Sentence similarity, Sentence-BERT — semantic search।

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

1
Step 1 — Pretrained model load
HuggingFace থেকে bert-base-uncased download।
2
Step 2 — Tokenize
WordPiece tokenizer, [CLS] শুরুতে, [SEP] শেষে।
3
Step 3 — Forward pass
Output: last_hidden_state, pooler_output।
4
Step 4 — Task head লাগান
Classification এ [CLS] vector → linear → softmax।
5
Step 5 — Fine-tune
Small dataset, low learning rate (2e-5), few epochs।

Python কোড

from transformers import AutoTokenizer, AutoModel
import torch

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")

sentences = [
    "NLP is transforming the world of AI.",
    "I love learning about transformers.",
]

inputs = tokenizer(sentences, padding=True, truncation=True, return_tensors="pt")
print("Input ids shape:", inputs["input_ids"].shape)

with torch.no_grad():
    outputs = model(**inputs)

last_hidden = outputs.last_hidden_state
cls_embeddings = last_hidden[:, 0, :]
print("Last hidden:", last_hidden.shape)
print("CLS embedding (sentence rep):", cls_embeddings.shape)
ব্যাখ্যা

AutoTokenizer text কে BERT এর WordPiece token এ ভাঙে, padding/truncation handle করে। AutoModel pretrained BERT load করে। outputs.last_hidden_state প্রতিটা token এর contextual embedding (batch, seq_len, 768)। [CLS] token (index 0) এর vector পুরো sentence এর representation — classification এ ব্যবহার হয়।

সাধারণ ভুল

  • Pretrained model কে scratch থেকে train করার চেষ্টা — fine-tune করতে হয়।
  • Learning rate বেশি (1e-3) দেওয়া — BERT এ 2e-5 / 3e-5 standard।
  • Special token ([CLS], [SEP]) manually যোগ না করা — tokenizer auto করে।
  • Bangla text এ english BERT — multilingual বা banglabert দরকার।

অনুশীলন

  1. bert-base-uncased দিয়ে IMDB sentiment fine-tune করুন।
  2. csebuetnlp/banglabert দিয়ে bangla text classify।
  3. Sentence-BERT দিয়ে semantic similarity বের করুন।
  4. BERT এর masked token predict করে দেখুন pipeline('fill-mask') দিয়ে।

ছোট প্রজেক্ট

BERT Fine-tune Classifier

একটা small labeled dataset (যেমন 500টা review positive/negative) নিয়ে bert-base-uncased কে HuggingFace Trainer দিয়ে fine-tune করুন। Test set এ accuracy এবং confusion matrix report করুন।

সারাংশ

  • BERT = bidirectional encoder, pretrain + fine-tune paradigm।
  • MLM + NSP দিয়ে massive unlabeled corpus এ trained।
  • Bidirectional context = classification/NER/QA তে strong।
  • [CLS] vector = sentence-level representation।
  • Pretrain + fine-tune workflow modern NLP কে define করেছে।