Traduzione Automatica Neurale

Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

David Cecchini

Data Scientist

Encoder e decoder

Architettura di Neural Machine Translation. Divisa in encoder e decoder per lingua di input e output. L’encoder apprende un modello linguistico per l’input, il decoder per l’output. Lo stato finale dell’encoder passa al decoder, che non ha altri input.

Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Esempio di encoder

# Istanzia il modello
model = Sequential()

# Livello Embedding per la lingua di input model.add(Embedding(input_language_size, input_wordvec_dim, input_length=input_language_len, mask_zero=True))
# Aggiungi livello LSTM model.add(LSTM(128))
# Ripeti l’ultimo vettore model.add(RepeatVector(output_language_len))
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Esempio di decoder

# Subito dopo l’encoder
model.add(LSTM(128, return_sequences=True))

# Aggiungi TimeDistributed model.add(TimeDistributed(Dense(eng_vocab_size, activation='softmax')))
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Preparazione dati

Preparazione testo per encoder e decoder. Nell’encoder trasformiamo la lingua di input in una sequenza di indici numerici; nel decoder facciamo lo stesso per la lingua di output e applichiamo anche il one-hot encoding di ogni indice

Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Preparazione dati per la lingua di input

# Importa i moduli
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# Usa la classe Tokenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts(input_texts_list)

# Testo in sequenze di indici numerici X = tokenizer.texts_to_sequences(input_texts_list)
# Padding delle sequenze X = pad_sequences(X, maxlen=length, padding='post')
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Tokenizzare la lingua di output

# Usa la classe Tokenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts(output_texts_list)

# Testo in sequenze di indici numerici Y = tokenizer.texts_to_sequences(output_texts_list)
# Padding delle sequenze Y = pad_sequences(Y, maxlen=length, padding='post')
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

One-hot encoding della lingua di output

# Istanzia una variabile temporanea
ylist = list()

# Itera sulla sequenza di indici numerici for sequence in Y:
# One-hot encode di ogni indice nella frase corrente encoded = to_categorical(sequence, num_classes=vocab_size)
# Aggiungi i one-hot alla lista ylist.append(encoded)
# Trasforma in np.array e fai reshape Y = np.array(ylist).reshape(Y.shape[0], Y.shape[1], vocab_size)
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Nota su training e valutazione

Addestrare il modello:

model.fit(X, Y, epochs=N)

Valutazione:

  • Usa BLEU
    • nltk.translate.bleu_score
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Passiamo alla pratica !

Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Preparing Video For Download...