Padding delle frasi
Ora implementerai una funzione chiamata sents2seqs() che userai più avanti per trasformare comodamente i dati nel formato accettato dal modello di neural machine translation (NMT). sents2seqs() accetta una lista di stringhe di frasi e,
- Converte le frasi in una lista di sequenze di ID,
- Applica il padding alle frasi in modo che abbiano la stessa lunghezza e,
- Opzionalmente converte gli ID in vettori one-hot.
Ti è stato fornito en_tok, un Tokenizer già addestrato sui dati. Un'altra cosa da notare è che, durante l'implementazione della funzione sents2seqs(), vedrai un argomento inutilizzato chiamato input_type. Più avanti, questo input_type verrà usato per modificare parametri dipendenti dalla lingua come la lunghezza della sequenza e la dimensione del vocabolario.
Questo esercizio fa parte del corso
Traduzione automatica con Keras
Istruzioni dell'esercizio
- Converte
sentencesin sequenze usando il Tokenizeren_tok. - Applica il padding alle sequenze fino a una lunghezza fissa
en_lencon il tipo di padding specificato inpad_typee usa il troncamentopost. - Converte gli ID delle parole di
preproc_textin vettori one-hot di lunghezzaen_vocabusando la funzioneto_categorical(). - Converte
sentencein una sequenza con padding usando il metodosents2seqs()con paddingpre.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.utils import to_categorical
def sents2seqs(input_type, sentences, onehot=False, pad_type='post'):
# Convert sentences to sequences
encoded_text = ____.____(sentences)
# Pad sentences to en_len
preproc_text = ____(____, padding=____, truncating=____, maxlen=____)
if onehot:
# Convert the word IDs to onehot vectors
preproc_text = ____(____, num_classes=____)
return preproc_text
sentence = 'she likes grapefruit , peaches , and lemons .'
# Convert a sentence to sequence by pre-padding the sentence
pad_seq = sents2seqs('source', [____], pad_type=____)