Neural Machine Translation

Återkommande neurala nätverk (RNN) för språkmodellering med Keras

David Cecchini

Data Scientist

Kodare och avkodare

Arkitektur för neural maskinöversättning. Arkitekturen är uppdelad i en kodare och en avkodare för käll- respektive målspråket. Kodaren lär sig en språkmodell för källspråket och avkodaren lär sig en språkmodell för målspråket. Kodarens slutliga tillstånd skickas till avkodaren, som inte har någon annan indata.

Återkommande neurala nätverk (RNN) för språkmodellering med Keras

Exempel på kodare

# Instantiate the model
model = Sequential()

# Embeding layer for input language model.add(Embedding(input_language_size, input_wordvec_dim, input_length=input_language_len, mask_zero=True))
# Add LSTM layer model.add(LSTM(128))
# Repeat the last vector model.add(RepeatVector(output_language_len))
Återkommande neurala nätverk (RNN) för språkmodellering med Keras

Exempel på avkodare

# Right after the encoder
model.add(LSTM(128, return_sequences=True))

# Add Time Distributed model.add(TimeDistributed(Dense(eng_vocab_size, activation='softmax')))
Återkommande neurala nätverk (RNN) för språkmodellering med Keras

Dataförberedelse

Dataförberedelse för kodare och avkodare. I kodaren omvandlas källspråket till en sekvens av numeriska index. I avkodaren görs samma sak för målspråket, varefter varje index one-hot-kodas.

Återkommande neurala nätverk (RNN) för språkmodellering med Keras

Dataförberedelse för källspråket

# Import modules
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)

# Text to sequence of numerical indexes X = tokenizer.texts_to_sequences(input_texts_list)
# Pad sequences X = pad_sequences(X, maxlen=length, padding='post')
Återkommande neurala nätverk (RNN) för språkmodellering med Keras

Tokenisera målspråket

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

# Text to sequence of numerical indexes Y = tokenizer.texts_to_sequences(output_texts_list)
# Pad sequences Y = pad_sequences(Y, maxlen=length, padding='post')
Återkommande neurala nätverk (RNN) för språkmodellering med Keras

One-hot-koda målspråket

# Instantiate a temporary variable
ylist = list()

# Loop over the sequence of numerical indexes for sequence in Y:
# One=hot encode each index on current sentence encoded = to_categorical(sequence, num_classes=vocab_size)
# Append one-hot encoded values to the list ylist.append(encoded)
# Transform to np.array and reshape Y = np.array(ylist).reshape(Y.shape[0], Y.shape[1], vocab_size)
Återkommande neurala nätverk (RNN) för språkmodellering med Keras

Om träning och utvärdering

Träna modellen:

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

Utvärdering:

  • Använd BLEU
    • nltk.translate.bleu_score
Återkommande neurala nätverk (RNN) för språkmodellering med Keras

Nu kör vi en övning!

Återkommande neurala nätverk (RNN) för språkmodellering med Keras

Preparing Video For Download...