输入层在分层注意网络中代表什么

What do input layers represent in a Hierarchical Attention Network

我试图掌握分层注意力网络 (HAN) 的概念,我在网上找到的大部分代码都或多或少类似于此处的代码:https://medium.com/jatana/report-on-text-classification-using-cnn-rnn-han-f0e887214d5f :

embedding_layer=Embedding(len(word_index)+1,EMBEDDING_DIM,weights=[embedding_matrix],
input_length=MAX_SENT_LENGTH,trainable=True)
sentence_input = Input(shape=(MAX_SENT_LENGTH,), dtype='int32', name='input1')
embedded_sequences = embedding_layer(sentence_input)
l_lstm = Bidirectional(LSTM(100))(embedded_sequences)
sentEncoder = Model(sentence_input, l_lstm)

review_input = Input(shape=(MAX_SENTS,MAX_SENT_LENGTH), dtype='int32',  name='input2')
review_encoder = TimeDistributed(sentEncoder)(review_input)
l_lstm_sent = Bidirectional(LSTM(100))(review_encoder)
preds = Dense(len(macronum), activation='softmax')(l_lstm_sent)
model = Model(review_input, preds)

我的问题是:这里的输入层代表什么?我猜 input1 代表用嵌入层包裹的句子,但在那种情况下,input2 是什么?它是 sentEncoder 的输出吗?在那种情况下它应该是一个浮点数,或者如果它是另一层嵌入词,那么它也应该用嵌入层包裹。

HAN 模型在层次结构中处理文本:它需要一个已经拆分成句子的文档(这就是 input2 的形状是 (MAX_SENTS,MAX_SENT_LENGTH) 的原因);然后它使用 sentEncoder 模型独立处理每个句子(这就是为什么 input1 的形状是 (MAX_SENT_LENGTH,)),最后它一起处理所有编码的句子。

所以在你的代码中,整个模型存储在 model 中,它的输入层是 input2,你将向它提供被分成句子的文档,并且它们的单词已经被整数编码(使其与嵌入层兼容)。另一个输入层属于 sentEncoder 模型,它在 model 内部使用(而不是直接由您使用):

review_encoder = TimeDistributed(sentEncoder)(review_input)

Masoud 的回答是正确的,但我将在这里用我自己的话重写:

  • 数据 (X_train) 作为索引提供给模型并由 输入2
  • X_train 然后转发到编码器模型并由 输入 1
  • input1 被嵌入层包裹,因此索引被转换 到矢量

所以 input2 更像是模型输入的代理。