Traducere automată neurală

Rețele Neuronale Recurente (RNN) pentru Modelare a Limbajului cu Keras

David Cecchini

Data Scientist

Encoder și decoder

Arhitectura traducerii automate neurale. Aceasta este împărțită în encoder și decoder pentru limba de intrare, respectiv de ieșire. Encoderele învață un model de limbă pentru intrare, iar decodoarele pentru ieșire. Starea finală a encoderului este transmisă decoderului, care nu primește altă intrare.

Rețele Neuronale Recurente (RNN) pentru Modelare a Limbajului cu Keras

Exemplu de encoder

# 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))
Rețele Neuronale Recurente (RNN) pentru Modelare a Limbajului cu Keras

Exemplu de decoder

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

# Add Time Distributed model.add(TimeDistributed(Dense(eng_vocab_size, activation='softmax')))
Rețele Neuronale Recurente (RNN) pentru Modelare a Limbajului cu Keras

Pregătirea datelor

Pregătirea datelor pentru encoder și decoder. În encoder, limba de intrare este transformată într-o secvență de indecși numerici; în decoder se face același lucru pentru limba de ieșire, urmată de codificare one-hot.

Rețele Neuronale Recurente (RNN) pentru Modelare a Limbajului cu Keras

Pregătirea datelor pentru limba de intrare

# 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')
Rețele Neuronale Recurente (RNN) pentru Modelare a Limbajului cu Keras

Tokenizarea limbii de ieșire

# 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')
Rețele Neuronale Recurente (RNN) pentru Modelare a Limbajului cu Keras

Codificare one-hot a limbii de ieșire

# 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)
Rețele Neuronale Recurente (RNN) pentru Modelare a Limbajului cu Keras

Antrenare și evaluare

Antrenarea modelului:

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

Evaluare:

  • Utilizați BLEU
    • nltk.translate.bleu_score
Rețele Neuronale Recurente (RNN) pentru Modelare a Limbajului cu Keras

Să exersăm!

Rețele Neuronale Recurente (RNN) pentru Modelare a Limbajului cu Keras

Preparing Video For Download...