Запустить токен в LSTM-декодере - PullRequest
0 голосов
/ 14 января 2019

Я понимаю модель кодера-декодера и то, как выходной сигнал кодера будет входом декодера. Предположим, что здесь у меня есть только модель декодера, у меня есть декодер 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)

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

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

1 Ответ

0 голосов
/ 14 января 2019

Способ добавления символов <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:]

enter image description here

...