ПочатиПочніть безкоштовно

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

Тепер ви генеруватимете французькі переклади за допомогою інференс-моделі, натренованої з 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)).

Ця вправа є частиною курсу

Machine Translation з 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")
Редагувати та запускати код