У меня вопрос о смещении входной последовательности, чтобы предсказать «следующее слово» в последовательности. Ниже я привожу игрушечный пример, но обратите внимание, что мои образцы - это IID, а не из гигантского корпуса текста, а скорее образцы из распределения последовательностей (переменной длины). Цель состоит в том, чтобы предсказать следующий результат в последовательности.
Input tensors shape=(None, 1):
[[1, 1, 30],
[2, 5, 5, 5],
[7, 3, 13, 1, 1]]
Currently, I'm shifting the outputs to provide "future" targets:
[[1, 30],
[5, 5, 5],
[3, 13, 1, 1]]
And then padding (as a part of a larger pre-processing step).
Processed inputs shape=(5, 1):
[[1, 1, 30, 0, 0],
[2, 5, 5, 5, 0],
[7, 3, 13, 1, 1]]
Processed targets:
[[1, 30, 0, 0, 0],
[5, 5, 5, 0, 0],
[3, 13, 1, 1, 0]]
Layer (type) Output Shape Param #
=================================================================
embedding_11 (Embedding) (None, None, 64) 9920
_________________________________________________________________
bidirectional_5 (Bidirection (None, None, 128) 49920
_________________________________________________________________
time_distributed (TimeDistri (None, None, 155) 19995
=================================================================
Total params: 79,835
Trainable params: 79,835
Non-trainable params: 0
_________________________________________________________________
Мой embedding
шаг установлен как mask_zero=True
.
Мой вопрос: является ли шаг маскирования также маскирует цель для последнего временного шага без дополнений, эффективно «заглушая» этот временной шаг? Или я должен делать это вручную, отбрасывая последний индекс в последовательности во время предварительной обработки. В этом примере это означало бы обрезку входных данных до:
[[1, 1],
[2, 5, 5],
[7, 3, 13, 1]]
Это избавляет от временных шагов, когда цели равны нулю, а входные данные - нет (например, 30 -> 0, 5-> 0, 1 -> 0
).
Документация Tensorflow по маскированию предполагает, что маскируются входы, а не выходы, что может указывать на тенденцию модели предсказывать нули почти для всего.