Patrick's 데이터 세상

seq2seq(Sequence-to-Sequence) 본문

Deep Learning/NLP 이론

seq2seq(Sequence-to-Sequence)

patrick610 2023. 7. 22. 19:47
반응형
SMALL

 

 

seq2seq

 

seq2seq는 두 개로 구성된 인코더, 디코더 아키텍처로 구성됩니다.

인코더는 입력 문장의 모든 단어들을 순차적으로 입력받은 뒤에 마지막에 모든 단어 정보를 압축해 하나의 벡터로 만드는데 이것을 Context Vector라고 합니다.

입력 문장의 정보가 하나의 컨텍스트 벡터로 모두 압축되면 인코더는 컨텍스트 벡터를 디코더로 전송합니다.

디코더는 컨텍스트 벡터를 받아서 번역된 단어를 한 개씩 순차적으로 출력합니다.

 

 

인코더 아키텍처와 디코더 아키텍처의 내부는 사실 두 개의 RNN 아키텍처입니다.

입력 문장을 받는 RNN 셀을 인코더라고 하고, 출력 문장을 출력하는 RNN 셀을 디코더라고 합니다.

물론, 성능 문제로 인해 실제로는 바닐라 RNN이 아니라 LSTM(장단기메모리) 셀 또는 GRU 셀들로 구성됩니다.

컨텍스트 벡터는 디코더 RNN 셀의 첫 번째 은닉 상태로 사용됩니다.

 

 

→ 테스트 과정

디코더는 초기 입력으로 문장의 시작을 의미하는 심볼 <sos>가 들어갑니다.

디코더는 <sos>가 입력되면, 다음에 등장할 확률이 높은 단어를 예측합니다.

첫 번째 시점(time step)의 디코더 RNN 셀은 다음에 등장할 단어로 je를 예측하였습니다.

첫번째 시점의 디코더 RNN 셀은 예측된 단어 je를 다음 시점의 RNN 셀의 입력으로 입력합니다.

그리고 두 번째 시점의 디코더 RNN 셀은 입력된 단어 je로부터 다시 다음에 올 단어인 suis를 예측하고, 또다시 이것을 다음 시점의 RNN 셀의 입력으로 보냅니다.

디코더는 이런 식으로 기본적으로 다음에 올 단어를 예측하고, 그 예측한 단어를 다음 시점의 RNN 셀의 입력으로 넣는 행위를 반복합니다. 이 행위는 문장의 끝을 의미하는 심볼인 <eos>가 다음 단어로 예측될 때까지 반복됩니다. 

 

한계점

 

Context Vector가 고정된 크기이므로 문장에 다양한 크기에 대해 병목현상의 원인이 됩니다.

 

개선으로 디코더의 각 RNN 셀에서 매번 Context Vector를 참고하게 해서 손실을 줄일 수는 있지만 여전히 병목현상이 발생됩니다.

 

 

Task

번역기 모델에서 대표적으로 사용합니다.

 


출처

 

https://arxiv.org/abs/1409.3215

 

wikidocs.net/24996

 

14-01 시퀀스-투-시퀀스(Sequence-to-Sequence, seq2seq)

이번 실습은 케라스 함수형 API에 대한 이해가 필요합니다. 함수형 API(functional API, https://wikidocs.net/38861 )에 대해서 우선 숙지 후…

wikidocs.net

 

반응형
LIST

'Deep Learning > NLP 이론' 카테고리의 다른 글

Transformer - Attention is all you need  (0) 2023.07.25
Attention Mechanism  (0) 2023.07.22
LSTM(Long Short-Term Memory)  (0) 2022.08.22
RNN(Recurrent Neural Network)  (0) 2022.08.21
Subword Tokenizer  (0) 2021.04.22
Comments