Запустить токен в LSTM-декодере

Я понимаю модель кодера-декодера и то, как выходной сигнал кодера будет входом декодера. Предположим, что здесь у меня есть только модель декодера, у меня есть декодер initial_state (т.е. даны decoder_states_inputs).

Я хочу, чтобы "decoder_inputs" был стартовым токеном (например, )... но я не знаю, как и в каком формате?!

decoder_lstm = LSTM(n_units, return_sequences=True, return_state=True)    
decoder_outputs, state_h, state_c = decoder_lstm(decoder_inputs, initial_state=decoder_states_inputs)

Кроме того, я должен добавить стартовый токен к моим оригинальным последовательностям? то есть:

 <start> statemnt1
 <start> statemnt2
 ....

1 ответ

Решение

Как добавить <start> а также <end> Символ действительно зависит от того, как вы реализуете остальную часть модели, но в большинстве случаев результаты совпадают. Например, в официальном примере тензорного потока он добавляет эти символы в каждое предложение.

def preprocess_sentence(w):
    # other preprocessing

    w = w.rstrip().strip()

    # adding a start and an end token to the sentence
    # so that the model know when to start and stop predicting.
    w = '<start> ' + w + ' <end>'
    return w

# rest of the code
# ... word2idx is a dictionary that map words into unique ids

Затем в части токенизации <start> а также <end> символы отображаются на 4 и 5 соответственно. Но, как вы можете видеть на картинке, он только кормит <start> на входе декодера и <end> на выход декодера. Это означает, что наши данные похожи на:

decoder_inp = raw_decoder_input[:, 0:-1]
decoder_out = raw_decoder_input[:, 1:]

Другие вопросы по тегам