Доповнення речень (padding)
Тепер ви реалізуєте функцію sents2seqs(), яку згодом використаєте, щоб зручно перетворювати дані до формату, прийнятного для моделі нейронного машинного перекладу (NMT). sents2seqs() приймає список рядків-речень і
- перетворює речення на список послідовностей ідентифікаторів (ID),
- доповнює (pad) речення так, щоб вони мали однакову довжину, та
- за потреби перетворює ID на one-hot вектори.
Вам надано en_tok — Tokenizer, уже натренований на даних. Зверніть також увагу, що під час реалізації функції sents2seqs() ви побачите невикористаний аргумент input_type. Згодом input_type буде використано, щоб змінювати мовозалежні параметри, зокрема довжину послідовності та розмір словника.
Ця вправа є частиною курсу
Machine Translation з Keras
Інструкції до вправи
- Перетворіть
sentencesна послідовності за допомогою токенізатораen_tok. - Доповніть послідовності до фіксованої довжини
en_lenіз заданим типом доповненняpad_typeта використовуйте усіченняpost. - Перетворіть ідентифікатори слів у
preproc_textна one-hot вектори довжиниen_vocabза допомогою функціїto_categorical(). - Перетворіть
sentenceна доповнену послідовність за допомогою методуsents2seqs()із доповненнямpre.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.utils import to_categorical
def sents2seqs(input_type, sentences, onehot=False, pad_type='post'):
# Convert sentences to sequences
encoded_text = ____.____(sentences)
# Pad sentences to en_len
preproc_text = ____(____, padding=____, truncating=____, maxlen=____)
if onehot:
# Convert the word IDs to onehot vectors
preproc_text = ____(____, num_classes=____)
return preproc_text
sentence = 'she likes grapefruit , peaches , and lemons .'
# Convert a sentence to sequence by pre-padding the sentence
pad_seq = sents2seqs('source', [____], pad_type=____)