데이터 사이언스(Data Science)/자연어 처리 ,NLP

Sequence to Sequence (S2S) 시퀀스 투 시퀀스란?

게임이 더 좋아 2021. 1. 7. 22:42
반응형
728x170

W2V을 알고있다면 

word가 vector로 바뀌는 것이 W2V임을 알 것이다.

 

즉 S2S는 다시 말해서 Sequence를 다시 Sequence로 나오게 하는 것이다.

그렇다면 입력된 시퀀스와 출력된 시퀀스가 같냐????

그것은 아니다.(같으면 안하지)

 

2개의 RNN을 사용한 모델이다.

++입력된 시퀀스와 출력된 시퀀스의 길이가 다를 수 있는데 그것을 2개의 RNN 모델을 통한 최종 모델이 나왔다.

 

최종 목적은 시퀀스인데 다른 도메인(domain)에서도 쓸 수 있는 시퀀스를 얻어내는 것이다.

 

 

 

S2S가 쓰이는 대표적인 예는 챗봇, 기계 번역, 내용 요약 등이 있다.

"language translation, image captioning, conversational models and text summarization."

 

 

그래서 기계번역에 쓰이는 S2S를 가정하고 알아보려고 한다.

 


 

어떤 구조를 가지느냐???

 

++물론 sequence가 될 수 있는 것들은 많이 있다.

"words, letters, time series, etc" 단어들, 문자들, 시계열 등등

(왜 Sequence가 될 수 있느냐?? -> 순서가 있는 데이터니까)

 

**Black box를 거쳐서 나오는 것이다. 여기서 블랙박스란 내부를 알 수 없음을 의미한다.

 


 

이 블랙박스에는 뭐가 있는데???

밖에선 안보여도 블랙박스를 만든 사람은 뭐가 있는지 알거아냐??

 

 

사실 인코더와 디코더가 있다.

 

인코더는 입력 시퀀스에서 context라는 것을 뽑아낸다. 그리고 context를 디코더에 보낸다.

 

++ context는 입력시퀀스를 압축해서 하나의 벡터로 뽑아낸 것을 말한다.

그렇게 되면 디코더는 출력 시퀀스를 뱉어낸다.

 

S2S는 시퀀스 기반이며 인코더와 디코더를 쓰는 구조를 말한다. 

**인코더와 디코더는 많이 나오는 내용으로 RNN, LSTM, GRU 등에 쓰인다.

 


 

근데 인코더 디코더가 어떻게 context 를 뽑아내는 거지??

 

그러려면 우선 RNN에 대해서 알고가야 한다.

왜냐면 인코더와 디코더가 RNN 구조를 가지기 때문이다.

RNN, Recurrent Neural Network; 순환 신경망이란?

 

 

 

위 그림은 RNN Cell을 보여주는 것이다.

 

 

 

인코더는 순차적으로 입력을 받으면서 마지막 시퀀스에서 Final embedding을 만들어낸다. -> HS3(그림에서)

 

** HS = Hidden state

 

바로 디코더로 보낸다.

디코더는 이를 시퀀스를 예측하는데 사용하게 되는 것이다.

차례로 모든 예측이 끝나면 이전의 hidden state(은닉 상태)를 써서 다음 시퀀스를 예측한다.

 

++여기서 더 자세히 알고 싶지는 않기에 넘어가기로 한다.

 


 

?? 근데 인코더의 마지막 HS만으로 디코더의 예측을 정확하게 할 수 있을까??

만약 짧은 시퀀스가 아니라 긴 시퀀스면 더더욱 힘들어질 것 같은데??

 

-사실이다.

 

그래서  Bahdanau et al., 2014 and Luong et al., 2015"Attention" 이라는 개념을 제시했다. 

이 개념은 모델이 모든 출력 시퀀스의 단계에 대해서 입력 시퀀스의 모든 부분을 다시 살펴보는 것이다.

그렇게 함으로써 context(문맥)이 시퀀스가 길더라도 끝까지 보존할 수 있다.

 

***다시 말해서 디코더에서 출력(예측)을 할 때마다 인코더의 수많은 HS를 다시 참고해보는 것이다.

 

-> 솔직히 나도 정확하게는 뭔지 모르겠는데.. 모든 문맥 보존이 가능하게끔 만드는 것이 바로 어텐션!

 

***어텐션에서는 Query, Key, value의 개념이 사용됨

seq2seq에 적용된 어텐션의 Q, K, V에 대한 정의는

Q: t 시점의 디코더의 hidden state

K: 모든 시점의 인코더의 hidden state

V: 모든 시점의 인코더의 hidden state

 

-> 어텐션의 Q,K,V는 모델마다 달라질 수 있음

 

 


 

그래 뭐 끝까지 가지고 간다고 치자

근데 시퀀스가 길면 인코더에 마지막에 나온 HS가 정말 context를 가지고 있을지가 의문인데????

 

**장기 의존성 문제(the problem of Long-Term Dependencies) 라고도 하는 RNN의 한계점이다.

 

 

이렇게 HS 1,2,3 만들어야 솔직히 Context 아니야??

 

-> 맞아맞아.. 근데 HS를 3개나 이용해서 만들면 계산량이 늘거 같당 ㅠ

그럼 Attention을 이용한 Context vector를 만들어서 사용하게끔 해볼게!!

즉, 이 context vector가 끝까지 유지하게 하면 되겠다??

 

context vector는 앞의 HS를 기반으로 만들자!! 해서 이렇게 만듬 

CV = Context Vector

 


 

근데 모든 HS를 동일하게 취급하면 안될 것 같은데??

 

이 차는 검은색이다. 를 번역한다면

이 "" 차 "" 는 "" 검은 "" 색 "" 이다 이렇게 나누어질텐데 솔직히 중요한 부분은

"이" 가 아니라 "차" 잖아?? 가중치(weight)를 다르게 줘야할 것 같은데??

 

당연히 출력할, 예측할 단어와 연관이 있는 HS를 더 자세히 봐야겠지??

 

근데 아까 Attention 이용해서 CV를 만든다고 했지??

위처럼 인코더의 HS를 이용해서 CV를 만들고

이 벡터를 새로운 Attention Hidden Vector와 접합시키는 것이다.

아래 그림처럼 붙이는 것이다.

 

HS4가 결합되네???

-> 디코더에 나온 결과값이구나?(디코더도 RNN이니까 HS가 나옴)

 

즉, AHV는 디코더 작업과정 중에서 만들어진다는 얘기다.

 

 

 


 

 

Attention score는 어떻게 매길까?? 

score가 잘 매겨져야 예측도 잘하는거겠지???

 

디코더에서 나온 AHV를 이용하면서 Context가 유지된 입력을 받으며!

입력들의 HS를 참고해서 소프트맥스한 결과를 가중치 변화시키며 다음 디코더에 나올 것들을 예측한다!

 

결국 S2S가 되겠다.

 

 

마지막으로 크게 멀리서 본다면

 

이런식으로 보이는 것이 바로 S2S 라고 보면 되겠다.

 

 


towardsdatascience.com/day-1-2-attention-seq2seq-models-65df3f49e263

위 링크를 참조했다. 나보다 더 전문가가 설명해준다. 알아보자.

 

어텐션에 관한 논문이다.

arxiv.org/abs/1409.0473

arxiv.org/pdf/1409.0473.pdf

 

다음 링크도 참고하자.

wikidocs.net/24996

 

반응형
그리드형