রোডম্যাপ
PHASE 4 · অধ্যায় 21

Seq2Seq মডেল

Sequence to Sequence Models

Translation এবং summarization এর foundation।

ভূমিকা

এখন পর্যন্ত আমরা একটা sequence input → একটা label predict করছিলাম। কিন্তু machine translation এ input এক ভাষার sentence, output আরেক ভাষার sentence — দুটোই sequence, length আলাদা! এই problem এর architecture: Sequence-to-Sequence (Seq2Seq) — modern translation, summarization, chatbot এর foundation।

ধারণা

Seq2Seq architecture দুটো অংশ — Encoder এবং Decoder। Encoder (RNN/LSTM/GRU) input sequence কে একটা context vector এ compress করে। Decoder সেই context vector থেকে শুরু করে এক element করে output sequence generate করে। Translation, summarization, question answering, chatbot — সব এই pattern এ।

সহজ ব্যাখ্যা

ভাবুন একজন translator — সে প্রথমে পুরো English sentence পড়ে মাথায় meaning দাঁড় করায় (encoding), তারপর সেই meaning থেকে এক word করে Bangla sentence লেখে (decoding)। Encoder থেকে decoder এ যায় শুধু একটা context vector — সেটাই সব meaning ধরে রাখে। (Attention আসার আগে এটাই bottleneck ছিল!)

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

  • Google Translate (early neural version)।
  • Text summarization — long article → short summary।
  • Chatbot — user message → bot reply।
  • Code generation — natural language → code।
  • Speech-to-text এর end-to-end model।

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

1
Step 1 — Tokenize source + target
দুটো ভাষার আলাদা vocabulary।
2
Step 2 — Encoder
Source sequence → context vector (final hidden state)।
3
Step 3 — Decoder init
Encoder এর final hidden = decoder এর initial hidden।
4
Step 4 — Decode step by step
<SOS> থেকে শুরু, এক token করে predict, <EOS> পর্যন্ত।
5
Step 5 — Teacher forcing
Training এ ground truth previous token feed করা।

Python কোড

import torch
import torch.nn as nn

class Encoder(nn.Module):
    def __init__(self, vocab_size, embed_dim, hidden_dim):
        super().__init__()
        self.embedding = nn.Embedding(vocab_size, embed_dim)
        self.gru = nn.GRU(embed_dim, hidden_dim, batch_first=True)

    def forward(self, src):
        emb = self.embedding(src)
        _, hidden = self.gru(emb)
        return hidden

class Decoder(nn.Module):
    def __init__(self, vocab_size, embed_dim, hidden_dim):
        super().__init__()
        self.embedding = nn.Embedding(vocab_size, embed_dim)
        self.gru = nn.GRU(embed_dim, hidden_dim, batch_first=True)
        self.fc = nn.Linear(hidden_dim, vocab_size)

    def forward(self, tgt_token, hidden):
        emb = self.embedding(tgt_token)
        out, hidden = self.gru(emb, hidden)
        logits = self.fc(out)
        return logits, hidden

class Seq2Seq(nn.Module):
    def __init__(self, src_vocab, tgt_vocab, embed_dim=64, hidden_dim=128):
        super().__init__()
        self.encoder = Encoder(src_vocab, embed_dim, hidden_dim)
        self.decoder = Decoder(tgt_vocab, embed_dim, hidden_dim)

    def forward(self, src, tgt):
        hidden = self.encoder(src)
        logits, _ = self.decoder(tgt, hidden)
        return logits

model = Seq2Seq(src_vocab=2000, tgt_vocab=2500)
src = torch.randint(0, 2000, (4, 10))
tgt = torch.randint(0, 2500, (4, 12))
out = model(src, tgt)
print("Output shape:", out.shape)
ব্যাখ্যা

Encoder source sequence read করে শুধু final hidden state return করে — এটাই context vector। Decoder সেই hidden দিয়ে শুরু করে, target token গুলো feed করে output predict করে। Training এ teacher forcing — actual previous target দেওয়া হয়। Inference এ decoder এর own prediction পরের step এ feed হয়।

সাধারণ ভুল

  • Long input এ context vector overload হয় — single vector এ সব meaning ধরে না।
  • Inference এ teacher forcing ব্যবহার করা — ভুল, ground truth তো নেই।
  • <SOS> <EOS> <PAD> special token handle না করা।
  • Source আর target এর vocabulary mix করে ফেলা।

অনুশীলন

  1. Number → English word (123 → 'one two three') seq2seq।
  2. Date format conversion (2025-05-24 → 24 May 2025)।
  3. Small English → Bangla phrase translator।
  4. Greedy decoding vs beam search compare।

ছোট প্রজেক্ট

Mini Translator (EN → BN phrases)

৫০-১০০ টা English-Bangla phrase pair নিয়ে একটা Seq2Seq (encoder-decoder GRU) train করুন। Teacher forcing দিয়ে train, greedy decoding দিয়ে inference। Vocabulary, padding, <SOS>/<EOS> token সব properly handle করুন।

সারাংশ

  • Seq2Seq = Encoder + Decoder architecture।
  • Encoder input কে context vector এ compress।
  • Decoder context থেকে output sequence generate।
  • Translation, summarization, chatbot এর foundation।
  • Bottleneck: single context vector — এই সমস্যা থেকেই Attention এর জন্ম। Phase 4 complete!