본문 바로가기

ML & DL

[NLP] Seq-to-Seq

본 내용은 보아즈 NLP 1팀 김정호씨의 발표를 토대로 작성되었습니다.

 


들어가기에 앞서

 

NLP 분야에는 다양한 task들이 존재하지만 그 중 가장 중추가 되는 것은 번역이다. 기존의 Machine Translation은 통계적 모델에 기반하거나, 전부 라벨된 데이터를 이용하는데 그쳤고, 성능의 한계가 명확했다. 하지만 2014년부터 Neural Net을 기계 번역에 적용하면서 그 성능이 비약적으로 향상되었다. 상기 언급한 Neral Net을 Machine Translation에 적용한 모델 중 하나인 Sequence-to-sequence에 대해 알아보자.

 


Seq2seq

기본적으로 seq2seq 모델은 아래 그림과 같이 인코더와 디코더로 구성된다. 인코더의 마지막 Hidden state가 CONTEXT Vector가 되고 이는 디코더의 Initial Hidden state가 된다.

이를 좀 더 확장해서 살펴보면, 아래 그림과 같다.

 

인코더와 디코더에는 RNN, LSTM, GRU 등 다양한 RNN 계열 모델이 들어갈 수 있는데 이 중 LSTM이 가장 성능이 좋다고 한다. 여기서 task는 I am a student라는 input data를 je suis etudiant 로 번역하는 것이다. input data는 그림에서와 같이 각각 임배딩 된 벡터로 들어가게 된다.(보통 한 단어당 300차원) 임배딩은 Word2Vec or Glove를 사용한다. 주목할만한 부분은 seq2seq 모델 train 시, 디코더에 정답 label을 input data로 넣어준다는 점이다. <sos>는 문장의 시작을 알리고 <eos>는 끝을 알린다.

 


Training Time