[인공지능] seq2seq이란? seq2seq 개요 및 상세 구조
📌 sequence to sequence란?
seq2seq는 번역기에서 대표적으로 사용되는 모델로,
입력된 시퀀스로부터 다른 도메인의 시퀀스를 출력하는 다양한 분야에서 사용되는 모델임
📌 seq2seq 개요
인코더 - 디코더 프레임워크로 구성
(인코더) 입력 문장의 모든 단어들을 순차적으로 입력받은 후
(인코더) 모든 단어 정보들을 압축하여 하나의 벡터(context vector)로 생성
(인코더) context vector가 생성되었다면 디코더로 이를 전송
(디코더) context vector를 받아와 번역된 단어를 한 개씩 순차적으로 출력
📌 seq2seq 상세 구조
인코더 아키텍처와 디코더 아키텍처의 내부는 각 RNN 아키텍처로 구성되어있음
입력 문장을 받는 RNN 셀을 인코더, 출력 문장을 출력하는 RNN 셀을 디코더라고 함
물론, 성능 문제로 인해 바닐라 RNN이 아닌 LSTM셀 혹은 GRU셀들로 구성
[ 인코더 ]
입력 문장은 토큰화를 통해 단어로 쪼개자며 단어 토큰은 각 RNN 셀의 시점의 입력이 됨
모든 단어를 입력받은 뒤 인코더 RNN 셀의 마지막 시점의 은닉 상태를 디코더로 넘겨주는데,
이를 context vector라고 하며 디코더 RNN의 첫번째 은닉 상태에 사용
[ 디코더 ]
훈련 과정과 테스트 과정의 작동 방식이 조금 다름
훈련 과정
<sos> je suis étudiant를 입력 받았을 때,
je suis étudiant <eos>가 나와야 한다고 정답을 알려주며 훈련
테스트 과정
문장의 시작을 의미하는 심볼 <sos>가 입력되면, 다음에 등장할 확률이 높은 단어를 예측
첫번째 시점의 디코더 RNN셀에서 예측된 단어를 두번째 시점의 디코더 RNN셀에 입력하고,
해당 셀의 예측된 단어를 다음 시점의 셀에 입력하기를 <eos>가 다음 단어로 예측될 때까지 반복
[ 워드 임베딩 ]
이때, 기계는 텍스트보다 숫자 처리에 능하므로 워드 임베딩을 사용함
이에 모든 단어에 대해 임베딩 과정을 거치게 하는 임베딩 층이 존재
예를 들어 I, am, a, student라는 단어들에 대한 임베딩 벡터는 위와 같은 모습을 가짐
이때, 사이즈를 4로 하였지만 보통 실제 임베딩 벡터는 수백 개의 차원을 가질 수 있음
[ RNN 셀에서의 과정 ]
RNN 셀에 대해 확대한 이미지는 아래와 같음
하나의 RNN 셀은 각각의 시점마다 두 개의 입력을 받음
현재 시점을 t라고 할 때,
t-1에서의 은닉 상태와 t에서의 입력 벡터를 입력으로 받아내며
t에서의 은닉 상태를 만들어냄
이후 다음 시점에 해당하는 t+1의 RNN 셀의 입력으로 현재 t에서의 은닉 상태를 사용함
context vector는 인코더에서의 마지막 RNN셀의 은닉 상태값을 말하는 것이며,
이는 입력 문장의 모든 단어 토큰들의 정보를 요약해서 담고 있다고 할 수 있음
이때, 디코더의 경우 은닉 상태를 통해 출력 단어(다음 RNN셀의 입력 단어)를 만들어야 함
이에 소프트맥스 함수를 활용하여 출력 단어를 결정
➡️ 이러한 절차를 걸쳐 최종적으로 출력 단어들을 활용하여 번역된 문장 생성 가능