본문 바로가기

딥러닝/nlp 논문

Seq2Seq (Sequence-to-Sequence) 이란?

<Seq2Seq (Sequence-to-Sequence)>

Seq2Seq 모델로 영어인 'I am a student'를 프랑스어인 'je suis étudiant'로 바꾸는 과정이다.

 

Seq2Seq 모델은 입력 sequence에서 다른 도메인의 sequence를 출력하는 모델로, 챗봇(Chat-bot),기계 번역(machine translation), 내용 요약(text summarization), STT(speech to text) 등에서 주로 쓰인다. 

 

<Seq2Seq 모델의 구조>

Seq2Seq  모델은 encoderdecoder로 나뉜다. encoder와 decoder는 RNN 구조이고, 그림에서는 둘 다 LSTM을 사용했다. 

encoder context vector decoder
입력 문장의 모든 단어를 입력받아 context vector를 만든다.
encoder RNN 셀의 마지막 시점의 은닉 상태가 context vector이다.
입력 문장에 대한 정보가 압축되어 있다. context vector을 받아 번역하여 단어를 순차적으로 출력한다.
context vecotr는 디코더 RNN 셀의 첫번째 은닉 상태로 사용된다.
예시에서 <sos>는 문장의 시작을, <eos>는 문장의 끝을 의미한다.

 

encoder와 decoder에서 입력 단어들은 모두 embedding 되어 벡터로 표현된다.

 

<Training Seq2Seq>

train 과정 동안은 decoder이 context vector과 <sos>, je, suis, étudiant를 입력받았을 때 je, suis, étudiant, <eos>를 출력하도록 훈련한다. 이 때 교사 강요(teacher forcing) 방법으로 모델을 훈련한다.

 

교사 강요(teacher forcing)

: test 과정에서 틀린 예측을 하는 건 어쩔 수 없지만, train 과정에서는 주어진 sequence에 대해 항상 정답을 예측하도록 해야 한다. train 과정에서 특정 input에 대해 틀린 예측을 하게 되고, 그 예측이 다음 RNN cell로 들어간다면 연쇄적으로 틀린 단어들에 대해 학습을 진행하게 될 것이다. 교사 강요 방법은 이를 막기 위해서 train 과정에서 RNN cell의 input으로 이전 cell에서의 예측값이 아닌 실제 정답값을 input으로 넣어줘서 train을 효율적으로 하게 해준다. 

 

<Testing Seq2Seq>

test 과정에서 decoder은 첫번째 은닉 상태로 context vector를 받고 첫번째 입력인 <sos>를 input으로 받는다. decoder의 첫번째 RNN cell은 첫 단어를 예측한다. 이 단어는 RNN의 두번째 cell에서 'je'와 함께 input으로 사용된다. 이렇게 decoder에서는  다음에 올 단어를 예측하고 그 단어를 다음 RNN cell의 입력으로 넣는다. 이 과정은 <eos>가 예측될 때까지 반복된다.

RNN cell에서 출력할 수 있는 다양한 예측값이 있고 이 중 하나를 softmax 함수를 통해 선택한다.