Đệm độ dài câu (padding)
Bây giờ bạn sẽ hiện thực một hàm tên là sents2seqs() mà sau này bạn sẽ dùng để chuyển đổi dữ liệu thuận tiện sang định dạng mà mô hình neural machine translation (NMT) chấp nhận. sents2seqs() nhận vào một danh sách các chuỗi câu và,
- Chuyển các câu thành danh sách các chuỗi ID,
- Thêm padding cho các câu để chúng có cùng độ dài và,
- Tùy chọn chuyển các ID thành vector one-hot.
Bạn đã được cung cấp en_tok, một Tokenizer đã được huấn luyện trên dữ liệu. Một điểm cần lưu ý là khi hiện thực hàm sents2seqs() bạn sẽ thấy một đối số chưa dùng tên là input_type. Sau này, input_type sẽ được dùng để thay đổi các tham số phụ thuộc ngôn ngữ như độ dài chuỗi và kích thước từ vựng.
Bài tập này là một phần của khóa học
Machine Translation với Keras
Hướng dẫn bài tập
- Chuyển
sentencesthành chuỗi bằngTokenizeren_tok. - Thêm padding cho các chuỗi tới độ dài cố định
en_lenvới kiểu padding xác định bởipad_typevà dùng cắt bớtpost. - Chuyển các ID từ
preproc_textthành các vector one-hot có độ dàien_vocabbằng hàmto_categorical(). - Chuyển
sentencethành một chuỗi đã padding bằng phương thứcsents2seqs()với kiểu paddingpre.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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=____)