seq2seq 제안 모델에서는 speech recognition과 machine translation을 대표적인 예시로 들었다.
seq2seq의 아키텍처는 크게 인코더와 디코더 두 모듈로 나눌 수 있다. 이러한 구조 때문에 "Encoder-Decoder Model"라고도 불림
인코더 : 입력 문장의 모든 단어들을 순차적으로 입력받아 모든 단어 정보들을 압축해서 하나의 고정된 차원 벡터로 만드는 역할을 한다. 이때 이 벡터를 Context Vector라고 부른다.
디코더 : Context Vector를 받아서 적절한 Sequence 정보를 생성하는 역할을 한다.
인코더와 디코더는 모두 LSTM으로 이루어져있으며, Context Vector은 인코더를 구성하는 LSTM의 마지막 히든 스테이트이다.
seq2seq를 처음 제안한 논문에서는 입력 시퀀스의 길이가 유동적이지만 항상 일정한 차원의 벡터로 압축해야하기 때문에 Stacked LSTM으로 인코더 디코더를 구성하였다. 또한, 인코더에서 스퀀스의 순서를 뒤집어서 입력하였으며, 이는 첫 단어를 마지막으로 입력함으로써 디코더가 첫 단어를 잘 예측할 수 있도록 하고자 하였다. 이는 이후에 등장하는 Bi-LSTM에 영감을 주었다.
디코더는 기본적으로 LSTM-LM ( LSTM Language Model )이며, 초기 입력으로 문장의 시작을 의미하는 심볼이 입력되고 다음에 등장할 확률이 높은 단어를 예측한다. 이렇게 예측된 단어는 다음 타임 스텝의 입력으로 사용된다. 이를 문장의 끝을 의미하는 심볼 <EOS>가 등장할 때까지 반복한다.
seq2seq 모델은 학습을 위한 Train 과정과 테스트를 위한 Inference 과정의 동작 방식의 차이가 있다.
Train : 디코더에게 인코더가 보낸 컨텍스트 벡터와 시작 심볼을 입력하고 이후, 각 타임 스텝마다 예측된 단어가 아닌 정답 단어를 입력하면서 학습을 진행한다. 이러한 학습 방법을 Teacher Forceing이라 한다.
Inference : 디코더에게 인코더가 보낸 컨텍스트 벡터와 시작 심볼을 입력하는 것 까지는 학습 과정과 동일하며, 이후 각 타임 스텝에서 예측된 단어를 다음 타임 스텝의 입력으로 사용하는 점에서 차이가 있다.
[출처] 딥 러닝을 이용한 자연어 처리 입문
위의 그림은 디코더에 의해 단어가 예측되는 전반적인 구조를 나타낸다. 소프트맥스 함수를 통해 각 단어별 확률을 구하는 것을 볼 수 있다.