НачатьНачать бесплатно

Генерация переводов

Теперь вы будете генерировать французские переводы с помощью инференс-модели, обученной с применением Teacher Forcing.

Модель (nmt_tf) была обучена в течение 50 эпох на 100 000 предложениях и достигла точности около 98% на валидационной выборке из более чем 35 000 примеров. Инициализация этого упражнения может занять некоторое время, поскольку обученная модель загружается заново. Вам предоставлена функция sents2seqs(), а также две новые функции:

word2onehot(tokenizer, word, vocab_size) принимает:

  • tokenizer — объект Keras Tokenizer
  • word — строка, представляющая слово из словаря (например, 'apple')
  • vocab_size — размер словаря

probs2word(probs, tok) принимает:

  • probs — выходные данные модели формы [1,<French Vocab Size>]
  • tok — объект Keras Tokenizer

Чтобы посмотреть исходный код этих функций, введите в консоли print(inspect.getsource(word2onehot)) и print(inspect.getsource(probs2word)).

Это упражнение является частью курса

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

Посмотреть курс

Инструкции к упражнению

  • Предскажите начальное состояние декодера (de_s_t) с помощью энкодера.
  • Предскажите выходные данные и новое состояние декодера, используя предыдущий прогноз (выход) и предыдущее состояние в качестве входных данных. Не забудьте рекурсивно обновлять новое состояние.
  • Получите строку слова из вероятностного выхода с помощью функции probs2word().
  • Преобразуйте строку слова в унитарную последовательность (one-hot) с помощью функции word2onehot().

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

en_sent = ['the united states is sometimes chilly during december , but it is sometimes freezing in june .']
print('English: {}'.format(en_sent))
en_seq = sents2seqs('source', en_sent, onehot=True, reverse=True)
# Predict the initial decoder state with the encoder
de_s_t = ____.predict(____)
de_seq = word2onehot(fr_tok, 'sos', fr_vocab)
fr_sent = ''
for i in range(fr_len):    
  # Predict from the decoder and recursively assign the new state to de_s_t
  de_prob, ____ = ____.predict([____,____])
  # Get the word from the probability output using probs2word
  de_w = probs2word(____, fr_tok)
  # Convert the word to a onehot sequence using word2onehot
  de_seq = word2onehot(fr_tok, ____, fr_vocab)
  if de_w == 'eos': break
  fr_sent += de_w + ' '
print("French (Ours): {}".format(fr_sent))
print("French (Google Translate): les etats-unis sont parfois froids en décembre, mais parfois gelés en juin")
Редактировать и запускать код