버티의 블로그

[자연어처리 #04] Seq2Seq 본문

AI/자연어처리

[자연어처리 #04] Seq2Seq

ㅤ버티ㅤ 2024. 6. 30. 22:58
728x90

위와 같이 영어 문장을 프랑스어 문장으로 번역할 시, 내부 구조를 RNN을 사용해서 문장의 한 단어씩 input으로 넣어 사용할 수 있을 것이다. 그러나 번역을 할거면 전체 문장의 맥락을 파악하여 한번에 번역해야 하므로 이 방법은 문제가 있다. 따라서 문장 전체를 encoding하여 특징을 파악하고 번역된 문장을 생성해야 하고 이에 제시된 방법이 sequence to sequence, seq2seq이다.

 

seq2seq은 Encoder RNN(LSTM) 구조와 Decoder RNN(LSTM) 구조 2가지를 병렬로 사용하는 방식이다. 각각의 원리를 살펴보면 다음과 같다.

Sequence to Sequence Learning

 

1) Encoder

  • 입력 문장을 단어 단위로 잘라서 encoder의 input으로 넣는다.
  • encoder의 output은 사용하지 않고, 마지막 layer에서의 state를 decoder로 넘겨준다.

2) Decoder

  • Encoder로부터 받은 마지막 state를 초기 state로 사용한다.
  • 이때 Decoder의 첫 입력은 <sos> 토큰이라는, start of sentence 토큰을 사용한다.
    • 이 토큰은 "번역을 시작하겠다"라는 의미라고 생각하면 된다.
  • 그럼 첫 입력과 첫 초기 state를 이용하여 번역한 문장의 첫번째 단어output으로 출력한다.
  • 그럼 이 output은 decoder의 2번째 입력이 되고 이를 반복하여 최종 번역 문장을 만들어낸다.
  • 번역이 종료되면 output으로 <eos> 토큰을 출력한다. (end of sentence)
Seq2seq를 training을 할 땐 Teacher-Force Training을 진행한다. 이는 학습 시 decoder의 입력을 미리 정하여 넣어준다. 다시 말해, 정답인 번역 문장에 <sos> 토큰을 포함하여 미리 입력하는 것이다. 이는 초기 학습 시 <sos> 토큰을 넣으면 이상한 단어를 출력하고 output이 다음 input이 되는 seq2seq 구조 특성 상 전체 번역이 완전 잘못된 상태로 training될 수 있기 때문이다.

 

이제 Seq2seq의 전체 과정을 정리하자면 다음과 같다.

  1. Word Tokenization & Encoding
  2. Teacher-Foce Training
  3. Validation & Testing