기존 RNN 모델들은 아주 큰 단점이 존재합니다.
입력값을 넣으면 반드시 하나의 출력값이 나온다는 것
즉, 입력과 출력의 크기가 같아야 한다는 제약이 있습니다.
이는 일반적인 번역을 생각하였을 때 엄청난 단점으로 여겨집니다.
한국어를 영어로 번역하는데, 단어의 수가 같아야 하는 말도 안되는 제약이 생기는 것이죠.
이러한 문제를 해결하기 위해 Seq2Seq 모델이 나오게 되었습니다.
Seq2Seq 모델은 어떻게 이 문제를 해결했을까요?
Seq2Seq 모델의 기본구조는 인코더, 디코더로 이루어져 있습니다.
앞단의 Encoder는 input값들의 정보를 압축하는 역할을 하고,
뒷단의 Decoder는 압축된 정보를 바탕으로 새로운 정보를 생성하는 역할을 합니다.
Seq2Seq 모델은 Encoder를 통해 문장 전체를 하나의 context vector로 변환시켜 주고,
Decoder가 이를 입력값으로 받아 예측을 수행하는 것으로 RNN의 문제를 해결했습니다.
이제 Encoder, Decoder가 어떻게 동작하는지 알아보겠습니다.
Encoder
Encoder는 RNN구조를 가지고 있지만, 예측을 수행하지 않기에 각 단계별 출력값이 없습니다.
문장을 토큰화를 통해 단어 단위로 쪼개고, 각 토큰들이 Encoder RNN 셀의 각 시점의 입력값이 됩니다.
RNN 셀은 토큰들과 이전 단계의 hidden state를 바탕으로 새로운 hidden state를 구하고,
구한 hidden state를 다음 단계로 보내주는 방식으로 동작합니다.
따라서 유일한 출력값은 마지막 hidden state인 h_t이고, 이것이 context vector가 됩니다.
context_vector는 입력 문장의 모든 단어 토큰들의 정보를 요약해서 담고있습니다.
Decoder
Decoder 또한 RNN 구조를 갖고 있습니다.
이전 단계에서 출력된 값을 다음 단계의 input값으로 사용합니다.
input값인 단어들을 embedding layer를 통과시켜 embedding vector로 변환합니다.
embedding layer를 통과해 생성된 embedding vector는 위와 같으며,
이는 Encoder에서 나온 Context vector와 같이 연산이 됩니다.
Decoder의 첫번째 셀에서는 context vector를 hidden state로 사용합니다.
그 이후부터는 새롭게 계산된 hidden state가 output과 다음 셀의 hidden state로 전달됩니다.
Decoder를 통해 출력되는 단어는 다양한 단어들이 있습니다.
다양한 단어들 중에서 하나의 단어만을 골라야 하기에 SoftMax함수를 사용합니다.
새로운 hidden state가 output으로 나오면 SoftMax함수를 거쳐서 단어별 확률값으로 변환되고,
이중에서 제일 높은 확률값을 가지는 단어가 출력되는 방식으로 동작합니다.
출처
'Deep Learning > NLP' 카테고리의 다른 글
BERT (Pre-training of Deep Bidirectional Transformers for Language Understanding) (2) | 2024.03.15 |
---|---|
Transformer (Attention is All you need) (0) | 2023.10.31 |
Attention (0) | 2023.10.27 |
LSTM(Long short Term Memory Network) (0) | 2023.10.26 |
RNN(Recurrent Neural Network) (0) | 2023.10.26 |
댓글