Определение цели для предсказания следующего элемента во время моделирования последовательности - PullRequest
0 голосов
/ 25 мая 2020

У меня вопрос о смещении входной последовательности, чтобы предсказать «следующее слово» в последовательности. Ниже я привожу игрушечный пример, но обратите внимание, что мои образцы - это 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 по маскированию предполагает, что маскируются входы, а не выходы, что может указывать на тенденцию модели предсказывать нули почти для всего.

...