Нейронный машинный перевод

Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

David Cecchini

Data Scientist

Кодировщик и декодировщики

Архитектура нейронного машинного перевода. Архитектура разделена на части кодировщика и декодировщика для входного и выходного языков соответственно. Кодировщик обучает языковую модель для входного языка, декодировщик — для выходного. Финальное состояние кодировщика передаётся декодировщику, у которого нет других входных данных.

Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Пример кодировщика

# 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))
Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Пример декодировщика

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

# Add Time Distributed model.add(TimeDistributed(Dense(eng_vocab_size, activation='softmax')))
Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Подготовка данных

Подготовка текста для кодировщика и декодировщика. В кодировщике входной язык преобразуется в последовательность числовых индексов; в декодировщике то же самое выполняется для выходного языка, а затем каждый индекс кодируется методом one-hot.

Рекуррентные нейронные сети (RNN) для языкового моделирования с 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')
Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Токенизация выходного языка

# 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')
Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

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)
Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Обучение и оценка модели

Обучение модели:

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

Оценка качества:

  • Используйте BLEU
    • nltk.translate.bleu_score
Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Давайте потренируемся!

Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Preparing Video For Download...