Нейронний машинний переклад

Recurrent Neural Networks (RNNs) для моделювання мови з Keras

David Cecchini

Data Scientist

Encoder і decoder

Архітектура нейронного машинного перекладу. Архітектура поділена на частини encoder і decoder для вхідної та вихідної мов відповідно. Частина encoder навчає мовну модель для вхідної мови, а частина decoder — для вихідної. Кінцевий стан encoder передається до decoder, який не має інших вхідних даних.

Recurrent Neural Networks (RNNs) для моделювання мови з Keras

Приклад encoder'а

# Створіть модель
model = Sequential()

# Шар Embedding для вхідної мови model.add(Embedding(input_language_size, input_wordvec_dim, input_length=input_language_len, mask_zero=True))
# Додайте шар LSTM model.add(LSTM(128))
# Повторіть останній вектор model.add(RepeatVector(output_language_len))
Recurrent Neural Networks (RNNs) для моделювання мови з Keras

Приклад decoder'а

# Одразу після encoder'а
model.add(LSTM(128, return_sequences=True))

# Додайте TimeDistributed model.add(TimeDistributed(Dense(eng_vocab_size, activation='softmax')))
Recurrent Neural Networks (RNNs) для моделювання мови з Keras

Підготовка даних

Підготовка тексту для encoder і decoder. Для encoder потрібно перетворити вхідну мову на послідовність числових індексів, а для decoder зробити те саме для вихідної мови та додатково one-hot закодувати кожен індекс

Recurrent Neural Networks (RNNs) для моделювання мови з Keras

Підготовка даних для вхідної мови

# Імпортуйте модулі
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# Використайте клас Tokenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts(input_texts_list)

# Текст у послідовність числових індексів X = tokenizer.texts_to_sequences(input_texts_list)
# Доповніть послідовності (pad) X = pad_sequences(X, maxlen=length, padding='post')
Recurrent Neural Networks (RNNs) для моделювання мови з Keras

Токенізуйте вихідну мову

# Використайте клас Tokenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts(output_texts_list)

# Текст у послідовність числових індексів Y = tokenizer.texts_to_sequences(output_texts_list)
# Доповніть послідовності (pad) Y = pad_sequences(Y, maxlen=length, padding='post')
Recurrent Neural Networks (RNNs) для моделювання мови з Keras

One-hot кодування вихідної мови

# Створіть тимчасову змінну
ylist = list()

# Пройдіться циклом по послідовностях індексів for sequence in Y:
# One-hot кодуйте кожен індекс у поточному реченні encoded = to_categorical(sequence, num_classes=vocab_size)
# Додайте one-hot кодування до списку ylist.append(encoded)
# Перетворіть на np.array і змініть форму Y = np.array(ylist).reshape(Y.shape[0], Y.shape[1], vocab_size)
Recurrent Neural Networks (RNNs) для моделювання мови з Keras

Примітка щодо навчання та оцінювання

Навчання моделі:

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

Оцінювання:

  • Використайте BLEU
    • nltk.translate.bleu_score
Recurrent Neural Networks (RNNs) для моделювання мови з Keras

Давайте потренуємось!

Recurrent Neural Networks (RNNs) для моделювання мови з Keras

Preparing Video For Download...