tensorflow-ml-nlp-tf2 icon indicating copy to clipboard operation
tensorflow-ml-nlp-tf2 copied to clipboard

BahdanauAttention 에 대해 질문이 있습니다.

Open taeheonkwon opened this issue 3 years ago • 1 comments

책의 309~310 페이지에서 BahdanauAttention 클래스를 구현할때, values를 인코더 순환 신경망의 결괏값으로 하고 있습니다. 이것과 관련하여, 309페이지의 주석 논문(https://arxiv.org/pdf/1409.0473.pdf)에는 h_j 를 입력 문장의 annotation 이라고 하고 있습니다. 논문의 annotation 을 인코더 순환 신경망의 결괏값으로 하신 것인지 알고 싶습니다.

(다른 논문에서는 attention score 를 계산할때 모두 은닉값만 사용하는 것으로 알고 있습니다. 예를 들면 https://www.tensorflow.org/text/tutorials/nmt_with_attention 에서 사용한 논문 https://arxiv.org/pdf/1508.04025v5.pdf 에서 그렇습니다. 그래서 위와 같은 질문을 드립니다...)

taeheonkwon avatar Nov 02 '22 09:11 taeheonkwon

안녕하세요 :)

말씀 주신 질문은 attention에 벡터 c 를 구성하는 h_j가 인코더 출력 벡터가 맞는지에 대한 질문인 것으로 이해했는데요. 책에 구현은 논문과 동일하게 구현이 되어있습니다. class seq2seq에서 call() 메서드를 보시면 self.decoder를 호출하는 구분이 보일겁니다.

predictions, dec_hidden, _ = self.decoder(dec_input, dec_hidden, enc_output)

여기서 enc_output이 인코더 전체 시퀀스에 대한 출력이고요. 이 입력값이 decoder에서 다시 call() 함수를 통해 self.attention을 호출합니다.

context_vector, attention_weights = self.attention(hidden, enc_output)

이때 입력되는 두번째 파라메터가 enc_output이기 때문에 순환신경망인 인코더의 출력 값이 입력으로 들어간다 보시면 됩니다. 코드를 보시면 아시겠지만 attention 모듈 call()함수에 두번째 파라메터가 values 입니다.

혹시 더 궁금한점 있으시면 아래 스레드에 질문 남겨주세요 :)

cc: @changwookjun

Taekyoon avatar Nov 08 '22 01:11 Taekyoon