神經機器翻譯

使用 Keras 建立語言模型的循環神經網路(RNN)

David Cecchini

Data Scientist

編碼器與解碼器

神經機器翻譯架構。此架構分為編碼器與解碼器,分別對應輸入與輸出語言。編碼器學習輸入語言的語言模型,解碼器學習輸出語言的語言模型。編碼器的最終狀態會傳給沒有其他輸入的解碼器。

使用 Keras 建立語言模型的循環神經網路(RNN)

編碼器範例

# 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))
使用 Keras 建立語言模型的循環神經網路(RNN)

解碼器範例

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

# Add Time Distributed model.add(TimeDistributed(Dense(eng_vocab_size, activation='softmax')))
使用 Keras 建立語言模型的循環神經網路(RNN)

資料前處理

編碼器與解碼器的文字前處理。編碼器需將輸入語言轉為數值索引序列;解碼器對輸出語言做同樣處理,並對每個索引做 one-hot 編碼。

使用 Keras 建立語言模型的循環神經網路(RNN)

輸入語言的資料前處理

# 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')
使用 Keras 建立語言模型的循環神經網路(RNN)

為輸出語言做斷詞與索引

# 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')
使用 Keras 建立語言模型的循環神經網路(RNN)

將輸出語言做 one-hot 編碼

# 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)
使用 Keras 建立語言模型的循環神經網路(RNN)

關於訓練與評估的補充

訓練模型:

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

評估:

  • 使用 BLEU
    • nltk.translate.bleu_score
使用 Keras 建立語言模型的循環神經網路(RNN)

一起來練習吧!

使用 Keras 建立語言模型的循環神經網路(RNN)

Preparing Video For Download...