Sequence-to-Sequence Models
Diziden diziye (seq2seq) modelleri, çeviri, özetleme veya konuşma örneklerinde olduğu gibi, bir girdi dizisini farklı uzunluktaki bir çıktı dizisine dönüştürür.
Diziden diziye (seq2seq) modeller, İngilizce bir cümlenin Fransızca çevirisi, uzun bir makalenin özeti veya bir ses kaydının dökümü gibi uzunluğu değişebilen bir diziyi başka bir diziye dönüştürür. Çoğu, kodlayıcı-kod çözücü tasarımı kullanır: kodlayıcı tüm girdiyi iç gösterimlere dönüştürür; kod çözücü ise bu gösterimlere ve daha önce ürettiği belirteçlere koşullu olarak çıktıyı her seferinde bir belirteç üreterek oluşturur. Bu yaklaşım, Sutskever, Vinyals ve Le'nin 2014'te Google'da Sequence to Sequence Learning with Neural Networks makalesini yayımlaması ve Cho ve diğerlerinin makine çevirisi için bir RNN kodlayıcı-kod çözücü tanımlamasıyla modern biçimini aldı. 2017'den bu yana seq2seq modellerinin çoğu Transformer'lardan oluşturuluyor.
Seq2Seq Modeller Nasıl Çalışır#
2014 modelinde, kodlayıcıdaki uzun-kısa süreli bellek (LSTM) ağı kaynak cümleyi sözcük sözcük okur ve tek bir sabit uzunluklu vektöre sıkıştırır; LSTM kod çözücü de bu vektörü açarak çeviriyi üretir. Sutskever ve diğerleri dört katmanlı LSTM'ler kullandı, kaynak sözcüklerin sırasını tersine çevirmenin eğitimi kolaylaştırdığını buldu ve WMT'14 İngilizceden Fransızcaya test kümesinde 34,8 BLEU puanına ulaştı. Her cümleyi tek vektöre sıkıştırmak uzun girdilerde sorun yarattığından Bahdanau, Cho ve Bengio, Neural Machine Translation by Jointly Learning to Align and Translate makalesinde dikkat mekanizması ekleyerek kod çözücünün her adımda tüm kodlayıcı durumlarına bakmasını sağladı. Transformer bu kodlayıcı-kod çözücü düzenini korudu, yinelemeyi öz dikkatle değiştirdi ve iki yarıyı çapraz dikkatle bağladı. Çıkarım sırasında kod çözücü bir döngüde çalışır:
Döngü, kod çözücü bir bitiş belirteci ürettiğinde durduğu için çıktı uzunluğu her örnek için öğrenilir. Kod çözme sırasında genellikle ışın aramasıyla birkaç aday çıktı tutulur; bu, çeviri ve konuşma tanımada standart tercihtir.
Öğretmen Zorlamasıyla Eğitim#
Eğitim sırasında kod çözücünün döngüye girmesi gerekmez. Öğretmen zorlamasında doğru hedef dizisi bir konum sağa kaydırılarak kod çözücüye verilir ve nedensel maske sayesinde her konum yalnızca önceki hedefleri görebilir; böylece model sonraki her belirteci tek bir paralel geçişte tahmin eder. Kayıp, tahminlerle gerçek sonraki belirteçler arasındaki çapraz entropidir. PyTorch içindeki nn.Transformer, özgün kodlayıcı-kod çözücü mimarisini uygular:
import torch
from torch import nn
torch.manual_seed(0)
src_vocab, tgt_vocab, d_model = 1000, 800, 64
embed_src, embed_tgt = nn.Embedding(src_vocab, d_model), nn.Embedding(tgt_vocab, d_model)
model = nn.Transformer(d_model, nhead=4, num_encoder_layers=2, num_decoder_layers=2, batch_first=True)
to_logits = nn.Linear(d_model, tgt_vocab)
source = torch.randint(0, src_vocab, (1, 9)) # a 9-token source sentence
target = torch.randint(0, tgt_vocab, (1, 7)) # start token + a 6-token translation
# Teacher forcing: the decoder reads the correct previous tokens and predicts every next token in parallel
decoder_input, labels = target[:, :-1], target[:, 1:]
causal_mask = nn.Transformer.generate_square_subsequent_mask(decoder_input.size(1))
logits = to_logits(model(embed_src(source), embed_tgt(decoder_input), tgt_mask=causal_mask))
loss = nn.functional.cross_entropy(logits.flatten(0, 1), labels.flatten())
print(f"Source tokens: {source.shape[1]} -> decoder logits: {tuple(logits.shape)}")
print(f"Training loss: {loss.item():.2f}")Tek geçişte 9 belirteçli bir kaynaktan hesaplanan 6 hedef konumunun her biri için 800 belirteçli hedef söz dağarcığı üzerinde birer tahmin olan Source tokens: 9 -> decoder logits: (1, 6, 800) değerini yazdırır. Eğitilmemiş modelin 6.73 kaybı, eşit olasılıklı tahminin kaybı olan ln(800) ≈ 6.68 değerine yakındır. Eğitim sırasında her zaman doğru önceki belirteçler, çıkarım sırasında ise modelin kendi tahminleri verildiğinden çıkarım sırasında hatalar birikerek büyüyebilir; bu etkiye maruz kalma yanlılığı denir.
Seq2Seq ve İlgili Mimariler#
- BERT gibi yalnızca kodlayıcı kullanan modeller: Bu modeller girdiyi iki yönde de okur ve her belirteç için bir gösterim üretir; bu özellikleri sınıflandırma ve etiketleme için uygundur.
- Yalnızca kod çözücü kullanan büyük dil modelleri (LLM'ler): GPT gibi modeller girdiyle çıktıyı tek bir dizide birleştirir ve istemi sürdürerek seq2seq görevlerini yerine getirir; günümüzde metin üretiminin çoğu bu şekilde çalışır.
- Yinelemeli sinir ağları (RNN'ler) ve GRU'lar: Özgün 2014 kodlayıcı ve kod çözücülerdeki yinelemeli katmanlardır. Cho ve diğerleri, kapılı yinelemeli birimi kodlayıcı-kod çözücüleriyle aynı makalede tanıttı.
Uygulamalar#
Google, 2016'da Google Translate'i dikkat mekanizmalı, 8 katmanlı bir LSTM kodlayıcı ve kod çözücüden oluşan GNMT sistemine taşıdı; çeviri de seq2seq'in tanımlayıcı görevi olmayı sürdürüyor. Google'ın T5 modeli, metin özetleme ve soru yanıtlamayı da içeren her doğal dil işleme (NLP) görevini metinden metne biçiminde ele aldı. OpenAI'nin Whisper modeli, 680.000 saatlik ses üzerinde eğitilmiş ve konuşma tanıma için kullanılan bir kodlayıcı-kod çözücü Transformer'dır. Görüntü modelleri aynı düzeni görüntü altyazısı oluşturma ve optik karakter tanıma (OCR) için kullanır. Microsoft'un Florence-2 modeli ise altyazı oluşturma, temellendirme ve algılama işlemlerini tek bir seq2seq modelinin metin çıktıları olarak gerçekleştirir. Google'ın Pix2Seq modeli, her nesneyi dört nicemlenmiş koordinat ve bir sınıftan oluşan beş ayrık belirteçle ifade ederek nesne algılamayı seq2seq olarak ele alır. Ultralytics paketinde çalışan Baidu'nun gerçek zamanlı algılayıcısı RT-DETR, kodlayıcıyı ve çapraz dikkat kullanan kod çözücüyü korur; ancak kod çözücüsüne 300 nesne sorgusunu paralel olarak iyileştirterek tüm kutuları tek geçişte üretir.










