Sequence to Sequence (seq2seq)
Sequence to Sequence (seq2seq) | |
---|---|
Nome Inglese | Sequence to Sequence Model |
Sigla | seq2seq |
Anno Di Creazione | 2014 |
Pubblicazione | Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation |
URL | https://arxiv.org/abs/1406.1078 |
Topic | Sequenze, Reti neurali, traduzione, Generazione |
Classe di approcci e metodi utilizzati nel campo del deep learning, soprattutto nei task di traduzione automatica ma anche, per esempio, per la creazione di didascalie di immagini. Essi fondano le basi concettuali per le architetture transformer.
Sono basati su un modello encoder-decoder in cui:
- l'encoder processa la sequenza di input creando una rappresentazione semantica dell'input, che catturi le informazioni essenziali
- il decoder utilizza gli stati nascosti dell'encoder, in cui viene rappresentazione l'informazione per creare una sequenza di output
Esempio di utilizzo nel task di traduzione automatica
La pubblicazione Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation del 2014 dimostra il concetto perfettamente. Si può seguire il codice nell'implementazione in Pytorch a questo URL (che contiene un errore però nel padding delle sequenze di output) o a questo URL, più complesso ma aderente alla pubblicazione: usa anche la tecnica di teacher forcing e fa una valutazione BLEU alla fine.
Concettualmente, il modello Seq2Seq viene rappresentato come due RNN. Durante il forward pass:
- la prima RNN, l'encoder, prende l'input, con token di padding a lunghezza predefinita, e lo processa, finendo con l'avere uno stato nascosto
- questo stato nascosto dell'encoder viene passato come stato nascosto della RNN decoder (contesto), e la RNN viene eseguita per tanti step quanti i token nella sequenza attesa. A ogni step, viene passato il contesto concatenato all'input corrente e il layer nascosto corrente del decoder.
- Un layer lineare connette poi lo stato nascosto del decoder all'output, spesso con rappresentazione one-hot
Durante la fase di addestramento, la perdita viene calcolata confrontando l'output con il target, codificato con un token di fine sequenza. La backpropagation in questo caso cercherà di far sì che le sequenze di output assomiglino a quelle di input il più possibile.
Durante la fase di inferenza, il token di inizio frase (anche detto sequenza di priming) fa sì che la rete cominci a elaborare e emettere i token.
Rappresentazione Grafica
Qui sotto si veda la rappresentazione dell'elaborazione in "Learning Phrase Representations using RNN Encoder–Decoder
for Statistical Machine Translation"
Links
https://arxiv.org/abs/1406.1078
https://github.com/bentrevett/pytorch-seq2seq