Neural Machine Translation

Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

David Cecchini

Data Scientist

Encoder และ Decoder

สถาปัตยกรรม Neural Machine Translation แบ่งออกเป็นส่วน encoder และ decoder สำหรับภาษาต้นทางและภาษาปลายทาง ส่วน encoder เรียนรู้โมเดลภาษาของภาษาต้นทาง และส่วน decoder เรียนรู้โมเดลภาษาของภาษาปลายทาง โดย state สุดท้ายของ encoder จะถูกส่งต่อไปยัง decoder ซึ่งไม่มีข้อมูลอื่นป้อนเข้า

Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

ตัวอย่าง 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 (RNNs) สำหรับ Language Modeling ด้วย Keras

ตัวอย่าง 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 (RNNs) สำหรับ Language Modeling ด้วย Keras

การเตรียมข้อมูล

การเตรียมข้อความสำหรับ encoder และ decoder ใน encoder จะแปลงภาษาต้นทางเป็นลำดับของดัชนีตัวเลข และใน decoder จะทำเช่นเดียวกันสำหรับภาษาปลายทาง พร้อมทั้ง one-hot encode ดัชนีแต่ละตัวด้วย

Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

การเตรียมข้อมูลสำหรับภาษาต้นทาง

# 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 (RNNs) สำหรับ Language Modeling ด้วย Keras

Tokenize ภาษาปลายทาง

# 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 (RNNs) สำหรับ Language Modeling ด้วย Keras

One-hot encode ภาษาปลายทาง

# 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 (RNNs) สำหรับ Language Modeling ด้วย Keras

หมายเหตุเกี่ยวกับการเทรนและประเมินผล

การเทรนโมเดล:

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

การประเมินผล:

  • ใช้ BLEU
    • nltk.translate.bleu_score
Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

มาฝึกกันเถอะ!

Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

Preparing Video For Download...