Neurale machinale vertaling

Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

David Cecchini

Data Scientist

Encoders en decoders

Architectuur voor neurale machinale vertaling. Deze architectuur is verdeeld in een encoder en decoder voor respectievelijk de invoer- en uitvoertaal. De encoder leert een taalmodel voor de invoertaal en de decoder voor de uitvoertaal. De eindtoestand van de encoder gaat naar de decoder, die verder geen invoer heeft.

Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Encoder-voorbeeld

# Instantieer het model
model = Sequential()

# Embedding-laag voor de invoertaal model.add(Embedding(input_language_size, input_wordvec_dim, input_length=input_language_len, mask_zero=True))
# Voeg LSTM-laag toe model.add(LSTM(128))
# Herhaal de laatste vector model.add(RepeatVector(output_language_len))
Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Decoder-voorbeeld

# Direct na de encoder
model.add(LSTM(128, return_sequences=True))

# Voeg TimeDistributed toe model.add(TimeDistributed(Dense(eng_vocab_size, activation='softmax')))
Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Datavoorbereiding

Voorbereiding voor encoder en decoder. Voor de encoder zet je de invoertaal om naar een reeks numerieke indexen; voor de decoder doe je hetzelfde voor de uitvoertaal en one-hot-encode je elke index

Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Datavoorbereiding voor de invoertaal

# Modules importeren
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# Use the Tokenizer class
tokenizer = Tokenizer()
tokenizer.fit_on_texts(input_texts_list)

# Tekst naar reeks numerieke indexen X = tokenizer.texts_to_sequences(input_texts_list)
# Reeksen opvullen X = pad_sequences(X, maxlen=length, padding='post')
Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Tokenize de doeltaal

# Use the Tokenizer class
tokenizer = Tokenizer()
tokenizer.fit_on_texts(output_texts_list)

# Tekst naar reeks numerieke indexen Y = tokenizer.texts_to_sequences(output_texts_list)
# Reeksen opvullen Y = pad_sequences(Y, maxlen=length, padding='post')
Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

One-hot-encoderen van de doeltaal

# Maak een tijdelijke variabele
ylist = list()

# Loop over de reeks numerieke indexen for sequence in Y:
# One-hot-encoderen per index in de zin encoded = to_categorical(sequence, num_classes=vocab_size)
# One-hot-resultaat toevoegen aan de lijst ylist.append(encoded)
# Naar np.array omzetten en reshapen Y = np.array(ylist).reshape(Y.shape[0], Y.shape[1], vocab_size)
Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Opmerking over trainen en evalueren

Het model trainen:

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

Evalueren:

  • Gebruik BLEU
    • nltk.translate.bleu_score
Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Laten we oefenen!

Recurrent Neural Networks (RNN's) voor taalmodellen met Keras

Preparing Video For Download...