Sequence to Sequence (seq2seq): differenze tra le versioni

Da Wiki AI.
(Creata pagina con "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 e...")
 
Nessun oggetto della modifica
Riga 8: Riga 8:
=== Esempio di utilizzo nel task di traduzione automatica ===
=== Esempio di utilizzo nel task di traduzione automatica ===
La pubblicazione [https://arxiv.org/abs/1406.1078 Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation] del 2014 dimostra il concetto perfettamente. Si può seguire il codice nell'implementazione a [https://github.com/graykode/nlp-tutorial/blob/d05e31ec81d56d70c1db89b99ab07e948f7ebc11/4-1.Seq2Seq/Seq2Seq.py#L56 questo URL].
La pubblicazione [https://arxiv.org/abs/1406.1078 Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation] del 2014 dimostra il concetto perfettamente. Si può seguire il codice nell'implementazione a [https://github.com/graykode/nlp-tutorial/blob/d05e31ec81d56d70c1db89b99ab07e948f7ebc11/4-1.Seq2Seq/Seq2Seq.py#L56 questo URL].
<source lang="python">
# Definizione del modello Seq2Seq ereditando da nn.Module di PyTorch
class Seq2Seq(nn.Module):
    def __init__(self):
        super(Seq2Seq, self).__init__()
        # Definizione della cella dell'encoder RNN con dropout per ridurre l'overfitting
        self.enc_cell = nn.RNN(input_size=n_class, hidden_size=n_hidden, dropout=0.5)
        # Definizione della cella del decoder RNN, simile all'encoder
        self.dec_cell = nn.RNN(input_size=n_class, hidden_size=n_hidden, dropout=0.5)
        # Un layer lineare che mappa l'output del decoder alla dimensione della classe di output
        self.fc = nn.Linear(n_hidden, n_class)
    # Funzione che definisce il flusso di dati attraverso il modello
    def forward(self, enc_input, enc_hidden, dec_input):
        # Trasposizione degli input per adattarli alla dimensione attesa da PyTorch RNN
        enc_input = enc_input.transpose(0, 1) # [lunghezza massima, dimensione batch, numero di classi]
        dec_input = dec_input.transpose(0, 1) # [lunghezza massima, dimensione batch, numero di classi]
        # Esecuzione dell'encoder con l'input e lo stato nascosto iniziale, ottenendo lo stato nascosto finale
        _, enc_states = self.enc_cell(enc_input, enc_hidden)
        # Esecuzione del decoder con l'input e lo stato nascosto dell'encoder come stato iniziale
        outputs, _ = self.dec_cell(dec_input, enc_states)
        # Applicazione del layer lineare per ottenere le previsioni finali
        model = self.fc(outputs)
        return model
</source>

Versione delle 21:36, 25 mar 2024

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 a questo URL.


# Definizione del modello Seq2Seq ereditando da nn.Module di PyTorch
class Seq2Seq(nn.Module):
    def __init__(self):
        super(Seq2Seq, self).__init__()

        # Definizione della cella dell'encoder RNN con dropout per ridurre l'overfitting
        self.enc_cell = nn.RNN(input_size=n_class, hidden_size=n_hidden, dropout=0.5)
        # Definizione della cella del decoder RNN, simile all'encoder
        self.dec_cell = nn.RNN(input_size=n_class, hidden_size=n_hidden, dropout=0.5)
        # Un layer lineare che mappa l'output del decoder alla dimensione della classe di output
        self.fc = nn.Linear(n_hidden, n_class)

    # Funzione che definisce il flusso di dati attraverso il modello
    def forward(self, enc_input, enc_hidden, dec_input):
        # Trasposizione degli input per adattarli alla dimensione attesa da PyTorch RNN
        enc_input = enc_input.transpose(0, 1) # [lunghezza massima, dimensione batch, numero di classi]
        dec_input = dec_input.transpose(0, 1) # [lunghezza massima, dimensione batch, numero di classi]

        # Esecuzione dell'encoder con l'input e lo stato nascosto iniziale, ottenendo lo stato nascosto finale
        _, enc_states = self.enc_cell(enc_input, enc_hidden)
        # Esecuzione del decoder con l'input e lo stato nascosto dell'encoder come stato iniziale
        outputs, _ = self.dec_cell(dec_input, enc_states)

        # Applicazione del layer lineare per ottenere le previsioni finali
        model = self.fc(outputs) 
        return model