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

টেক্সট জেনারেশন

Text Generation

AI কে কথা বলতে শেখানো।

ভূমিকা

ChatGPT যেভাবে এক word করে কথা বলে, GitHub Copilot যেভাবে code complete করে — সব Text Generation এর magic। আপনি প্রম্পট দেন, model probability distribution দেয়, sampling strategy decide করে actual word। এই strategy ই কথা boring না creative করে।

ধারণা

Text Generation = autoregressive decoding — প্রতিটা step এ model পরের token এর probability distribution দেয়, decoding strategy দিয়ে actual token select হয়, সেটা append করে আবার model এ feed। Strategies: Greedy (always max), Beam Search (top-k path), Top-k sampling, Top-p (nucleus) sampling, Temperature scaling, Repetition penalty।

সহজ ব্যাখ্যা

ভাবুন আপনাকে বলা হলো 'The weather today is ___' — possible word: sunny, cloudy, rainy, hot, nice... Greedy পদ্ধতি সবসময় highest probability নেবে — boring। Top-p (nucleus) cumulative 90% probability mass থেকে random pick — diverse। Temperature বাড়ালে distribution flatten হয়, কম করলে peak — কম creative, বেশি deterministic।

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

  • ChatGPT, Claude — chat completion।
  • GitHub Copilot — code generation।
  • Story generator, marketing copy, email draft।
  • Translation — beam search standard।
  • Code completion — temperature কম, deterministic।

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

1
Step 1 — Prompt design
Clear instruction, context, example।
2
Step 2 — Strategy choose
Factual: greedy/beam, Creative: top-p sampling।
3
Step 3 — Parameter tune
temperature 0.7, top_p 0.9, top_k 50 — common defaults।
4
Step 4 — Stop criteria
max_length, EOS token, stop string।
5
Step 5 — Post-process
Trim, remove prompt, format।

Python কোড

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

tok = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
model.eval()

prompt = "Once upon a time in a small village"
inputs = tok(prompt, return_tensors="pt")

print("--- Greedy ---")
greedy = model.generate(**inputs, max_new_tokens=30, do_sample=False, pad_token_id=tok.eos_token_id)
print(tok.decode(greedy[0], skip_special_tokens=True))

print("\n--- Beam Search ---")
beam = model.generate(**inputs, max_new_tokens=30, num_beams=4, no_repeat_ngram_size=2, early_stopping=True, pad_token_id=tok.eos_token_id)
print(tok.decode(beam[0], skip_special_tokens=True))

print("\n--- Top-p Sampling (creative) ---")
torch.manual_seed(42)
nucleus = model.generate(
    **inputs, max_new_tokens=30, do_sample=True,
    top_p=0.92, top_k=50, temperature=0.9,
    repetition_penalty=1.2, pad_token_id=tok.eos_token_id,
)
print(tok.decode(nucleus[0], skip_special_tokens=True))
ব্যাখ্যা

একই prompt তিনটা strategy দিয়ে generate — output আলাদা। Greedy deterministic, beam search high-quality কিন্তু safe, nucleus sampling diverse + creative। repetition_penalty>1 দিয়ে same word বারবার আসা কমে। no_repeat_ngram_size beam এ phrase repeat বন্ধ।

সাধারণ ভুল

  • Creative writing এ greedy use — সব boring repetitive।
  • Factual QA তে high temperature — hallucination বাড়ে।
  • Stop token না দেওয়া — model রamble করে।
  • Repetition penalty না দেওয়া — same phrase loop।

অনুশীলন

  1. 5টা decoding strategy একই prompt এ চালিয়ে output difference observe।
  2. Temperature 0.2 / 0.7 / 1.5 — quality vs creativity।
  3. Top-k 1 vs Top-k 100 — কেমন বদলায়।
  4. Code generation এ greedy + low temperature — কেন?

ছোট প্রজেক্ট

Story Generation Playground

একটি interactive script যা user থেকে prompt এবং (greedy/beam/nucleus/temperature) choice নেয়, GPT-2 দিয়ে 100 token generate করে, এবং side-by-side comparison output দেখায়।

সারাংশ

  • Text Generation = autoregressive decoding loop।
  • Greedy = deterministic, Beam = quality, Sampling = creative।
  • Temperature, top-k, top-p দিয়ে fine control।
  • Use case ভেদে strategy বদলায়।
  • Modern chatbot/assistant এর core mechanism।