Генерация переводов с помощью модели

Машинный перевод с Keras

Thushan Ganegedara

Data Scientist and Author

Предыдущая модель и новая модель

Энкодер-декодер с повторяющимся вектором

Энкодер-декодер — какой вход?

Машинный перевод с Keras

Обученная модель

Обученная модель с Teacher Forcing

Машинный перевод с Keras

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

  • Принимает на вход

    • Слово в формате one-hot
    • Состояние (из предыдущего шага)
  • Возвращает

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

Машинный перевод с Keras

Полная инференс-модель

  • Инференс-модель с рекурсивным декодером

Энкодер с рекурсивным декодером

  • Инференс-модель из предыдущей главы Предыдущий энкодер-декодер
Машинный перевод с Keras

Назначение токенов sos и eos

  • sos обозначает начало перевода (французского предложения).

    • Подайте sos как первое слово в декодер и продолжайте предсказывать
  • eos обозначает конец перевода.

    • Предсказания прекращаются, когда модель выдаёт eos
  • В качестве ограничения используйте максимальную длину, которую модель может предсказывать

Машинный перевод с 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)
    
Машинный перевод с 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])
Машинный перевод с 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())
Машинный перевод с 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)
Машинный перевод с 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 + ' '
Машинный перевод с Keras

Время переводить!

Машинный перевод с Keras

Preparing Video For Download...