seq2seq라고도 불리는 시퀀스 투 시퀀스 모델은 기존의 RNN을 활용하여 만든 모델이다.
특히 자연어처리 (NLP) 분야에서 많이 쓰였고 이 모델의 영향을 받아 여러 변형 모델이 생기고, 아직도 많이 사용하고 있다.
특히 seq2seq는 입력된 데이터를 translate,QA 등 여러 NLP 분야에서 사용할 수 있고, 검증된 모델이다.
때문에 오늘은 자연어처리 공부를 하면서 한 번쯤은 공부하게 될 seq2seq의 기본 구조에 대해서 알아보고자 한다.
- 위 그림에서 보듯이 어떠한 아키텍처의 내부 구조에 의해 입력된 'i an a student'라는 문장이 'je suis etudiant'라는 문장으로 번역된 것을 볼 수 있다. 내부 구조를 정하는 여러 모댈 중 여기서는 seq2seq 보여준다.
(보통 RNN보단 LSTM, GRU와 같은 RNN 알고리즘을 변형한 모델이 셀로 들어감 -> 기존의 RNN은 기울기 소실 또는 기울기 폭발 문제 발생)
인코더의 마지막 LSTM 셀에서 반환된 결과가 디코더로 넘어가는데,
이게 바로 context_vector이다.
(context_vector는 numerical)
디코더에선 이 context_vector가 첫 LSTM 셀의 입력으로 쓰인다.
start of sequence라는 의미의 sos가 들어가면 디코더는 확률 값을 갖고, 확률이 가장 높은 단어를 다음에 나올 단어로 예측한다. ( 예측 - je)
(*즉, 디코더는 예측한 단어를 다음 셀 입력에 사용!)
je라는 단어를 다음 LSTM 셀 입력으로 다시 사용하고 이후 예측된 단어를 또 다음 셀 입력으로 사용하고....사용하고......이 과정을 반복하다 eos (end of sequence)가 다음 단어로 예측 되면 멈춘다.
보통 텍스트보다 숫자로 표현된 값이 처리에 유리하기 때문에 각 단어를 embedding_vector로 생성하여 이 embedding_vector를 입력으로 사용한다.
(아래 그림 참고)
embedding_vector 만드는 여러 방법이 있음 (glove, bert, word2vec 등)
출처: https://wikidocs.net/24996
LSTM의 과정을 정리하면 아래 그림과 같다
그림 출처: https://wikidocs.net/24996
이것이 가장 기본적인 seq2seq의 구조이고,어떻게 구현하냐에 따라 성능과 형태가 아주 달라질 수 있기에 지금까지도 많은 변형 알고리즘이 사용되고 있다. 다음에는 변형 알고리즘 중 하나인 attention machanism에 대해 알아보려고 한다.