Lensa ML

Seq2Seq & Beam Search

Langkah 1 dari 6: Ide Encoder-Decoder

Mampatkan input → vector tetap → hasilkan output

Panjang input sequence4
EncoderDecodertheh1cath2ish3smallh4contexts1les2chats3ests4petit4 token → 1 vector
Panjang input
4
Panjang output
4
Bottleneck
1 vector

4 token input → 1 context vector → 4 token output. Sepanjang apa pun input-nya, encoder mengemasnya ke dalam satu vector. Decoder tidak pernah melihat token aslinya, hanya ringkasan ini.

Geser Panjang input sequence dari 2 ke 7 dan bandingkan jumlah token input dan output. Paper 2014 dari Sutskever, Vinyals, dan Le memakai dua LSTM terpisah dengan 4 layer dan 1.000 sel per layer, satu untuk membaca bahasa Inggris dan satu untuk menulis bahasa Prancis, sehingga setiap kalimat menjadi 8.000 angka state. Salah satu temuan paper itu: membalik urutan kata kalimat sumber menaikkan BLEU dari 25,9 ke 30,6, karena kata-kata pertama sumber jadi berdekatan dengan kata-kata pertama target. Cho et al. mengusulkan RNN encoder-decoder yang serupa pada tahun yang sama.

Langkah 2 dari 6: Encoding

Encoder RNN memproses token input satu per satu

Time step0
Encoder RNNIh1loveh2deeph3learningh4Perubahan hidden stated1d2d3d4d5d6h1h2h3h40.380.600.250.74-0.300.56h1 = tanh( W_h · h0 + W_x · embed("I") )
Time step
1 / 4
Token
I
‖h‖
1.233
Δ dari sebelumnya
1.233

Memproses "I": h1 dihitung dari state awal bernilai nol dan input embedding. Heatmap menampilkan hidden vector 6D, yaitu memori berjalan RNN. Merah = positif, ungu = negatif.

Geser Time step dari 0 ke 3 untuk memasukkan "I love deep learning" ke encoder satu kata demi satu kata. Setiap langkah menerapkan update yang sama, h_t = tanh(W_h h_{t−1} + W_x x_t + b), dengan weight yang sama di setiap posisi, sehingga encoder menerima input sepanjang apa pun. Sistem sungguhan memakai sel LSTM atau GRU, bukan RNN tanh polos seperti ini, karena gate-nya mencegah gradient menghilang pada input yang panjang. Bidirectional encoder menjalankan RNN kedua dari kanan ke kiri dan menggabungkan kedua state, sehingga setiap posisi melihat kata di kedua sisinya.

Langkah 3 dari 6: Decoding

Decoder menghasilkan token output secara autoregressive

Langkah decoding0
contextDecoder<SOS>s1J'J's2aimes3les4deeps5learnings6softmax → P(token | s1)J'62%Je21%Le8%Il5%Un4%
Langkah
1 / 6
Input
<SOS>
Output
J'
Confidence
62%

Decoding dimulai: <SOS> + context vector → s1 → softmax memilih "J'" (confidence 62%). Panah melengkung mengumpankan output ini kembali sebagai input langkah berikutnya.

Geser Langkah decoding dari 0 ke 5 untuk menghasilkan terjemahan satu per satu token. Decoder memfaktorkan probabilitas output sebagai P(y | x) = Π_t P(y_t | y_<t, c), dengan setiap suku bergantung pada output sebelumnya dan context vector c. Saat training, decoder diberi kata sebelumnya yang benar, bukan tebakannya sendiri. Metode ini disebut teacher forcing. Pembelajaran jadi lebih cepat, tetapi muncul exposure bias: saat pengujian, model harus pulih dari kesalahannya sendiri, sesuatu yang tidak pernah dilatihnya saat training.

Langkah 4 dari 6: Greedy vs Beam Search

Menjelajahi beberapa hipotesis demi terjemahan yang lebih baik

Beam width1
t=0t=1t=2SOSJ'-0.95Un-1.30✕Je-1.30✕Le-2.11✕aime-2.00✕suis-1.48veux-2.36✕Terbaik: SOS → J' suis (-1.48)tetapdipangkas
Beam width
1
Diperluas
3
Dipangkas
2
Skor terbaik
-1.48

Greedy decoding (beam=1): hanya satu token terbaik yang bertahan di setiap langkah. 3 kandidat dipangkas pada t=1, 2 pada t=2. Cepat tetapi berpandangan pendek: token terbaik saat ini belum tentu mengawali kalimat terbaik.

Geser Beam width dari 1 ke 4 dan lihat berapa cabang yang bertahan. Pencarian menyeluruh mustahil dilakukan: dengan vocabulary 30.000 kata, output 10 kata punya 30.000¹⁰ kandidat. Beam search hanya menyimpan k output parsial terbaik di setiap langkah, dengan biaya sekitar k kali greedy decoding. Sutskever et al. menemukan bahwa beam 2 sudah memberi sebagian besar peningkatannya. Beam search cocok untuk tugas dengan satu jawaban benar, seperti penerjemahan dan speech recognition. Chatbot dan penulisan cerita biasanya memakai sampling, karena beam cenderung menghasilkan teks yang datar dan berulang.

Langkah 5 dari 6: Skor Beam

Memeringkat kandidat terjemahan berdasarkan log-probability

Length penalty α0.00
← dari beam treedecoding berlanjut →#1J'-0.31aime-0.42le-0.38deep-0.22learning-0.35-1.68mentah: -1.68 / 5#2J'-0.31suis-0.65deep-0.48learning-0.40-1.84mentah: -1.84 / 4#3J'-0.31veux-0.85le-0.30deep-0.25learning-0.38-2.09mentah: -2.09 / 5#4Je-0.90suis-0.50profond-1.20-2.60mentah: -2.60 / 3#5Le-0.72aime-0.55le-0.38apprentissage-0.95-2.60mentah: -2.60 / 4skor mentah
α
0.00
Terbaik
-1.68
Hipotesis terbaik
#1
Rentang panjang
3–5

Tanpa length penalty (α=0): jumlah log-prob mentah menentukan peringkat. Setiap token tambahan menambah suku negatif, jadi skor ini menguntungkan output pendek. Token berbingkai kuning (dua kolom pertama) adalah jalur beam dari langkah 4.

Geser Length penalty α dari 0 ke 1 dan lihat skor ternormalisasi berubah. Skor kalimat adalah jumlah log-probability setiap token, dan setiap token hanya bisa menurunkannya. Tanpa koreksi, beam search lebih menyukai output pendek dan bisa berhenti terlalu cepat. Sistem terjemahan neural Google tahun 2016 membagi skor dengan penalty yang lebih lunak, lp(Y) = ((5 + |Y|) / 6)^α, bukan dengan panjang mentah. Sistem ini juga menambahkan coverage penalty yang mengutamakan output yang memperhatikan setiap kata sumber, untuk mengatasi kegagalan terkait: terjemahan yang melewatkan sebagian input.

Langkah 6 dari 6: Keterbatasan & Attention

Bottleneck informasi mendorong lahirnya mekanisme attention

Panjang input sequence4
Panjang input1510152002550Skor BLEUSeq2Seq+ Attention
Panjang input
4
Seq2Seq
38.3
+ Attention
41.7
Selisih
+3.4

Input pendek: context vector berukuran tetap menampung cukup informasi, jadi Seq2Seq biasa bekerja baik dan attention hanya menambah sedikit.

Geser Panjang input sequence dari 1 ke 20 dan bandingkan kedua kurva. Angkanya hanya ilustrasi, tetapi bentuknya sesuai dengan Cho et al. (2014), yang menemukan bahwa terjemahan encoder-decoder dasar memburuk jauh saat kalimat makin panjang. Bahdanau, Cho, dan Bengio memperbaikinya dengan membuat decoder menghitung weighted average baru dari semua encoder state di setiap langkah output. Transformer (2017) mempertahankan susunan encoder-decoder dan attention, lalu mengganti recurrent layer dengan attention juga.

Apa itu model sequence-to-sequence (seq2seq)?

Model sequence-to-sequence (seq2seq) adalah neural network yang memetakan input sequence ke output sequence yang panjangnya bisa berbeda. Encoder membaca input dan memampatkannya menjadi context vector, lalu decoder menghasilkan output satu per satu token dari vector itu. Pada bentuk aslinya tahun 2014, kedua bagiannya adalah recurrent network.

Model seq2seq membuat neural machine translation layak dipakai dan dalam beberapa tahun menggantikan sistem phrase-based di Google Translate dan tempat lain. Susunan encoder-decoder yang sama menangani peringkasan, speech recognition, question answering, dan pembuatan kode. Kelemahan utamanya, memeras seluruh input ke dalam satu vector, langsung mengarah ke attention, lalu ke Transformer, yang tetap memakai desain encoder-decoder pada model seperti T5 dan BART.

Ide utama

  • Encoder mengubah input sequence menjadi context vector, dan decoder mengubah vector itu menjadi output sequence.
  • Panjang input dan output tidak saling bergantung, sehingga cocok untuk penerjemahan dan peringkasan.
  • Decoder bersifat autoregressive: setiap token output diumpankan kembali sebagai input berikutnya.
  • Teacher forcing melatih decoder dengan token sebelumnya yang benar, bukan prediksinya sendiri.
  • Beam search menyimpan k output parsial paling mungkin, bukan hanya satu yang terbaik.
  • Satu context vector berukuran tetap membatasi kualitas pada input panjang, dan attention menghapus batas itu.

Pertanyaan umum

Apa bedanya seq2seq dan Transformer?

Seq2seq adalah nama susunan tugasnya, yaitu memetakan satu sequence ke sequence lain dengan encoder dan decoder. Model seq2seq awal membangun kedua bagian itu dari RNN. Transformer adalah arsitektur yang mengisi kedua peran yang sama dengan attention layer, jadi ia sendiri adalah model seq2seq, hanya saja tidak recurrent.

Apa itu token <SOS> dan <EOS>?

<SOS> (start of sequence) adalah input pertama ke decoder, yang memberinya pijakan sebelum ada kata yang dihasilkan. <EOS> (end of sequence) adalah token yang dipelajari decoder untuk dikeluarkan saat output selesai. Dengan cara ini, model menentukan sendiri panjang output-nya.

Bagaimana model seq2seq dievaluasi?

Terjemahan biasanya dinilai dengan BLEU, yang menghitung berapa banyak n-gram dari output yang juga muncul di terjemahan rujukan. Peringkasan sering memakai ROUGE, yang berfokus pada recall n-gram rujukan. Keduanya hanya perkiraan kasar, jadi penilaian manusia dan metrik yang dipelajari seperti COMET dipakai berdampingan.

Apakah GPT model seq2seq?

Tidak dalam arti ketat. GPT hanya memakai decoder: input dan output berbagi satu sequence, dan model melanjutkannya token demi token. GPT tetap bisa mengerjakan tugas seq2seq seperti penerjemahan dengan membaca teks sumber sebagai prompt dan menghasilkan targetnya setelah itu.

Penjelasan terkait

Referensi

  1. Sutskever, Vinyals & Le (2014), "Sequence to Sequence Learning with Neural Networks", NeurIPS
  2. Cho et al. (2014), "Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation", EMNLP
  3. Cho et al. (2014), "On the Properties of Neural Machine Translation: Encoder-Decoder Approaches"
  4. Bahdanau, Cho & Bengio (2014), "Neural Machine Translation by Jointly Learning to Align and Translate"
  5. Wu et al. (2016), "Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation"

Terakhir diperbarui