seq2seq(Sequence to Sequence)

현주·2024년 12월 26일
0
post-thumbnail

시퀀스 투 시퀀스란?

시퀀스 투 시퀀스란 입력된 시퀀스로부터 다른 도메인의 시퀀스를 출력하는 다양한 분야에서 사용되는 모델이다. 예를 들면 챗봇(Chatbot)이나 기계 번역(Machine Translation)이 있다. 외에도 내용 요약(Text Summarization)이나 STT(Speech to Text)에도 쓰일 수 있다.

이 글에서는 기계 번역에 대한 시퀀스 투 시퀀스를 설명한다.


seq2seq 내부


seq2seq 내부를 보면 인코더와 디코더 두개의 모듈로 구성되어 있다.

먼저 인코더는 입력 문장의 단어들을 순차적으로 입력받고 하나의 벡터로 만든다. 이것을 컨텍스트 벡터(context vector)라고 한다. 이후 컨텍스트 벡터를 디코더로 전달한다. 그럼 디코더는 컨텍스트 벡터를 받아서 번역된 단어를 한개씩 순서대로 출력한다.

내부를 더 자세히 들여다보자. 인코더와 디코더의 내부는 RNN 구조다. 물론 성능 문제로 바닐라 RNN이 아닌 LSTM셀이나 GRU셀로 구성된다.

입력 문장은 단어 토큰화 후에 단어 토큰이 되어 인코더 셀 각 시점의 입력이 된다.
그리고 모든 단어를 입력 받은 뒤 마지막 시점의 은닉 상태를 디코더 셀로 넘긴다.
이것을 컨텍스트 벡터라고 하고 이 컨텍스트 벡터는 디코더 셀의 첫번째 은닉 상태에 사용된다.


seq2seq 훈련 및 테스트

훈련 과정에서 디코더는 교사강요(teacher forcing)를 사용한다. 즉 미리 정답을 알려주면서 정답처럼 출력해야 된다고 훈련하는 것이다.

테스트 과정에서 디코더의 초기 입력으로 문장의 시작을 의미하는 <sos> 심볼이 들어간다. 그 후 다음에 등장할 확률이 높은 단어를 예측한다. 첫번째 시점의 디코더 셀이 예측한 단어는 다음 시점의 디코더 셀의 입력으로 사용된다.

이 과정을 문장의 끝을 의미하는 <eos> 심볼이 다음 단어로 예측될 때까지 반복한다.


임베딩 벡터

seq2seq에 사용되는 단어들은 모두 임베딩 벡터로 변환 후 사용된다.

예를 들면 I, am, a, student 이 단어들에 대한 임베딩 벡터의 예시는 위 그림과 같다.
이 그림에서는 단어의 차원이 4지만 보통 실제 임베딩 벡터는 수백개의 차원을 가질 수 있다.


인코더와 컨텍스트 벡터


하나의 RNN셀은 각각의 시점마다 두개의 입력을 받는다.
현재 시점이 t일 때 입력

  • t-1에서의 은닉 상태
  • t에서의 입력 벡터

그리고 t에서의 은닉상태를 만든다. 이 때 t에서의 은닉 상태는 바로 위에 또 다른 은닉층이나 출력층이 존재하면 위의 층으로 보내거나 필요없다면 무시할 수도 있다.
그리고 t+1 시점의 입력값으로 t에서의 은닉상태를 전달한다.

이런 구조에서 t의 은닉상태는 과거 시점의 셀에서의 모든 은닉상태값들의 영향을 누적해서 받은 값이라고 할 수 있다.

따라서 컨텍스트 벡터는 인코더의 마지막 셀의 은닉상태값이고, 이것은 입력 문장의 모든 단어 토큰들의 정보를 요약한 값이라고 할 수 있다.


디코더

디코더는 인코더 마지막 셀의 은닉 상태 값인 컨텍스트 벡터를 첫번쨰 은닉 상태의 값으로 사용한다.

디코더의 첫번쨰 셀은 은닉 상태 값(컨텍스트 벡터)과 t에서의 입력값인 <sos> 토큰으로부터 다음에 등장할 단어를 예측한다.
그리고 이 예측값은 다음 셀의 입력값이 되고, 이 입력값과 은닉 상태로부터 다음 시점의 출력 벡터를 예측한다.

디코더에서 각 시점의 다음 단어를 예측하기 위해서 소프트맥스 함수를 사용한다. 소프트맥스 함수를 통해 출력 시퀀스의 각 단어별 확률값을 반환하고 디코더는 출력 단어를 결정한다.


정리

기본적인 seq2seq에 대해 알아보았다. seq2seq는 인코더와 디코더라는 두 가지 모듈로 구성되며, 입력된 시퀀스를 처리해 다른 도메인의 시퀀스를 생성하는 데 유용하다.
이 모델은 기계 번역, 텍스트 요약, 음성 인식 등 다양한 분야에서 사용된다.
구현 방법에 따라서 더 복잡하게 구현할 수도 있다. 여기서 더 나아가면 어텐션 메커니즘이라는 방법으로 문맥을 더 잘 반영하는 컨텍스트 벡터를 구하여 매 시점마다 입력으로 사용할 수도 있다.


마무리

seq2seq는 단순한 구조에도 불구하고 다양한 언어 처리 작업에서 매우 강력한 성능을 보이는 모델이다. 물론 기본적인 seq2seq 모델은 한계가 존재하지만, 어텐션 메커니즘과 같은 추가 기술을 활용하면 더욱 향상된 결과를 얻을 수 있다.
다음글은 어텐션 메커니즘으로 돌아오겠다😺

2024년도가 정말 끝나간다.. 2025년도도 다들 화이팅!🐛


레퍼런스

profile
공부하는 블로그😎

0개의 댓글