Я действительно застрял в создании NN для классификации текста с keras
с использованием lstm
и добавлением attention_layer
сверху. Я уверен, что я довольно близок, но я в замешательстве:
Должен ли я добавить плотный слой TimeDistributed
после LSTM?
И как мне получить веса внимания из моей сети (для наглядности)? - чтобы я знал, какое предложение было «ответственным» за то, чтобы документ был классифицирован как хороший или плохо ?
Скажем, у меня есть 10 документов, состоящих из 100 предложений, и каждое предложение представлено в виде вектора из 500 элементов. Таким образом, моя матрица документов, содержащая последовательности предложений, выглядит следующим образом: X = np.array(Matrix).reshape(10, 100, 500)
Документы должны быть классифицированы в соответствии с настроением 1 = хорошо; 0 = плохо - поэтому
y= [1,0,0,1,1]
yy= np.array(y)
Мне не нужен слой внедрения, потому что каждое предложение каждого документа уже является разреженным вектором.
Слой внимания взят из: https://github.com/richliao/textClassifier/blob/master/textClassifierHATT.py
MAX_SENTS = 100
MAX_SENT_LENGTH = 500
review_input = Input(shape=(MAX_SENTS, MAX_SENT_LENGTH))
l_lstm_sent = LSTM(100, activation='tanh', return_sequences=True)(review_input)
l_att_sent = AttLayer(100)(l_lstm_sent)
preds = Dense(1, activation='softmax')(l_att_sent)
model = Model(review_input, preds)
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['acc'])
model.fit(X, yy, nb_epoch=10, batch_size=50)
Так что я думаю, моя модель должна быть настроена правильно, но я не совсем уверен .. Но как мне получить вес внимания от этого ( например, чтобы я знал, какое предложение вызвало классификацию как 1)? Помощь так высоко ценится