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

Обучение модели на основе векторных представлений слов

В этом упражнении вы узнаете, как реализовать процесс обучения модели машинного перевода, использующей эмбеддинги (векторные представления) слов. Каждое слово представляется одним числом вместо вектора с унитарным кодированием, как это было в предыдущих упражнениях. Вы будете обучать модель в течение нескольких эпох, последовательно проходя через весь набор данных пакетами.

Для этого упражнения вам предоставлены обучающие данные (tr_en и tr_fr) в виде списка предложений. Мы используем лишь небольшую выборку (1000 предложений) из реального набора данных, чтобы обучение не занимало слишком много времени. Также вам доступны функция sents2seqs() и модель nmt_emb, которую вы реализовали в предыдущем упражнении. Напоминаем: en_x обозначает входные данные энкодера, а de_x — входные данные декодера.

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

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

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

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

  • Получите один пакет французских предложений без унитарного кодирования с помощью функции sents2seqs().
  • Получите все слова из de_xy, кроме последнего.
  • Получите все слова из de_xy_oh (французские слова с унитарным кодированием), кроме первого.
  • Обучите модель на одном пакете данных.

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

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

for ei in range(3):
  for i in range(0, train_size, bsize):    
    en_x = sents2seqs('source', tr_en[i:i+bsize], onehot=False, reverse=True)
    # Get a single batch of French sentences with no onehot encoding
    de_xy = ____('target', ____[i:i+bsize], ____=____)
    # Get all words except the last word in that batch
    de_x = de_xy[:,____]
    de_xy_oh = sents2seqs('target', tr_fr[i:i+bsize], onehot=True)
    # Get all words except the first from de_xy_oh
    de_y = de_xy_oh[____,____,____]
    # Training the model on a single batch of data
    nmt_emb.train_on_batch([____,____], ____)    
    res = nmt_emb.evaluate([en_x, de_x], de_y, batch_size=bsize, verbose=0)
    print("{} => Loss:{}, Train Acc: {}".format(ei+1,res[0], res[1]*100.0))
Редактировать и запускать код