Keras LSTM для прогнозирования следующего слова с последовательностями переменной длины - PullRequest
0 голосов
/ 25 мая 2018

У меня есть набор последовательностей переменной длины, и я хочу построить модель, которая предсказывает следующий токен с учетом последних многих токенов.

Вопрос в том, как обучить модель с последовательностями переменной длины.?

Я знаю о заполнении, но есть ли способ не задавать длину окна заранее?

Я также читал об использовании batch_size = 1.В таком случае какими должны быть train_X и train_Y?Если я использую в качестве цели только последний токен очень длинной последовательности, это как если бы я отбрасывал все подпоследовательности в ней (то есть от 0-> 1, 0-> 2 .... 0-> N-1).Должен ли я вручную создавать все эти подпоследовательности перед подачей LSTM?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Да, вы можете указать входные данные переменной длины в кератах, а именно, указав input_shape=(None, features), где None указывает неизвестно количество временных шагов.Вот пример модели:

in = Input(shape=(None, num_words)) # let's assume it is one-hot encoded words
latent = Masking()(in) # sentences in same batch need to same length, padded
latent = LSTM(latent_size)(latent) # skips masked timesteps
out = Dense(num_words, activation='softmax')
model = Model(in, out)
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')

Важным моментом является то, что предложения в пакете должны быть дополнены для тензорных операций, но в действительности разные пакеты могут иметь разное количество временных шагов, что позволяет вашей модели обрабатывать предложения различной длины.

0 голосов
/ 25 мая 2018

В кератах вам нужны вымышленные входные фигуры, но вы можете дополнить последовательности (например, заливкой 0), чтобы иметь одинаковые размеры.

LSTM принимает трехмерный ввод: (batch_size, timesteps, features).Временные шаги представляют слова и показывают представление одного слова.Допустим, у вас есть предложения из 20 слов, и каждое слово предложения представлено в виде вектора OneHot из 1000 элементов.для одного предложения ваша форма ввода должна быть (1, 20, 1000).Вы можете вручную предварительно обработать ваши данные, чтобы соответствовать этим условиям, или вы можете использовать встроенные функции в кератах, которые сделают всю работу за вас.Вы можете найти все эти функции здесь: https://keras.io/preprocessing/text/

...