Я подумал, что строю модель внимания, но запутался (опять же) в отношении каждого измерения уровней. Скажем так, у меня 90 документов, каждый из которых состоит из 200 векторов предложений. Векторы предложений имеют размер 500 (каждое предложение вставлено как 1x500). Задача представляет собой классификацию каждого документа, а векторы предложений уже встроены !
#Creating randm features
xx = np.random.randint(100, size=(90,200,500))
y = np.random.randint(2, size=(90,1))
В конце слой внимания должен возвращать наиболее важные предложения (которые более важно для соответствующей классификации).
Мои мысли, и я предполагаю, что:
Вход должен иметь форму (no_sentences_per_doc, sentence_embedding)
, поэтому sent_input
tensor
формы (?, 200 500).
LSTM-слой должен иметь размер half no_sentences_per_doc
, поэтому Bidirectional-layer
удваивает длину LSTM - и мне нужны соответствующие «соответствующие» предложения.
Затем вывод передается в слой Dense
(чтобы максимизировать вывод из Слой LSTM), который должен иметь размер no_sentences_per_doc
И поскольку LSTM просто «запоминает» последовательность, я должен отслеживать с помощью AttentionLayer
.. поэтому Dense- вывод передается на слой внимания размером no_sentences_per_doc
Может кто-нибудь проверить мои мысли / модели архитектура?
# Sentence level attention model
sent_input = Input(shape=(no_sentences_per_doc, sentence_embedding), dtype='int32',name='sent_input')
sent_lstm = Bidirectional(LSTM(100, return_sequences=True),name='sent_lstm')(sent_input)
sent_dense = Dense(200, activation='relu', name='sent_dense')(sent_lstm)
sent_att,sent_coeffs = AttentionLayer(200,return_coefficients=True,name='sent_attention')(sent_dense)
preds = Dense(1, activation='softmax',name='output')(sent_att)
Внимание слой взят отсюда: https://humboldt-wi.github.io/blog/research/information_systems_1819/group5_han/