Генерація перекладів моделлю

Machine Translation з Keras

Thushan Ganegedara

Data Scientist and Author

Попередня модель vs нова модель

Encoder decoder repeat vector

Encoder decoder which input

Machine Translation з Keras

Натренована модель

Teacher Forcing trained model

Machine Translation з Keras

Декодер інференс-моделі

  • Приймає

    • onehot-кодоване слово
    • Вхід стану (отримує стан з попереднього кроку)
  • Повертає

    • Новий стан
    • Прогноз (тобто слово)
  • Рекурсивно подавайте передбачене слово та стан назад у модель як входи

Machine Translation з Keras

Повна інференс-модель

  • Інференс-модель із рекурсивним декодером

Encoder recursive decoder

  • Інференс-модель з попереднього розділу Encoder decoder previous
Machine Translation з Keras

Значення токенів sos та eos

  • sos позначає початок перекладу (тобто французького речення).

    • Подайте sos як перше слово до декодера і далі робіть передбачення
  • eos позначає кінець перекладу.

    • Передбачення зупиняються, коли модель передбачає слово eos
  • Для безпеки задайте максимальну довжину, яку може передбачити модель

Machine Translation з Keras

Визначення генератора-енкодера

  • Імпорт шарів і Model

    # Import Keras layers
    import tensorflow.keras.layers as layers
    from tensorflow.keras.models import Model
    
  • Визначення шарів моделі

    en_inputs = layers.Input(shape=(en_len,en_vocab))
    en_gru = layers.GRU(hsize, return_state=True)
    en_out, en_state = en_gru(en_inputs)
    
  • Створення обʼєкта Model

    encoder = Model(inputs=en_inputs, outputs=en_state)
    
Machine Translation з Keras

Визначення генератора-декодера

  • Визначення вхідних шарів декодера Input
de_inputs = layers.Input(shape=(1, fr_vocab))
de_state_in = layers.Input(shape=(hsize,))
  • Визначення проміжних layers декодера
de_gru = layers.GRU(hsize, return_state=True)
de_out, de_state_out = de_gru(de_inputs, initial_state=de_state_in)

de_dense = layers.Dense(fr_vocab, activation='softmax') de_pred = de_dense(de_out)
  • Визначення Model для декодера
decoder = Model(inputs=[de_inputs, de_state_in], outputs=[de_pred, de_state_out])
Machine Translation з Keras

Копіювання ваг

  • Отримайте ваги шару l1
    • w = l1.get_weights()
  • Задайте ваги шару l2 за допомогою w
    • l2.set_weights(w)
  • У нашій моделі є три шари з вагами
    • Енкодер GRU, Декодер GRU і Декодер Dense
en_gru_w = tr_en_gru.get_weights()
en_gru.set_weights(en_gru_w)

Також можна записати так:

en_gru.set_weights(tr_en_gru.get_weights())
Machine Translation з Keras

Генерування перекладів

en_sent = ['the united states is sometimes chilly during 
           december , but it is sometimes freezing in june .']
  • Перетворення англійського речення на послідовність
en_seq = sents2seqs('source', en_st, onehot=True, reverse=True)
  • Отримання контекстного вектора
de_s_t = encoder.predict(en_seq)
  • Перетворення "sos" (початкове слово для декодера) на послідовність
de_seq = word2onehot(fr_tok, 'sos', fr_vocab)
Machine Translation з Keras

Генерування перекладів

fr_sent = ''

for _ in range(fr_len): de_prob, de_s_t = decoder.predict([de_seq,de_s_t])
de_w = probs2word(de_prob, fr_tok)
de_seq = word2onehot(fr_tok, de_w, fr_vocab)
if de_w == 'eos': break fr_sent += de_w + ' '
Machine Translation з Keras

Час перекладати!

Machine Translation з Keras

Preparing Video For Download...