Hugging Face হাতে-কলমে: pretrained transformer দিয়ে কাজ

Project P6 — HF text app (Series 07, Episode 07)

🟡 INTERMEDIATE Series 07 — NLP, Transformers ও LLM Episode 07 / 08

📑 এই পর্বে যা যা আছে

🧩 ১. গল্প: "এত বড় model নিজে বানাব?!"

গত পর্বে Rahim দেখল একটা "ছোট" BERT-এও ১১ কোটি parameter। সে ঘাবড়ে গেল — "এটা তো আমার laptop-এ কোনোদিন train হবে না!"

Rahim: "আপা, এত বড় model তো আমি কখনো train করতে পারব না। তাহলে কি Transformer আমার জন্য নয়?"

Arif (ML Engineer): "কে বলল নিজে train করতে হবে? দুনিয়ার সেরা প্রতিষ্ঠান কোটি কোটি টাকা খরচ করে model pretrain করে সেগুলো বিনামূল্যে ছেড়ে দিয়েছে। আমরা সেগুলো নামিয়ে সরাসরি ব্যবহার করি, দরকার হলে অল্প data দিয়ে fine-tune করি। এই সব model যেখানে পাওয়া যায়, তার নাম Hugging Face। এটা AI-এর GitHub বলতে পারো।"

২. সমস্যা: scratch থেকে অসম্ভব

একটা বড় Transformer scratch থেকে train করতে লাগে: টেরাবাইট data, শত শত GPU, লক্ষ লক্ষ ডলার, সপ্তাহের পর সপ্তাহ। একজন junior (বা বেশিরভাগ কোম্পানির) পক্ষে এটা অবাস্তব। সমাধান — transfer learning (S06E07-এ শেখা ধারণাটাই): pretrained model নাও, তোমার নির্দিষ্ট task-এ অল্প data দিয়ে খাপ খাওয়াও।

মূল কথা: pretraining ≠ আমাদের কাজ। আমরা pretrained model ব্যবহার করি বা fine-tune করি। এটাই বেশিরভাগ AI Engineer-এর বাস্তব দৈনন্দিন কাজ।

🤗 ৩. Hugging Face কী ও কেন

Hugging Face হলো একটা platform + library যেখানে হাজার হাজার pretrained model, dataset আর tool আছে। তাদের transformers library দিয়ে কয়েক লাইনেই state-of-the-art model ব্যবহার করা যায়।

কেন Hugging Face, অন্য কিছু নয়? — কারণ এটা industry-standard, ভালো documented, বাংলা-সহ multilingual model আছে, আর PyTorch (S06) এর সাথে seamlessly কাজ করে। JD-তে এটা প্রায়ই সরাসরি চাওয়া হয়।

৪. pipeline — সবচেয়ে সহজ শুরু

Hugging Face-এর pipeline হলো সবচেয়ে সহজ entry — tokenization, model, output সব একসাথে মুড়ে দেয়। এক লাইনে একটা কাজ।

# pip install transformers torch from transformers import pipeline # task বললেই একটা উপযুক্ত pretrained model নেমে আসে clf = pipeline("sentiment-analysis") print(clf("This job description looks amazing!")) # [{'label': 'POSITIVE', 'score': 0.9998}]

🪜 ৫. তিন স্তরে Hugging Face ব্যবহার

Level 1 — সহজ intuition:
Hugging Face হলো একটা "AI app store"। দরকারি model খুঁজে নামাও, ব্যবহার করো। রান্না না করে রেডিমেড ভালো খাবার নেওয়ার মতো।

Level 2 — technical:
তিন স্তরের API: (১) pipeline — সবচেয়ে সহজ; (২) AutoTokenizer + AutoModelFor... — বেশি নিয়ন্ত্রণ; (৩) Trainer — নিজের data দিয়ে fine-tune।

Level 3 — AI Engineer perspective:
production-এ আপনি pipeline দিয়ে prototype করবেন, তারপর latency/খরচের জন্য নির্দিষ্ট model বেছে Auto-API দিয়ে optimize করবেন, আর domain-specific accuracy দরকার হলে fine-tune করবেন। কোন স্তর কখন — এই সিদ্ধান্তই engineering।

🖼️ ৬. Visual: pretrained → fine-tune → use

[বিশাল corpus] --(কোটি টাকা, শত GPU)--> [Pretrained Model] | (Hugging Face-এ free) v আমাদের ছোট labeled data --(fine-tune, laptop/Colab)--> [Task Model] | v নতুন text --> prediction

খেয়াল করুন — সবচেয়ে দামি ধাপ (pretraining) আমরা এড়িয়ে যাচ্ছি; শুধু সস্তা fine-tuning ধাপটা করছি।

💻 ৭. Code: zero-shot ও sentiment (কয়েক লাইনে)

Zero-shot classification — কোনো training ছাড়াই নিজের label দিয়ে শ্রেণিবিন্যাস। বাংলাদেশের JD sorting-এ দারুণ কাজের:

from transformers import pipeline zshot = pipeline("zero-shot-classification", model="facebook/bart-large-mnli") jd = "We need a Python engineer with PyTorch and FastAPI" labels = ["software engineering", "sales", "human resources", "finance"] result = zshot(jd, candidate_labels=labels) for lbl, score in zip(result["labels"], result["scores"]): print(f"{score:.2f} {lbl}") # 0.95 software engineering # 0.02 finance ...
কেন এটা শক্তিশালী: S07E02-এ TF-IDF classifier-এ label প্রতি অনেক training example লাগত। এখানে শূন্য training example-এ কাজ হয়ে গেল — কারণ model আগে থেকেই ভাষা "বোঝে"। এটাই pretrained Transformer-এর শক্তি।

🛠️ ৮. Project P6: একটা transformer text classifier fine-tune

এবার নিজের data দিয়ে একটা model fine-tune — এটাই আমাদের Project P6 (Transformer app)-এর মূল।

# pip install transformers datasets torch from datasets import Dataset from transformers import (AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer) # ছোট demo data (বাস্তবে bdjobs থেকে অনেক বেশি নেবেন) data = { "text": ["python django backend role", "machine learning pytorch engineer", "field sales officer fmcg", "hr recruitment payroll officer"], "label": [1, 1, 0, 0], # 1=tech, 0=non-tech } ds = Dataset.from_dict(data).train_test_split(test_size=0.5, seed=42) ckpt = "distilbert-base-uncased" # ছোট, দ্রুত -> laptop-friendly tok = AutoTokenizer.from_pretrained(ckpt) def tokenize(batch): return tok(batch["text"], truncation=True, padding="max_length", max_length=32) ds = ds.map(tokenize, batched=True) model = AutoModelForSequenceClassification.from_pretrained( ckpt, num_labels=2) args = TrainingArguments(output_dir="jd-clf", num_train_epochs=3, per_device_train_batch_size=2, report_to="none") trainer = Trainer(model=model, args=args, train_dataset=ds["train"], eval_dataset=ds["test"]) trainer.train() # inference from transformers import pipeline clf = pipeline("text-classification", model=model, tokenizer=tok) print(clf("senior python engineer with fastapi"))
কেন distilbert? — এটা BERT-এর ছোট, দ্রুত সংস্করণ (৪০% ছোট, ৬০% দ্রুত, প্রায় সমান accuracy)। junior হিসেবে laptop/Google Colab-এ চালানোর জন্য আদর্শ, আর production-এ latency কম।

🔬 ৯. Experiment: pretrained বনাম fine-tuned

১. উপরের zero-shot pipeline দিয়ে আপনার JD গুলো classify করুন (training ছাড়া)।
২. তারপর fine-tuned distilbert দিয়ে একই JD classify করুন।
৩. তুলনা করুন: কোনটা আপনার নির্দিষ্ট domain-এ বেশি নিখুঁত? সাধারণত domain-specific fine-tuned model জেতে, কিন্তু তার জন্য labeled data ও কিছু compute লাগে — এই trade-off বোঝাই আসল শিক্ষা।

🇧🇩 ১০. বাস্তব উদাহরণ ও AI Engineer perspective

Must Know: pipeline দিয়ে task চালানো, pretrained model ব্যবহার, ছোট fine-tune।
Good to Know: Trainer API, dataset handling, distilled model বেছে নেওয়া।
Learn Later: বড় scale fine-tuning, distributed training, custom head।

💼 ১১. Boss Question

Boss: "আমাদের তো বিশাল GPU নেই। তাহলে আমরা কি AI product বানাতে পারব না?"

উত্তর: অবশ্যই পারব। Hugging Face-এর হাজার হাজার pretrained model বিনামূল্যে আছে — আমরা সেগুলো ব্যবহার করে বা সামান্য fine-tune করে অল্প খরচে (এমনকি free Google Colab-এ) product বানাতে পারি। বড় model নিজে train করার দরকারই নেই। এটাই আধুনিক AI-এর গণতন্ত্রীকরণ — ছোট team-ও competitive হতে পারে।

🔎 ১২. Job Requirement Decoder: "Hugging Face"

JD-তে: "Experience with Hugging Face transformers."
প্রশ্নউত্তর
কী বোঝায়?pretrained model load, use ও fine-tune করতে পারা।
কেন চায়?দ্রুত, সস্তায় production-grade NLP feature বানানোর industry-standard উপায়।
কোন সমস্যা সমাধান করে?scratch থেকে train না করে state-of-the-art model ব্যবহার।
junior-এর কী জানা লাগে?pipeline, AutoTokenizer/AutoModel, একটা ছোট classifier fine-tune।
এখনই কী master লাগে না?বড় scale distributed fine-tuning, custom architecture।
GitHub-এ কীভাবে দেখাবেন?একটা fine-tuned text classifier repo — training script, metrics, inference demo।
Interview-তে?"pipeline কী?", "fine-tuning vs pretraining?", "কোন model কেন বাছবেন?"

⚠️ ১৩. সাধারণ ভুল

ভুল ১: fine-tuning-কে pretraining ভাবা। → fine-tuning = অল্প data দিয়ে খাপ খাওয়ানো; pretraining = scratch থেকে বিশাল খরচ।

ভুল ২: ইংরেজি model দিয়ে বাংলা task করা। → বাংলা/multilingual model বাছুন।

ভুল ৩: সবসময় সবচেয়ে বড় model নেওয়া। → distilbert-এর মতো ছোট model প্রায়ই যথেষ্ট ও দ্রুত।

ভুল ৪: tokenizer আর model আলাদা checkpoint থেকে নেওয়া। → দুটো একই checkpoint-এর হতে হবে।

🎤 ১৪. Interview Prep

প্রশ্ন ১: Fine-tuning আর pretraining-এর পার্থক্য?
উত্তর: pretraining = বিশাল general data-তে scratch থেকে শেখানো (দামি); fine-tuning = সেই pretrained model-কে ছোট task-specific data দিয়ে অল্প train করা (সস্তা)।

প্রশ্ন ২: Hugging Face pipeline কী করে?
উত্তর: tokenization → model inference → output post-processing — সব এক API-তে মুড়ে দেয়, দ্রুত prototype-এর জন্য।

প্রশ্ন ৩: কখন zero-shot, কখন fine-tune?
উত্তর: labeled data না থাকলে/দ্রুত শুরু করতে zero-shot; domain-specific উচ্চ accuracy লাগলে ও data থাকলে fine-tune।

✍️ ১৫. হাতে-কলমে ও Project Connection

১. একটা বাংলা BERT model দিয়ে pipeline("fill-mask") চালিয়ে দেখুন সে ফাঁকা শব্দ কী predict করে।
২. উপরের P6 classifier-এ আরও data যোগ করে test accuracy বাড়ে কিনা দেখুন।
৩. distilbert বনাম bert-base — inference সময় তুলনা করুন (time দিয়ে)।

flagship "Bangladesh Tech Career Assistant" এখন একটা fine-tuned transformer পেল যা JD auto-classify করে (P6)। এটা আমাদের V5 (NLP) পর্যায়ের শীর্ষ — TF-IDF baseline থেকে শুরু করে এখন আমরা transformer-grade বোঝাপড়ায় পৌঁছেছি। এরপর আমরা LLM ও RAG-এর দিকে যাব।

📌 ১৬. সারসংক্ষেপ ও পরবর্তী পর্ব

এই পর্বে শিখলাম:

✓ বড় model নিজে train করার দরকার নেই — pretrained ব্যবহার/fine-tune করি
✓ Hugging Face = AI-এর GitHub; transformers + datasets library
✓ তিন স্তর: pipeline (সহজ) → Auto API (নিয়ন্ত্রণ) → Trainer (fine-tune)
✓ zero-shot দিয়ে training ছাড়াই classification (Project P6-এর ভিত্তি)
✓ distilbert fine-tune করে JD classifier — laptop/Colab-বান্ধব
✓ ছোট team-ও অল্প খরচে production AI বানাতে পারে
পরবর্তী পর্ব (S07E08): এবার সবচেয়ে আলোচিত জিনিস — LLM। GPT, Llama, Mistral, Claude, Gemini আসলে কী; token, context window, inference মানে কী; আর সবচেয়ে জরুরি পার্থক্য — training ≠ inference। এই পর্বই আমাদের Series 08 (Generative AI) এর দরজা খুলে দেবে।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.