Навчання моделі на основі word embedding
Тут ви навчитеся реалізовувати процес тренування моделі машинного перекладу, що використовує вкладення слів (embeddings — векторні представлення). Слово подається як одне число, а не як one-hot вектор, як ви робили в попередніх вправах. Ви тренуватимете модель протягом кількох епох, проходячи весь набір даних пакетами.
У цій вправі вам надано тренувальні дані (tr_en і tr_fr) у вигляді списку речень. Ви використаєте лише дуже малу вибірку (1000 речень) з реальних даних, адже повне тренування може тривати надто довго. Також у вас є функція sents2seqs() і модель nmt_emb, які ви реалізували в попередній вправі. Пам'ятайте: для вхідних даних енкодера використовуємо en_x, а для вхідних даних декодера — de_x.
Ця вправа є частиною курсу
Machine Translation з Keras
Інструкції до вправи
- Отримайте один пакет французьких речень без onehot-кодування за допомогою функції
sents2seqs(). - Візьміть усі слова, окрім останнього, з
de_xy. - Візьміть усі слова, окрім першого, з
de_xy_oh(французькі слова з onehot-кодуванням). - Навчіть модель, використовуючи один пакет даних.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
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))