티스토리 뷰

NLP/Basics

Seq2Seq with Attention정리

JG Ahn 2020. 5. 7. 17:45

본 게시글은 NLP in Korean의 Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention) 게시글을 정리한것입니다. Seq2Seq with attention을 공부하시는 분들은 시각적인 자료로 쉽게 설명되어 있으니 한번 보시는 것을 추천드립니다.

 

Seq2Seq

최근 10년 동안의 자연어 처리 연구 중에 가장 영향력이 컸던 3가지를 꼽는 서베이에서 여러 연구자들이 꼽았던 연구가 바로 2014년에 발표됐던 sequence-to-sequence (Seq2seq) + Attention 모델입니다.

 

Sequence-to-sequence (Seq2seq) 모델은 기계 번역, 문서 요약, 그리고 이미지 캡셔닝 등의 문제에서 아주 큰 성공을 거둔 딥러닝 모델입니다

 

Seq2seq 모델은 글자, 단어, 이미지의 feature 등의 아이템 시퀀스를 입력으로 받아 또 다른 아이템의 시퀀스를 출력합니다.

- 신경망 기계 번역의 경우

  - 입력은 일련의 단어로 이루어진 sequence 이며 맨 앞 단어부터 차례대로 모델에서 처리됩니다.

  - 출력으론 비슷한 형태의 그러나 다른 언어로의 단어 sequence 가 나오게 됩니다:

 

Seq2Seq Model

Seq2seq 모델은 하나의 encoder와 하나의 decoder로 이루어져 있습니다.

  • encoder는 입력의 각 아이템을 처리하여 거기서 정보를 추출한 후 그것을 하나의 벡터(Context Vector)로 만들어냅니다
  • encoder는 context를 decoder에게 보내고 출력할 아이템이 하나씩 선택되기 시작합니다.
  • encoder와 decoder는 둘 다 recurrent neural networks (RNN)를 이용하는 경우가 많습니다

기계 번역의 경우에서는 context가 하나의 벡터의 형태로 전달됩니다. 

  • context는 float으로 이루어진 하나의 벡터입니다
  • context 벡터의 크기는 원하는 값으로 설정할 수 있습니다. 보통 encoder RNN의 hidden unit 개수로 정합니다.

Seq2seq 모델 디자인을 보게 되면 하나의 RNN 은 한 타임 스텝마다 두 개의 입력을 받습니다

  • 하나는 sequence 의 한 아이템이고 다른 하나는 그전 스텝에서의 RNN의 hidden state입니다
  • 두 입력들은 RNN에 들어가기 전에 꼭 vector로 변환되어야 합니다

하나의 단어를 벡터로 바꾸기 위해서 우리는 “word embedding” 이라는 기법을 이용합니다

  • 이 기법을 통해 단어들은 벡터 공간에 투영되고, 그 공간에서 우리는 단어 간 다양한 의미와 관련된 정보들을 알아낼 수 있습니다( king - man + woman = queen)

encoder decoder는 모두 RNN이며, RNN은 한번 아이템을 처리할 때마다 새로 들어온 아이템을 이용해 그의 hidden state를 업데이트합니다.

hidden state는 그에 따라 encoder가 보는 입력 시퀀스 내의 모든 단어에 대한 정보를 담게 됩니다.

 

 마지막 단어의 Encoder hidden state가 바로 우리가 decoder에게 넘겨주는 context입니다.

 

decoder도 그만의 hidden states를 가지고 있으며 스텝마다 업데이트를 하게 됩니다

 

Attention

연구를 통해 context 벡터가 이런 seq2seq 모델의 가장 큰 걸림돌인 것으로 밝혀졌습니다

 

기존 Seq2Seq 문제점 : 하나의 고정된 벡터로 전체의 맥락을 나타내는 방법은 특히 긴 문장들을 처리하기 어렵게 만들었습니다(문장이 길어질수록 먼저 들어왔던 Item들에 대한 정보가 희미해진다)

 

Seq2Seq 문제점에 대한 해결 방법으로 제시된 것이 바로 “Attention”입니다

  • Bahdanau et al., 2014 and Luong et al., 2015. 이 두 논문이 소개한 attention 메커니즘은 seq2seq 모델이 디코딩 과정에서 현재 스텝에서 가장 관련된 입력 파트에 집중할 수 있도록 해줌으로써 기계 번역의 품질을 매우 향상했습니다.
  •  스텝마다 관련된 부분에 더 집중할 수 있게 해주는 attention model 은 attention 이 없는 모델보다 훨씬 더 좋은 결과를 생성합니다.

 attention 모델과 기존의 seq2seq 모델은 2가지의 차이점을 가집니다:

  • 첫 번째로 encoder  decoder에게 넘겨주는 데이터의 양이 attention 모델에서 훨씬 더 많다는 점입니다
    • attention 모델에서는 모든 스텝의 hidden states decoder에게 넘겨줍니다:
  • 두 번째로는 attention 모델의 decoder가 출력을 생성할 때에는 현재 스텝에서 관련 있는 입력을 찾아내기 위해 추가 과정이 필요합니다
    1. encoder에서 받은 전체 hidden states을 봅니다 (각 스텝에서의 encoder hidden states는 이전의 맥락에 대한 정보도 포함하고 있지만 그 스텝에서의 입력 단어와 가장 관련이 있습니다)
    2. 각 스텝의 hidden state마다 점수를 매깁니다
    3. 매겨진 점수들에 softmax를 취하고 이것을 각 타임 스텝의 hidden states에 곱해서 더합니다. (이를 통해 높은 점수를 가진 hidden states는 더 큰 부분을 차지하게 되고 낮은 점수를 가진 hidden states는 작은 부분을 가져가게 됩니다.)

 

점수를 매기는 과정은 decoder가 단어를 생성하는 매 스텝마다 반복됩니다.

 

attention의 전체적인 작동과정

  1. attention 모델에서의 decoder RNN 은 <END>와 추가로 initial decoder hidden state을 입력받습니다.

  2. decoder RNN은 두 개의 입력을 가지고 새로운 hidden state벡터를 출력합니다(h4). RNN의 출력 자체는 사용되지 않고 버려집니다.

  3. Attention 과정: encoder의 hidden state 모음과 decoder의 hidden state h4 벡터를 이용하여 그 스텝에 해당하는 context 벡터 (C4)를 계산합니다.

  4. h4와 C4를 하나의 벡터로 concatenate (연결, 이어 쓰기) 합니다.

  5. 이 벡터를 feedforward 신경망 (seq2seq 모델 내에서 함께 학습되는 layer입니다)에 통과시킵니다.

  6. feedforward 신경망에서 나오는 출력은 현재 타임 스텝의 출력 단어를 나타냅니다.

  7. 이 과정을 다음 타임 스텝에서도 반복합니다.

 

 

 attention 을 이용하면 각 decoding 스텝에서 입력 문장에서 어떤 부분을 집중하고 있는지에 대해 볼 수 있습니다:

현재 모델이 아무 이유 없이 출력의 첫 번째 단어를 입력의 첫 번째 단어와 맞추는 (align) 것이 아닙니다. 

학습 과정에서 입력되는 두 개의 언어를 어떻게 맞출지는 학습이 됩니다

모델이 “European Economic Area”를 제대로 출력할 때 모델이 얼마나 잘 주의를 하고 있는지를 볼 수 있습니다

  • 영어와는 달리 불어에서는 이 단어들의 순서가 반대입니다 (“européenne économique zone”)

 

이제 구현을 할 준비가 됐다고 느껴지신다면 TensorFlow의 Neural Machine Translation (seq2seq) Tutorial를 꼭 확인해보세요.

'NLP > Basics' 카테고리의 다른 글

[Attention] Bahdanau Attention이란?  (2) 2020.07.17
Transformer 정리  (3) 2020.05.12
코퍼스(Corpus), 말뭉치란?  (0) 2020.04.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함