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