[딥러닝] 기계 번역 : Seq2Seq와 Attention (+ 모델 학습시켜 다국어 번역해보기)

2024. 6. 11. 04:26
반응형

 

 

이번 포스팅에서는 RNN 기반의 자연어 처리(NLP)를 위한 모델 중 번역을 위해 만들어진 Seq2Seq를 알아볼 것이다.

그리고 Seq2Seq의 RNN 기반 모델의 문제점을 완화하기 위해 고안되었으면서, Transformer의 중요한 메커니즘으로 사용되는 Attention에 대해서 살펴보려고 한다. 

마지막으로 Seq2Seq+  LSTM / Seq2Seq + Attention으로 번역기를 한번 만들어보자.

 

자연어 처리에 대한 기본적인 개념들이 사용되므로 아래의 포스팅을 참고해도 좋을 것 같다.

https://sjh9708.tistory.com/227

 

[딥러닝] NLP : 자연어 처리 기본 (+ 영화 리뷰글 긍정/부정 판단해보기)

이번 포스팅에서는 자연어 처리(NLP)에 대해서 알아보고 Transformer 출연 이전 자연어 처리에서 널리 사용되었던 지난 포스팅에서 다루어 보았던 RNN 기반 모델을 활용한 NLP 기술들에 대해서 살펴

sjh9708.tistory.com

 


LSTM의 구조

셀 상태 (Cell State) : 장기 기억

  • 추가적인 가중치 연산 없이 정보가 흐를 수 있게 하여 중요한 정보를 장기간 유지할 수 있다.
  • 시퀀스의 길이에 관계없이 정보를 계속 전달할 수 있는 경로로서 그래디언트 소실 문제를 완화한다.
  • Cell State는 이전 Cell State의 일부를 잊고(Forget Gate)와 새로운 정보를 추가하여(Input Gate)를 통해 업데이트된다. 

은닉 상태 (Hidden State) : 단기 기억

  • 현재 시점에서 LSTM의 출력으로, 다음 시점의 입력으로도 사용된다.
  • 단기적인 정보를 유지하고, Cell State와 결합하여 시퀀스의 각 단계에서 중요한 정보를 출력한다.
  • Hidden State는 Output Gate를 통해서 현재 Cell State의 정보를 기반으로 결정된다.

 

  • Forget Gate 이전 Cell memory \(C_{t-1}\)의 영향도를 결정, 즉 얼마만큼 삭제할지 결정
  • Input Gate : 입력 𝑥𝑡를 Cell memory 𝐶𝑡−1에 추가할지 말지를 결정하고 추가할 거라면 얼마만큼 추가할지 결정
  • Output Gate : 이전 Cell의 Hidden state ℎ𝑡−1, 입력  𝑥𝑡, Cell memory 𝐶𝑡−1을 취합해서 이 Cell의 Hidden state ℎ𝑡를 결정

 

https://sjh9708.tistory.com/226

 

[딥러닝] 기억하는 신경망 : RNN, 그리고 개선 모델 (LSTM, GRU)

관리자에 의해 보호되고 있는 글입니다. 콘텐츠 내용을 보려면 비밀번호를 입력해주세요.

sjh9708.tistory.com

 


전통적인 RNN 기반의 번역

 

위의 그림은 LSTM을 사용하여 "나는 학교에 갔다"라는 시퀀스를 번역하는 시뮬레이션의 예시이다. 하지만 여기에는 몇 가지 문제점들이 보인다.

 

1. 다양한 입력과 출력 시퀀스 길이 간의 매핑에 제약이 있다.

  • "나는 학교에 간다 -> I go to school"으로 매핑하는 데에 제약이 걸린다. 각각의 입력마다 출력을 뱉어내는 구조이기 때문에 3개의 입력에서 4개의 출력으로 매핑하기 힘들다.

2. 각각의 입력에 대한 출력으로 대응되기 때문에 문맥의 정보를 충분히 반영하지 못할 수 있다.

  • 위의 시뮬레이션에서는 "I school go"로 어색한 결과가 매칭되었다.
  • 단순 단방향 RNN 모델은 시퀀스를 한 방향으로만 처리하기 때문에 이전 문맥을 고려하더라도 양방향의 문맥 정보를 충분히 반영할 수 없다.

이런 문제점을 해결하기 위해서 발전 형태인 Seq2Seq 모델이 도입되었다.

 

 


Seq2Seq (Sequence-to-Sequence)

 

Seq2Seq(Sequence-to-Sequence) 모델은 주로 기계 번역에서 사용된다.

전통적인 RNN 기반 모델과 달리 가변 길이의 시퀀스를 처리할 수 있으며, 양방향의 문맥 정보를 효과적으로 활용할 수 있어 더 자연스러운 번역이 가능하다.
아래의 대략적인 구조를 살펴보면서 알아보자.

  1. 인코더(Encoder): 입력 시퀀스를 처리하고 이를 고정된 크기의 Context Vector로 변환한다.
  2. 컨텍스트 벡터(Context Vector): Encoder가 순차적으로 입력 시퀀스를 처리한 후의 마지막 Hidden State로서, 입력 시퀀스의 단어들의 의미와 순서를 요약한 정보이다. 해당 정보가 디코더가 출력을 내는 데에 참고되어 사용된다. 컨텍스트 벡터에는 입력 시퀀스에 대한 아래와 같은 정보들이 포함되어 디코더가 해석할 때 도움을 준다.
    • 의미 정보: 각 단어의 의미와 문장의 전체 의미
    • 순서 정보: 단어들이 문장에서 나오는 순서와 관계
    • 문법 정보: 문법적 구조와 관계
  3. 디코더(Decoder): 인코더에서 생성된 Context Vector를 초기 State로 사용하여 출력 시퀀스를 생성한다.

 

 


상세 구조

 

인코더 아키텍처와 디코더 아키텍처의 내부는 사실 RNN 기반 아키텍처(LSTM, GRU)가 사용한다.

"I go to school"이라는 입력 시퀀스를 번역하는 과정을 한번 묘사해 보겠다.

 

  1. 인코더: 자연어는 비정형 데이터이기 때문에 입력으로 처리하기 위한 과정을 거쳐야 한다고 이전 NLP 포스팅에서 언급했었다. 따라서 입력 문장은 단어 단위로 토큰화하고, Embedding Vector 형태로 변환하여 인코더에 순차적으로 입력으로 들어오게 된다.
    Encoder의 LSTM 시퀀스의 각 단어를 차례대로 처리하여 Cell State와 Hidden State를 업데이트한다.  
  2.  단계의 Cell State에 참고되어 사용된다. 
    초기 Decoder의 State는 Context Vector로 설정한다. 

 

 


RNN(LSTM/GRU) 기반 모델의 한계

 

1. 장기 의존성 문제(Long-term dependency problem) 

  • LSTM과 GRU의 등장으로 장기 의존성 문제가 많이 완화되었지만 구조적으로 완전히 해결할 수 없다.
  • 여전히 긴 문장들에 대해서 Gradient 소실과 폭주가 발생할 수 있다.

2. Seq2Seq

  • 입출력의 크기의 제약 완화 : LSTM의 동일한 입출력의 크기의 제약을 해결하였다.
  • 고정된 Context Vector에 소스 문장의 정보 압축 : 병목 발생 : 고정된 길이에 입력 시퀀스의 모든 정보를 담지 못하고 손실될 수 있다. 특히 긴 입력 시퀀스의 경우 정보 손실이 더 심각하다. 이는 모델의 성능 하락으로 이어진다.

이러한 한계점으로 인해 Attention 메커니즘과 같은 기술이 도입되었다.

Attention은 디코더가 인코더의 각 입력 단계에 주의를 기울일 수 있도록 하는 것으로, 더 많은 정보를 고려할 수 있도록 돕는다. 이는 2024년 기점으로 NLP에서 뛰어난 성능을 보이는 Transformer의 "Attention is all you need"의 근간이 되었다. 

 

 

 


Attention

1. 고정된 Context Vector를 사용하는 대신 Decoder에서 출력 단어를 예측하는 Time step마다 인코더에서의 전체 입력 문장을 다시 참고한다.

  • 기존 seq2seq 모델에서 하나의 고정된 Context vector(= Encoder의 마지막 Hidden state)를 사용했다.
  • 각 디코더의 Time step마다 인코더의 모든 Hidden state를 참고하도록 한다.

2. 모든 입력 토큰을 모두 동일한 비율로 참고하지 않고 예측해야 할 단어와 연관이 있는 입력을 집중(Attention)하여 참고하게 된다.

  • 연관이 있는 입력 토큰에 더 큰 가중치를 부여하는 메커니즘을 사용한다.
  • 각 디코더 타임 스텝에서 인코더의 각 출력(Hidden state)에 대해 가중치(Attention score)를 계산
  • 중요한 Hidden state에 더 많은 주의를 기울여서 context vector를 동적으로 생성한다.

 

Attention 메커니즘을 살펴보기 이전에 Attention 함수에 대해서 이해해야 한다.

Attention(Q, K, V) = Attention Value
Q = Query : t 시점의 디코더 셀에서의 은닉 상태
K = Keys : 모든 시점의 인코더 셀의 은닉 상태들
V = Values : 모든 시점의 인코더 셀의 은닉 상태들

 

이를 LSTM 기반 Encoder & Decoder 아키텍처에서 전체적인 도식으로 보면 다음과 같다.

 

 

 

1. Decoder은 현재 예측해야 하는 단어에 대해서 Encoder에 Query를 보낸다.

2. Encoder은 Query에 대해서 모든 Key와의 유사도를 각각 구한다.

3. 유사도를 Key와 매핑된 각각의 Value에 반영한다.

  • 소프트맥스 함수를 통해 나온 결과값은 I, am, a, student 단어 각각이 현재 출력 단어를 예측할 때 얼마나 도움이 되는지의 정도를 수치화한 값이다.

4. Attention Value 출력 : 유사도가 반영된 Value을 모두 취합해서 Decoder에게 반환한다.

  • 각 입력 단어가 디코더의 예측에 도움이 되는 정도가 수치화하여 측정되면 이를 하나의 정보(Attention Value)로 담아서 디코더로 전송한다.

 

이를 좀 더 깊게 살펴보도록 하자.

 

 


1. Attention Score 구하기 

현재 Decoder의 Hidden state을 Encoder의 모든 Hidden state에 대해서 계산하여 유사도 측정

 

Attention Score : 현재 디코더의 시점 t에서 단어를 예측하기 위해 인코더의 모든 Key(= 모든 Hidden State) 각각이 Decoder의 현 시점의 은닉 상태 \(s_t\)와 얼마나 유사한지를 판단하는 값이다.

 

즉 디코더가 현재 예측해야 하는 단어에 대해서 입력했던 값들과의 유사도를 측정하는 과정이다. 

 

Attention Score를 구하기 위해서는 현재 Decoder의 Hidden State를 전치시킨 Vector와, 입력에 대한 모든 Hidden State \(h_i\)에 대해서 내적시킨다.

 

왼쪽과 같은 연산을 모든 입력값(Encoder의 Hidden State)에 대해서 수행한다.

 

 


2. Attention Distribute(분포) 구하기 

Attention Value에 Softmax 적용

 

각각의 Attention Score에 Softmax 함수를 적용하여 확률 분포인 Attention 분포 얻어낸다.

분포의 각각의 값들은 Attention Weight(어텐션 가중치)라고 한다.

  • 예를 들어 I, am, a, student의 어텐션 가중치가 각각 0.1, 0.4, 0.1, 0.4이 나왔으면 현재 출력을 예측하는 데에 영향을 주는 입력은 am, student일 것이다.

 

 


3. Attention Value 구하기  

인코더 각각의 Hidden State와 Attention Weight들을 가중합

 

Attention Value : 인코더 각각의 Hidden State Attention Weight들을 가중합시킨다.

해당 Attention Value는 Encoder의 문맥을 포함하고 있기 때문에 Context Vector로도 불린다.

  • seq2seq에서는 Encoder의 마지막 Hidden State를 Context vector라고 불렀다.

4. Attention Value를 Decoder의 Hidden State에 반영

 

Attention Value \(a_t\)를 현재 디코더의 Hidden State\(s_t\)와 결합하여 하나의 벡터로 만드는 작업을 수행한다.

해당 벡터를 기반으로 Dense 신경망 및 Softmax를 거쳐서 가장 가능성이 높은 단어를 출력하게 된다.

 

 

 

 


Seq2Seq 모델을 학습시켜서 번역기 만들어보기

 

1. 이번에는 실제로 Encoder, Decoder를 만들어서 Seq2Seq 모델로 조립한 후, 프랑스어와 영어로 매칭된 사전을 학습시켜서 번역기를 만들어 보자.

2. 그리고 Seq2Seq 모델을 RNN 기반 모델 대신 Attention을 사용해서 구성해서도 해보자.

 

DL07_NLP_Seq2Seq_번역모델

 

 

 


Seq2Seq 모델 + Attention 

 

DL08_Attention_seq2seq

 

 

 

 


References : https://wikidocs.net/22893

해당 포스팅의 내용은 "상명대학교 민경하 교수님 "인공지능" 수업, 상명대학교 김승현 교수님 "딥러닝"수업을 기반으로 작성하였으며, 포스팅 자료는 해당 내용을 기반으로 재구성하여 만들어 사용하였습니다.
반응형

BELATED ARTICLES

more