David의 개발 이야기!

Seq2seq(시퀀스 투 시퀀스)에 대해 알아보자 본문

자연어처리

Seq2seq(시퀀스 투 시퀀스)에 대해 알아보자

david.kim2028 2023. 8. 24. 22:22
반응형

1. Seq2seq - Sequence to sequence 모델 개요 

seq2seq 모델은, 입력된 sequence로부터 다른 도메인의 시퀀스를 출력하는 모델이다. 주로 seq2seq는 번역기에서 대표적으로 사용되는 모델로, RNN을 어떻게 조립했느냐에 따라, seq2seq 구조가 만들어진다.

 

위 그림은, "나는 너를 사랑해" 라는 한국어 문장을 "I love you" 영어로 번역해 출력하는 모습을 보여준다. 

 

2. Seq2seq 구조도

seq2seq 모델은 크게 인코더(encoder) 와 디코더(decoder) 두개의 모듈로 구성되어있다. 인코더는 입력문장의 모든 단어들을 순차적으로 입력받아, 마지막에 이 모든 단어 정보들을 압축해서, context vector로 만든다. Input값의 단어의 정보들이 하나의 context vector 로 압축되면, 인코더는 디코더로 이를 보내, 디코더에서, 번역된 단어를 한개씩 순차적으로 출력한다. 

 

 

인코더와 디코더 내부는 RNN 아키텍처로 구성되어있따. Input을 받는 RNN 셀을 인코더라고 하고, Output 문장을 출력하는 RNN 셀을, 디코더라고 한다. (LSTM 을 RNN 대신해서 쓸 경우, 더 좋은 성능을 보인다고 한다.)

 

Input 문장은, 단어 tokenization을 통해, 단어 단위로 쪼개지고, 단어 토큰 각각은 RNN 셀의 각 시점의 입력이 된다. 인코더 RNN 셀은, 모든 단어를 입력받은 뒤에 인코더 RNN 셀의 마지막 시점의 은닉상태(hidden state)를 디코더 RNN 셀로 넘겨주는데, 이를 Context Vector 라고 한다. Context Vector 는 디코더 RNN 셀의 첫번째 hidden state 에 사용된다.

 

디코더는 RNNLM(RNN Language Model) 이다. 디코더는, 초기 input으로 문장의 시작을 의미하는 "<sos>"가 들어가며, 디코더는 <sos> 가 입력되면, 다음에 등장할 확률이 높은 단어를 예측한다.  첫번째 시점에서 디코더 RNN 셀은 다음에 등장할 단어로 I를 예측하고,. 예측된 단어 I를 다음 시점의 RNN 셀의 입력으로 입력한다. 그리고 두번째 시점의 디코더 RNN 셀은 입력된 단어 I로부터 다시 다음에 올 단어인 love 를 예측하고, 또 다시 이것을 다음 시점의 RNN 셀의 입력으로 보낸다 디코더는 이런 식으로 기본적으로 다음에 올 단어를 예측하고, 그 예측한 단어를 다음 시점의 RNN 셀의 입력으로 넣는 행위를 반복한다. 이 행위는 문장의 끝을 의미하는 심볼인 "<eos>"가 다음 단어로 예측될 때까지 반복된다.

 

 

seq2seq에서 사용되는 모든 단어들은, 임베딩 벡터로 변환후 입력으로 사용한다. 

 

3. Seq2seq 구현 -> 깃헙에 있습니다 :)

https://github.com/Kdavid2355/ai_code/blob/main/seq2seq_with_LSTM.ipynb

 

반응형
Comments