У меня есть данные, которые имеют различные разговоры между двумя людьми. Каждое предложение имеет некоторый тип классификации. Я пытаюсь использовать сеть NLP для классификации каждого предложения беседы. Я попробовал сеть сверток и получил приличные результаты (не измельчаю). Я подумал, что, поскольку этот разговор назад и вперед и сеть LSTM могут давать лучшие результаты, поскольку сказанное ранее может оказать большое влияние на последующие.Как структурировать нейронную сеть LSTM для классификации
Если я следовать структуре выше, я предположил бы, что я делаю многие-ко-многим. Мои данные выглядят.
X_train = [[sentence 1],
[sentence 2],
[sentence 3]]
Y_train = [[0],
[1],
[0]]
Данные обработаны с использованием word2vec. Я тогда строить свою сеть следующим образом ..
model = Sequential()
model.add(Embedding(len(vocabulary),embedding_dim,
input_length=X_train.shape[1]))
model.add(LSTM(88))
model.add(Dense(1,activation='sigmoid'))
model.compile(optimizer='rmsprop',loss='binary_crossentropy',
metrics['accuracy'])
model.fit(X_train,Y_train,verbose=2,nb_epoch=3,batch_size=15)
Я предполагаю, что эта установка будет кормить одну партию предложений в одновременно. Однако, если в model.fit, shuffle не равен false, то его получение перетасовывает партии, так почему же сеть LSTM даже полезна в этом случае? Из исследований по этой теме, чтобы достичь многие-ко-многим структуры можно было бы необходимо изменить LSTM слой слишком
model.add(LSTM(88,return_sequence=True))
и выходной слой должен был бы быть ...
model.add(TimeDistributed(Dense(1,activation='sigmoid')))
Когда переключение на эту структуру. Я получаю ошибку на размер ввода. Я не уверен, как переформатировать данные для удовлетворения этого требования, а также как отредактировать слой внедрения, чтобы получить новый формат данных.
Любой вход был бы оценен. Или, если у вас есть предложения по лучшему методу, я более чем счастлив услышать их!
Так вы говорите, что уровень LSTM будет получать по одному слову за раз? Итак, хотя предложение перетасовывается, каждое слово в предложении передается в LSTM отдельно, чтобы узнать общий контекст между предложением в целом? – DJK
Если я не правильно сформулировал свой вопрос, извините. Поскольку данные являются разговором, то, что было сказано в предыдущем предложении, имеет вес в следующем предложении. Поэтому я пытаюсь настроить сеть, чтобы изучить поток разговоров и классифицировать каждое предложение. Вот почему я пытался использовать return_sequence, поэтому сеть будет хранить информацию о предыдущем предложении, классифицируя текущее предложение. – DJK
LSTM подает последовательность векторов. В вашем случае это последовательность вложений слов. Он вернет вектор длины 88 для каждого предложения в вашем случае, который вы уменьшите до 1output с плотным слоем. Таким образом, это касается только одного предложения за раз. Это то, что вы сейчас делаете. Это то, что вы хотели сделать? –