HAN (Hierarchical Attention Network)에 대한 아이디어를 파악하려고합니다. 온라인에서 찾은 대부분의 코드는 https://medium.com/jatana/report-on-text- 와 비슷합니다. 분류 사용 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)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다