seq2seq model이란?
0. seq2seq는 왜 등장했는가?
“말은 끝까지 들어봐야 안다.”
예를 들어 일반적인 RNN의 챗봇을 생각해보자.
사람이 I broke up yesterday라고 적으면
챗봇은 broke up를 보고 슬픈 단어를 생성할 확률이 높아져서 sorry to hear that을 생성
그런데 그 이후 사람이 Today’s perfect weather makes me much sad를 쳤는데 분명 슬픈 문맥인데
챗봇은 perfect weather만 보고 긍정적인 단어를 생성할 확률이 높다가 sad보면서 꼬이기 시작해서 제대로 생성을 못함
그래서 나온 seq2seq는 문장을 encoder에 넣어서 문맥 정보를 decoder에 보낸 뒤 단어를 생성하고
그 단어를 받아 다음 단어를 생성하는 등 모든 문장을 들은 뒤 한번에 결과를 출력하고자해서 등장했다.
이것이 바로 encoder와 decoder가 획기적인 이유이다.
1. seq2seq model
input sequence를 모두 읽은 뒤 output sequence를 차례대로 예측하는 모델
many to many 구조
기본적으로 입력문장을 모두 읽어들이는 LSTM구조의 encoder와
출력문을 차례대로 생성하는 LSTM구조의 decoder로 구성되어있다.
are, you, free, tomorrow?를 encoder가 읽어들여 yes, what’s, up?을 차례대로 decoder가 뱉어낸다
encoder내 모듈들은 shared parameter이고 decoder내 모듈들도 shared parmeter이며
당연하지만 encoder와 decoder는 서로 다른 parameter
encoder의 마지막 단어 tomorrow까지 읽고나온 최종 hidden vector는
원문의 맥락 정보를 가지고 있고 이것은 decoder의 초기 hidden vector로 들어간다
이 encoder의 최종 hidden vector와 decoder에 <SOS> token(<start> 토큰)을 집어넣으면서 첫번째 decoder에서 첫 번역 단어를 생성해낸다.
다음에는 첫번째 decoder에서 나온 hidden vector와 생성한 첫번째 예측단어를 두번째 decoder에 input으로 넣고 두번째 단어를 예측한다.
이 과정을 반복하여 <EOS>를 뱉으면 모델이 종료된다.
encoder의 최종 벡터가 h0라고 쓰여진 것은 decoder의 초기 벡터로 들어간다는 의미에서 그렇다.
language model에서는 decoder의 첫 step에 <SOS> token을 하나의 input으로 넣어준다.
<SOS>token은 decoder에게 첫 단어를 생성하라는 지시를 해주는 special token이다.
마찬가지로 문장 생성이 끝났다는 의미에서 decoder의 마지막 step에 <End> token을 생성하게 만든다.
그러면 decoder는 더 이상 단어를 생성하지 않는다.
이러한 special token은 target sentence의 vocabulary 상에 미리 정의해두어야 한다.
2. Decoder에 뭐가 들어가는가
기계번역문제라는 것이 그냥 나는 input sequence 보면 알아서 무슨 문장인지 번역해주는줄?
그러니까 예를 들어 ‘난 널 사랑해’보면 I love you가 바로 나오는줄?
근데 그게 아니라 encoding에서는 난 널 사랑해를 넣으면 맥락에 대한 분석 정보를 뽑아오고
decoding에서는 그 분석 정보에다가 미리 구축한 영어 단어 사전 sequence를 집어넣는것임
근데 이 사전에 start sign이랑 end sign이라는 것도 있음
start sign이랑 encoding의 맥락정보가 들어가면 첫 단어 나오고 end sign이 나오면 번역이 끝나는것
decoding으로 나온 단어는 새로운 decoding의 input sequence로 들어감
'딥러닝 > NLP' 카테고리의 다른 글
예시로 이해하는 attention의 기본 아이디어 (0) | 2022.04.14 |
---|---|
attention 구조는 왜 등장했을까? -attention의 근본 아이디어- (0) | 2022.04.09 |
RNN을 이용한 글자 수준의 언어 모델(Character-level language model) (0) | 2022.04.01 |
GRU(gated recurrent unit)와 LSTM의 backpropagation에 대하여 (0) | 2022.03.20 |
RNN을 개선한 LSTM과 GRU 구조 알아보기 (0) | 2022.03.16 |