Definire il decoder del modello di inferenza
Il modello di inferenza è il modello che verrà usato “sul campo” per eseguire le traduzioni quando richiesto dall’utente. In questo esercizio, dovrai implementare il decoder del modello di inferenza.
Il decoder del modello di inferenza è diverso dal decoder del modello di training. Non possiamo alimentare il decoder con parole francesi perché sono proprio ciò che vogliamo prevedere. Per fortuna c’è una soluzione: possiamo usare la parola francese prevista al passo temporale precedente per alimentare il decoder del modello di inferenza. Quindi, quando vuoi generare una traduzione, il decoder deve generare una parola alla volta, usando come input l’output precedente.
Per questo esercizio, le variabili hsize (dimensione nascosta del livello GRU), fr_len e fr_vocab sono già state importate. Ricorda che il prefisso de è usato per riferirsi al decoder.
Questo esercizio fa parte del corso
Traduzione automatica con Keras
Istruzioni dell'esercizio
- Definisci un livello
Inputche accetti un batch di sequenze di parole francesi one-hot encoded (lunghezza della sequenza 1). - Definisci un altro livello
Inputche accetti un batch di stato di dimensionehsize, che userai per passare al decoder lo stato precedente. - Ottieni l’output e lo stato della
GRUdel decoder. - Definisci un modello che accetti l’
Inputdelle parole francesi e l’Inputdello stato precedente e che produca come output la previsione finale e il nuovo stato dellaGRU.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
import tensorflow.keras.layers as layers
from tensorflow.keras.models import Model
# Define an input layer that accepts a single onehot encoded word
de_inputs = layers.____(shape=(____, ____))
# Define an input to accept the t-1 state
de_state_in = layers.____(shape=(____,))
de_gru = layers.GRU(hsize, return_state=True)
# Get the output and state from the GRU layer
de_out, de_state_out = ____(de_inputs, initial_state=____)
de_dense = layers.Dense(fr_vocab, activation='softmax')
de_pred = de_dense(de_out)
# Define a model
decoder = Model(inputs=[____, ____], outputs=[____, ____])
print(decoder.summary())