Invertire le frasi
Qui imparerai a invertire le frasi per il modello di encoder. Come discusso, invertire le frasi di origine aiuta a creare un forte collegamento iniziale tra encoder e decoder, migliorando le prestazioni del modello. Tuttavia, ricorda sempre che il beneficio dipende dalle due lingue tra cui stai traducendo. Finché hanno lo stesso ordine di soggetto, verbo e oggetto, questo accorgimento favorirà il modello.
In questo esercizio modificherai la funzione sents2seqs() per poter invertire le frasi quando serve. L’utente può specificare un argomento keyword booleano reverse che esegue l’inversione del testo.
Questo esercizio fa parte del corso
Traduzione automatica con Keras
Istruzioni dell'esercizio
- Scrivi la firma della funzione
sents2seqs()aggiungendo un nuovo argomento keywordreverseimpostato di default aFalse. - Inverti gli ID della sequenza restituita sulla dimensione temporale (usando la sintassi
::-1), in modo che l’ID della prima parola diventi l’ultimo. - Chiama
sents2seqs()per invertire lesentencesfornite e lascia invariati tutti gli altri valori predefiniti dei parametri.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
sentences = ["california is never rainy during july ."]
# Add new keyword parameter reverse which defaults to False
def ____(input_type, sentences, onehot=False, pad_type='post', ____=____):
encoded_text = en_tok.texts_to_sequences(sentences)
preproc_text = pad_sequences(encoded_text, padding=pad_type, truncating='post', maxlen=en_len)
if reverse:
# Reverse the text using numpy axis reversing
preproc_text = preproc_text[:, ____]
if onehot:
preproc_text = to_categorical(preproc_text, num_classes=en_vocab)
return preproc_text
# Call sents2seqs to get the padded and reversed sequence of IDs
pad_seq = ____('source', ____, ____=____)
rev_sent = [en_tok.index_word[wid] for wid in pad_seq[0][-6:]]
print('\tReversed: ',' '.join(rev_sent))