Neural Machine Translation

Recurrent Neural Networks (RNN) untuk Pemodelan Bahasa dengan Keras

David Cecchini

Data Scientist

Encoder dan decoder

Arsitektur Neural Machine Translation. Arsitektur ini terbagi menjadi encoder untuk bahasa masukan dan decoder untuk bahasa keluaran. Bagian encoder mempelajari model bahasa untuk bahasa masukan dan decoder mempelajari model bahasa untuk bahasa keluaran. Keadaan akhir encoder diteruskan ke decoder, yang tidak memiliki masukan lain.

Recurrent Neural Networks (RNN) untuk Pemodelan Bahasa dengan Keras

Contoh 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))
Recurrent Neural Networks (RNN) untuk Pemodelan Bahasa dengan Keras

Contoh decoder

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

# Add Time Distributed model.add(TimeDistributed(Dense(eng_vocab_size, activation='softmax')))
Recurrent Neural Networks (RNN) untuk Pemodelan Bahasa dengan Keras

Persiapan data

Persiapan teks untuk encoder dan decoder. Pada encoder, kita perlu mengubah bahasa masukan menjadi deret indeks numerik, dan pada decoder kita melakukan hal yang sama untuk bahasa keluaran serta melakukan one-hot encoding pada tiap indeks

Recurrent Neural Networks (RNN) untuk Pemodelan Bahasa dengan Keras

Persiapan data untuk bahasa masukan

# 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')
Recurrent Neural Networks (RNN) untuk Pemodelan Bahasa dengan Keras

Tokenisasi bahasa keluaran

# 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')
Recurrent Neural Networks (RNN) untuk Pemodelan Bahasa dengan Keras

One-hot encoding untuk bahasa keluaran

# 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)
Recurrent Neural Networks (RNN) untuk Pemodelan Bahasa dengan Keras

Catatan pelatihan dan evaluasi

Melatih model:

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

Evaluasi:

  • Gunakan BLEU
    • nltk.translate.bleu_score
Recurrent Neural Networks (RNN) untuk Pemodelan Bahasa dengan Keras

Ayo berlatih!

Recurrent Neural Networks (RNN) untuk Pemodelan Bahasa dengan Keras

Preparing Video For Download...