NLP/AI/Statistics

Sequence to Sequence 본문

NLP

Sequence to Sequence

Danbi Cho 2020. 12. 8. 16:42

Sequence to sequence 모델은 seq2seq로도 불리기 때문에 앞으로의 글에서 sequence to sequence 모델을 seq2seq로 칭하기로 한다.

 

seq2seq는 흔히 기계번역, 챗봇, 요약 등과 같이 입력 시퀀스로부터 출력 시퀀스를 내보내는 모델이다.

 

즉, 

 

연속된 한국어 문장을 모델에 입력하여 학습한 뒤, 연속된 영어 문장을 출력하는 기계번역의 형태이거나

 

질문을 모델에 입력하여 학습한 뒤, 답변을 출력하는 QA의 형태로 활용된다.

 

여기에서 입력 문장은 인코더(encoder)에 입력되고 출력 문장은 디코더(decoder)로부터 출력된다.

 

이를 도식화하면 다음과 같다.

 

seq2seq

#. 인코더(encoder): 연속된 입력 문장을 이용하여 context vector를 구성

#. 디코더(decoder): 인코더로부터 구성된 context vector를 전달 받아 예측된 결과값을 순차적으로 출력

 

이 때 인코더와 디코더는 연속된 입력 문장의 순차정보를 학습해야하기 때문에 RNN(Recurrent Neural Network) 혹은 LSTM(Long Short Term Memory)과 같은 순환신경망으로 설계된다.

 

다시 말해, 인코더에 순환신경망 모델 하나, 그리고 디코더에 순환신경망 모델 하나로 seq2seq는 총 2개의 순환신경망 모델을 가지고 있다.

 

seq2seq의 인코더와 디코더를 각각 자세히 보면,

 

인코더는 연속된 입력 문장의 토큰화 결과를 순차적으로 순환신경망에 입력받아 학습하고 마지막 셀의 벡터 값(context vector)을 디코더로 넘겨주게 된다.

 

이는 many to one 형식과 같다고 볼 수 있다.

 

아래의 그림은 LSTM을 이용하여 구성한 인코더를 도식화한 것이다.

 

Encoder in seq2seq

 

예를 들어, 입력 문장이 "I study NLP"라는 문장이 LSTM에 순차적으로 입력되어 many to one의 형식으로 학습된 후

 

마지막 'NLP' 셀을 통하여 압축된 벡터 값 Context vector가 출력된다.

 

이렇게 인코더에서 출력되는 context vector가 디코더의 입력 히든 벡터가 된다.

 

이제 디코더에 대하여 자세히 살펴보면,

 

디코더는 초기 입력 문장으로 start token인 "<SOS>"를 입력받는다.

 

그리고 "<SOS>" 다음 단어로 등장할 예측 단어를 출력하게 되는데, 이 때 출현확률이 가장 높은 단어로 예측한다.

 

Decoder in seq2seq

순차적으로 다음에 올 단어를 예측하여 출력하고 end token인 "<EOS>"가 등장할 때까지 이를 반복한다.

 

구체적으로는 입력 단어의 임베딩 벡터로부터 학습된 LSTM의 출력 벡터는 softmax를 통해 확률값이 가장 큰 단어를 예측하여 출력하게 된다. 

 

이 때 모델 설계에 따라 Context vector를 첫 셀에만 입력하는 경우가 있고, 혹은 LSTM 입력 셀에 병렬적으로 입력하는 등 context vector의 전달 방식을 변형시킬 수 있다.

 

예를 들어, 디코더의 두번째 셀 "나는" 에서 LSTM 학습 입력 벡터로 "나는"의 임베딩 벡터만 입력될 수도 있고

"나는"의 임베딩 벡터와 Context vector를 병합하여 입력할 수도 있다.

 

이러한 seq2seq 모델은 입력 데이터의 시퀀스 길이와 순서에 상관없이 자유롭게 표현이 가능하다는 장점이 있지만,

 

입력 문장이 길 경우 정보손실로 인해 성능이 떨어지는 문제가 발생할 수 있다.

 

이러한 한계를 보완하기 위해 attention mechanism이라는 개념이 도입되었다.

Comments