0. 시작하기 전
다음의 글을 참고해서 작성했습니다.
1. Seq2seq
Sequence-to-sequence(* Seq2seq) 모델은 기계 번역이나 문서 요약등의 문제에서 큰 성공을 거둔 모델입니다.
이 Seq2seq 모델은 아래의 논문들을 통해 처음 소개되었습니다:
https://emnlp2014.org/papers/pdf/EMNLP2014179.pdf
Seq2seq 모델은 아이템의 나열(* 단어, 글자, 이미지들의 단편 등)을 입력으로 받아 또 다른 아이템의 나열을 출력하는 모델을 말합니다.
신경망 기계 번역의 경우에 대해서 본다면, 입력은 일련의 단어로 이루어진 sequence이며 맨 앞 단어부터 차례대로 모델에서 처리됩니다. 그리고 출력으로는 비슷한 형태의 그러나 다른 언어로의 단어 sequence가 나오게 됩니다.
(* 이때 sequence 의 길이가 달라질 수 있다는 점이 중요합니다.)
2. Seq2seq 모델
Seq2seq 모델은 하나의 encoder 와 하나의 decoder 로 이루어져 있습니다.
encoder 는 입력의 각 아이템을 처리하여 거기서 정보를 추출한 후 그것을 하나의 벡터로 만들어냅니다. 이를 흔히 context 라고 부릅니다.
입력의 모든 단어에 대한 처리가 끝난 후 encoder 는 context 를 decoder 에게 보내고 출력할 아이템이 하나씩 선택되기 시작합니다.
기계 번역의 경우에서는 context 가 하나의 벡터의 형태로 전달됩니다. encoder 와 decoder 는 둘다 Recurrent Neural Networks(* RNN)를 이용하는 경우가 많습니다.
context 는 float 으로 이루어진 하나의 벡터입니다.
이 context 벡터의 크기는 모델을 처음 설정할 때 원하는 값으로 설정할 수 있습니다. 하지만 보통 encoder RNN 의 hidden unit 의 개수로 정합니다.
실제 연구에서는 256, 512, 1024 와 같은 숫자를 이용합니다.
Seq2seq 모델 디자인을 보게 되면 하나의 RNN은 한 타임 스텝마다 두 개의 입력을 받습니다. 하나는 sequence 의 한 아이템이고 다른 하나는 그전 스텝에서의 RNN 의 hidden state 입니다.
이 두 입력들은 RNN 에 들어가기 전에 꼭 vector 로 변환 되어야 합니다. 하나의 단어를 벡터로 바꾸기 위해서는 'word embedding' 방법을 사용해야합니다.
2024.08.29 - [[Deep daiv.] NLP] - [Deep daiv.] WIL, NLP - 6. 단어 임베딩
2024.08.16 - [[Deep daiv.] 복습] - [Deep daiv.] TIL - 6. Word2Vec을 활용한 단어 임베딩
해당 과정을 시각화 하면 다음과 같이 나타낼 수 있습니다:
이와 같이 타임 스텝 #2 에서는 두 번째 단어와 첫 번째 hidden state 를 이용하여 두 번째 출력을 만듭니다.
encoder 와 decoder 는 모두 RNN 이고, RNN 은 한 번 아이템을 처리할 때마다 새로 들어온 아이템을 이용해 그의 hidden state 를 업데이트 합니다. 그렇기 때문에 hidden state 는 encoder 가 보는 입력 시퀀스 내의 모든 단어에 대한 정보를 담게 됩니다.
그러면 마지막 타임 스텝에서의 hidden state 는 모든 input vector 들에 대한 정보를 담고 있다고 볼 수 있고, 바로 그 hidden state 가 우리가 decoder 에게 넘겨주는 context 가 됩니다.
3. Attention
다양한 연구를 통해 decoder 로 넘겨주는 context 벡터가 이런 seq2seq 모델의 가장 큰 걸림돌인 것으로 밝혀졌습니다. 이렇게 하나의 고정된 벡터로 전체의 맥락을 나타내는 방법은 특히 긴 문장들을 처리하기 어렵게 만들었습니다.
이에 대한 해결 방법으로 제시된 것이 바로 'Attention' 입니다.
아래의 두 논문을 통해 Attention 개념이 제시되었습니다:
https://arxiv.org/abs/1409.0473
https://arxiv.org/abs/1508.04025
이 두 논문이 소개한 attention 메커니즘은 seq2seq 모델이 디코딩 과정에서 현재 스텝에서 가장 관련된 입력 파트에 집중할 수 있도록 해줌으로써 기계 번역의 품질을 매우 향상 시켰습니다.
타임 스텝 #7 에서 attention 메커니즘은 영어 번역을 생성하려 할 때, decoder 가 단어 “étudiant” (“학생”을 의미하는 불어)에 집중하게 합니다. 이렇게 스텝마다 관련된 부분에 더 집중할 수 있게 해주는 attention model 은 attention 이 없는 모델보다 훨씬 더 좋은 결과를 생성합니다.
기존 모델과 attention 모델은 2가지의 차이점을 가집니다:
첫 번째로 encoder 가 decoder 에 넘겨주는 데이터의 양이 attention 모델에서 훨씬 더 많다는 점입니다.
기존 seq2seq 모델에서는 그저 마지막 아이템의 hidden state 벡터를 넘겼던 반면 attention 모델에서는 모든 스텝의 hidden states 를 decoder 에게 넘겨줍니다.
두 번째로는 attention 모델의 decoder 가 출력을 생성할 때에는 하나의 추가과정이 필요합니다. decoder 는 현재 스텝에서 가장 관련있는 입력을 찾아내기 위해 다음과 같은 과정을 실행합니다:
- encoder 에서 받은 전체 hidden states를 봅니다. 각 스텝에서의 encoder hidden states 는 이전의 맥락에 대한 정보도 포함하고 있지만 그 스텝에서의 입력 단어와 가장 관련이 있습니다.
- 각 스텝의 hidden state마다 점수를 매깁니다.
- 매겨진 점수들에 softmax 를 취하고 이것은 각 타임 스텝의 hidden states 에 곱해서 더합니다. 이를 통해 높은 점수를 가진 hidden states는 더 큰 부분을 차지하고 낮은 점수를 가진 hidden states는 작은 부분을 가져가게 됩니다.
이러한 점수를 매기는 과정은 decoder 가 단어를 생성하는 매 스텝마다 반복됩니다.
(* 추가적으로 attention 의 점수를 매기는 방법은 다음과 같습니다:)
이를 시각화 하면 다음과 같습니다:
이 attention 을 이용하면 각 decoding 스텝에서 입력 문장에서 어떤 부분을 집중하고 있는지에 대해 볼 수 있습니다:
배움
seq2seq 과 attention
attention 점수 매기는 방식
'[Deep daiv.] > [Deep daiv.] NLP' 카테고리의 다른 글
[Deep daiv.] WIL, NLP - 8. 순환 신경망 실습 (6) | 2024.09.02 |
---|---|
[Deep daiv.] WIL, NLP - 6. 단어 임베딩 (1) | 2024.08.29 |
[Deep daiv.] WIL, NLP - 5. 토픽 모델링 (0) | 2024.08.22 |
[Deep daiv.] WIL, NLP - 4. 의미 연결망 분석(Sematic Network Analysis) (0) | 2024.08.21 |
[Deep daiv.] WIL, NLP - 3. 군집 분석 (0) | 2024.08.20 |