Attention : NEURAL MACHINE TRANSLATIONBY JOINTLY LEARNING TO ALIGN AND TRANSLATE
소제목입니다.
Attention : NEURAL MACHINE TRANSLATIONBY JOINTLY LEARNING TO ALIGN AND TRANSLATE
논문 : https://arxiv.org/pdf/1409.0473.pdf
코드 : (텐서플로우 공식)
- https://www.tensorflow.org/tutorials/text/nmt_with_attention
- https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/nmt_with_attention/nmt_with_attention.ipynb#scrollTo+yJ_B3mhW3jFk
깃허브 코드 : https://github.com/hlamba28/NMT-with-Attention-Mechanism/blob/master/NMT_Attention_Marathi.ipynb
논문 요약
모델
인코더 + 디코더 및 문맥벡터 사용 형태는 기존 자연어 처리 매커니즘과 동일
인코더때 각각의 셀인 스테이트를 모두 활용한다. (마지막 셀에서 나온것만 문맥벡터화 하는 s2s와 다르게)
장점 1. 다양한 정보를 담을수 있다. 2. 집중해야하는 단어에게만 집중할 수 있는 매커니즘 설립 가능하다.
인코더
히든층을 뽑는다는 것은 동일하다.
이때 디코딩을 위한 과정이 달라진다.
1. 각 은닉층에 FC를 거친 값에 마지막 FC도 더해서 거친다.
2. 그리고 이 값은 층마다의 출력으로 나오며 스코어(s1,s2,s3...)등으로 말한다.
3. 여기에 소프트맥스를 적용한다. 즉 점수화를 하는데, 이때 어텐션 웨이트가 나온다. (0.9, 0.0, 0.1 등)
4. 그렇다면 각 단어들의 인코더 히든층마다 해당 웨이트들을 각각 곱해서 문맥벡터를 만든다. 이때 이 문맥벡터는 어텐션 웨이트를 곱해서 만들어졌기에 필요한 부분에 집중한 더 효과적인 결과를 만들 수 있게 된다.
5. 이 문맥벡터를 디코더의 첫 RNN셀에 넣는다. 그러면 첫번째 단어가 출력된다. (1단계 완료)
6. 다음 단어의 디코딩을 위해 인코더의 모든 히든층에 디코더의 히든스테이트를 같이 FC하여 다른 웨이트를 구한다. 이때 중요한 것은 계속 모든 히든층을 반복적으로 사용한다는 것이다.
7. 그 뒤 해당 웨이트를 모든 인코더 히든층에 모두 다시 곱해서 두번째 단어를 출력한다. (2단계 완료)
8. 이를 계속 반복하고 end토큰이 나오면 멈춘다.
teacher forcing
틀린 답을 내뱉었을경우 예측값이 아닌 정답을 넣을 수 있도록 해서 학습을 효율적으로 또 정확하게 진행하도록 한다.
이는 당연히 지도학습이며, 즉 정답 레이블이 존재할 때만 가능하다.