sequence-to-sequence

hooo·2023년 12월 28일
1

자연어처리(NLP)

목록 보기
4/8

seq2seq라고도 불리는 시퀀스 투 시퀀스 모델은 기존의 RNN을 활용하여 만든 모델이다.

특히 자연어처리 (NLP) 분야에서 많이 쓰였고 이 모델의 영향을 받아 여러 변형 모델이 생기고, 아직도 많이 사용하고 있다.

특히 seq2seq는 입력된 데이터를 translate,QA 등 여러 NLP 분야에서 사용할 수 있고, 검증된 모델이다.

때문에 오늘은 자연어처리 공부를 하면서 한 번쯤은 공부하게 될 seq2seq의 기본 구조에 대해서 알아보고자 한다.





seq2seq 개념 정리

  • 위 그림에서 보듯이 어떠한 아키텍처의 내부 구조에 의해 입력된 'i an a student'라는 문장이 'je suis etudiant'라는 문장으로 번역된 것을 볼 수 있다. 내부 구조를 정하는 여러 모댈 중 여기서는 seq2seq 보여준다.


그렇다면, seq2seq의 내부 구조를 보도록 하자

  • seq2seq는 인코더와 디코더로 구성
  • 인코더(Encoder) -> 입력 된 데이터를 순차적으로 받은 뒤 모든 정보들을 압축해서 하나의 context vector로 만드는 역할
  • 디코더(Decoder) -> context vector를 받아서 번역된 단어들을 하나식 출력



인코더와 디코더를 좀 더 자세히 보면 다음의 구조와 같다

(보통 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 셀 관점으로 알아보자

LSTM의 과정을 정리하면 아래 그림과 같다

  • t시점을 살펴보면, t시점의 임베딩 벡터와 (t-1)시점의 은닉 상태를 입력으로 받아서 t시점의 은닉 상태를 만든다
  • 결과적으로 t시점의 은닉 상태는 t-1, t-2, t-3....등 이전 시점들의 영향을 누적한 값이라고 볼 수 있다.
    이 말은 인코더 마지막 셀의 은닉 상태는 모든 단어(또는 토큰)들의 정보들 담고 있다고 할 수 있다.

  • 이후 각 셀은 dence layer를 거쳐 softmax를 통해 가장 높은 확률을 가지는 단어로 예측한다.


오늘 포스팅 끝!

그림 출처: https://wikidocs.net/24996





이것이 가장 기본적인 seq2seq의 구조이고,어떻게 구현하냐에 따라 성능과 형태가 아주 달라질 수 있기에 지금까지도 많은 변형 알고리즘이 사용되고 있다. 다음에는 변형 알고리즘 중 하나인 attention machanism에 대해 알아보려고 한다.

profile
Data Science

0개의 댓글