딥 러닝을 이용한 자연어 처리 입문
해당 사이트를 개인 공부 목적으로 재구성한 내용입니다.
seq2seq는 크게 두 가지로 구성되어 있다.
인코더
: 입력 문장의 모든 단어들을 순차적으로 입력 받는다.
마지막에 모든 단어 정보들을 압축하여 하나의 벡터로 만든다.
이 벡터를 컨텍스트 벡터라고 한다.
즉 컨텍스트 벡터에는 입력 문장의 정보가 압축되어 들어 있다.
컨텍스트 벡터로의 압축이 끝나면 이를 디코더로 전송한다.
모든 단어 정보들이 컨텍스트 벡터에 압축되어 있다고 이야기할 수 있는 이유
= 현재 시점 t에서의 은닉 상태는 과거 시점의 동일한 RNN 셀에서의 모든 은닉 상태의 값들의 영향을 누적해서 받아온 값이라고 할 수 있다.
그렇기 때문에 앞서 우리가 언급했던 컨텍스트 벡터는 사실 인코더에서의 마지막 RNN 셀의 은닉 상태값을 말하는 것이며, 이는 입력 문장의 모든 단어 토큰들의 정보를 요약해서 담고있다고 할 수 있다.
디코더
: 컨텍스트 벡터를 받아서 번역된 단어를 한 개씩 순차적으로 출력한다.
인코더 RNN 셀
입력 문장은 단어 토큰화를 통해 단어 단위로 쪼개진다.
단어 토큰 각각은 인코더 RNN 셀의 각 시점의 입력이 된다.
물론 이때 입력되는 단어들은 텍스트 형태가 아닌 워드 임베딩을 거친 벡터 형태이다!
모든 단어를 입력받은 뒤에 인코더 RNN 셀의 마지막 시점의 은닉 상태를 디코더 RNN셀로 넘겨주는데, 이를 컨텍스트 벡터라고 한다. 이는 디코더 RNN셀의 첫번째 은닉 상태로 사용된다.
디코더 RNN 셀
세션에서 배웠듯 RNN 셀은 각각의 시점마다 두 개의 입력을 받는다.
직전 시점의 은닉상태 값
현재 시점의 입력값
디코더 RNN 셀은 초기 입력으로 다음 두 가지를 받는다.
컨텍스트 벡터
문장의 시작을 의미하는 심볼
가 입력되면 디코더는 다음에 등장할 확률이 높은 단어를 예측한다.
예측한 단어를 다음 시점의 RNN셀로 보낸다.
다음 시점의 RNN 셀은 그걸 바탕으로 또 다음 단어를 예측한다.
e.g. 위의 그림에서 첫번째 time step의 디코더 RNN 셀은 다음에 등장할 단어로 'je'를 예측했다.
첫번째 시점의 디코더 RNN 셀이 예측한 단어 je는 다음 시점의 RNN 셀의 입력으로 입력된다.
그럼 두번째 시점의 디코더 RNN 셀은 je로부터 다시 다음에 올 단어인 suis를 예측한다.
그럼 또 세번째 시점의 셀의 입력으로 suis가 들어가고...(중략)
결국 seq2seq 모델은 선택될 수 있는 모든 단어들 중 하나를 선택해야 한다. = 즉 다음에 올 단어를 예측해야함.
예측 시 소프트맥스 함수를 사용할 수 있다.
디코더에서 각 시점의 RNN 셀에서 출력 벡터가 나오면, 해당 벡터에 소프트맥스 함수를 씌운다.
소프트맥스 함수를 통해 출력 시퀀스의 각 단어별 확률값을 반환하고, 디코더는 출력 단어를 결정한다.