본문 바로가기
Machine-Learning/NLP (Natural Language Processing)

[NLP] Seq2Seq

by AteN 2022. 10. 4.

Seq2Seq 

Sequence to Sequence Learning with Neural Networks: https://arxiv.org/pdf/1409.3215.pdf

 

 

 

기존 LSTM 기반의 번역은 한계가 있었다. 왜냐하면 LSTM은 하나가 들어오면 바로 하나의 output을 낼 수 있는데 이것이 문제가 된다.

 

  • 문자 그대로 인코더는 입력 데이터를 인코딩(부호화)하고, 디코더는 인코딩 된 데이터를 디코딩(복호화) 한다. 즉 인코더는 입력을 처리하고 디코더는 결과를 생성한다. 
  • Context벡터는 입력에 대한 정보를 압축하고 있는 벡터. 즉 인코더는 문장을 가지고 context 벡터를 만들어주는데, 이 context 벡터에는 문장에 대한 정보가 응축되어 있다. 반면 디코더는 정보가 응축되어 있는 context 벡터로부터 다른 문장을 생성. 
  • 간단한 seq2se 모델에서 context 벡터는 인코더의 마지막 스텝이 출력한 은닉 상태고 같다 

- Seq2Seq는 번역기에서 대표적으로 사용되는 모델이다. 인코더는 입력 문장의 모든 단어들을 순차적으로 입력받는 뒤에 마지막에 이 모든 단어정보들을 압축해서 하나의 벡터로 만드는데 이를 컨텍스트 벡터 (context Vector)라고 한다. 입력 문장의 정보가 하나의 컨텍스트 벡터로 모두 압축되면 인코더는 컨텍스트 벡터를 디코더로 전송한다. 디코더는 컨텍스트 벡터를 받아서 번역된 한 개씩 순차적으로 출력

sequence-to-sequence 

- 우선, Attention 기법이 가장 먼저 적용되었던 모델인 seq2seq모델을 살펴보면 encoder 구조로 되어 있어, input에 번역하고자 하는 문장을 단어 하나씩 받는 형태로 되어있다. 마지막 입력 단어에는 EOS (end-of-sequence)라는 특별한 단어 토큰을 받도록 되어 있다. 마지막 EOS까지 받은 뒤의 output을 context라고 한다. 그렇게 나온 context를 decoder 구조에서 넘겨 받으며, 동시에 SOS(Start-Of-Sequence)라는 토큰을 처음 input에서 입력해주면 넘겨 받은 context로 부터 첫번째 단어를 생성한다. 생성된 다음 입력으로 넣어주고 또 다음 단어를 생성하고 이런 작업을 EOS 토큰이 output으로 나올 때까지 반복해준다.

Encoder는 결국 context를 만들기 위해서 RNN으로 동작하는 구조이고, Decoder는 한단어씩 출력하는데, 그 출력된 output(단어)을 오른쪽으로 shift해서 입력으로 받은 뒤 새로운 단어를 만들어주는 구조이다. 

 

Seq2Seq는 입력된 시퀀스로부터 다른 도메인의 시퀀스를 출력하는 다양한 분야에서 사용되는 모델이다. 예를 들어 챗봇과 기계 번역이 그러한 대표적인 예인데, 입력 시퀀스와 출력 시퀀스를 각각 질문과 대답으로 구성하면 챗봇으로 만들 수 있고, 입력 시퀀스와 출력 시퀀스를 각각 입력 문장과 번역 문장으로 만들면 번역기로 만들 수 있다. 

 

댓글