Генерация переводов
Теперь вы будете генерировать французские переводы с помощью инференс-модели, обученной с применением 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")