[부스트캠프] NLP - Sequencee to Sequence with Attention

iMaeng·2022년 7월 16일
0

네이버 부스트캠프

목록 보기
10/10

1. Seq2Seq with attention

Encoder-decoder architecture
Attention mechanism

Seq2Seq Model

RNN의 many-to-many에 해당(Machine Translation)
: encoder와 decoder로 구성.

  • token: Start of Sentence → Decoder에 첫번째로 넣어줌
  • token: End of Sentence → 해당 토큰이 나올 때까지 decode 수행

Seq2Seq Model with Attention

RNN의 구조상 hidden state의 차원은 고정이므로, 문장의 길이가 길어져도 정보를 저장할 때 한계가 있음
LSTM을 이용하더라도 멀리 있는 정보들은 손실되고 있음.

→ 이를 Attention으로 개선함: 마지막 hidden 벡터 하나만 이용하는 것이 아니라 각 step의 encoder hidden state vector을 decoder에 제공. decoder에서는 각 step 마다 필요한 encoder hidden state vector을 선별적으로 활용함.

1) encoder에서 각 단어의 hidden state vector들과 decoder의 벡터들과 내적 연산을 수행 → 유사도 추출
2) 해당 내적 기반 유사도에 softmax를 처리하여 일종의 가중치를 구함(합=1)
3) 가중치 값들을 활용하여 encoder의 각 hidden state vector를 가중평균함
4) 가중평균하여 구한 하나의 encoding vector가 Attention output(Context output)

즉, Attention module에서 input과 output은 다음과 같다.

  • input
    • decoder hidden state vector 1개
    • encoder hidden state vector set
  • output
    • encoder hidden state vector가 가중평균된 하나의 vector

각 decoder hidden state vector마다 나온 attention output으로 다음 단어를 예측해 나가면 되는데,
해당 step의 decoder hidden state vecotr와 attention output을 concat한 값을 최종 output layer의 입력으로 사용하여 매칭되는 단어를 예측한다.

cf) 초기 훈련시에는 예측값이 잘못 나오더라도 각 time step에서 decoder hidden state vector로 Groud Truth값을 input으로 넣어줌(Teacher forcing 방식) → 실제 test시에는 예측 단어를 input으로 사용함.

Different Attention Mechanism

encoder vector와 decoder vector 사이에 유사도를 구할 때, 단순 내적이 아닌 다양한 방식 사용 가능.

score(ht,hˉs)={dot:hthˉsgeneral:htWahˉsconcat:vatanh(Wa[ht;hˉs]score(h_t,\bar{h}_s)=\begin{cases} dot : {h_t}^\top \bar{h}_s \\ general:h_t^\top W_a \bar{h}_s \\ concat:v_a^\top tanh(W_a[h_t;\bar{h}_s] \end{cases}

  • dot product: 단순 내적
  • general dot product: 모든 벡터의 각 차원 마다 곱해진 값들에 따로 학습 가능한 파라미터를 사용
  • concat: decoder와 encoder을 concat한 뒤 추가적인 Fully connected layer을 구성하여 하나의 scalar값을 뽑아냄

Attention의 효과

  • NMT(Neural Machine Translation)에서의 상당한 성능 증가
  • bottleneck problem 해결(encoder의 마지막 hidden state vector만 사용하는 문제)
  • Vanishing gradient problem 해결
  • 모델의 해석 가능성(interpretablility)를 제공

2. Beam search

test time에서 성능올 올리기 위한 휴리스틱한 탐색 알고리즘.

cf) Greedy decoding
: 매 time step 마다 다음 단어 하나에 대해서만 예측 수행
→ 전체가 아닌 현재를 기준으로 가장 좋아보이는 것을 선택

cf) Exhaustive search
: x를 입력으로 y를 예측할 때, 고를 수 있는 모든 단어를 고려하는 경우. 즉 V개의 단어가 있을 때 각 time step t에서 VtV^t의 경우를 고려해야 함.

Greedy와 Exhaustive의 중간 정도의 알고리즘.

decoder의 각 time step에서 k개의 가장 가능성이 높은 단어를 지속적으로 추적하는 방식. 즉 k개 중에서 가장 확률이 높은 것을 선택.

Beam search는 global한 최적해를 찾아준다고 보장하지는 않으나 exhaustive search에 비해 훨씬 효율적으로 동작함.

decoder의 token에 대해서 Beam size(k) 개수만큼 확률이 큰 값을 연속적으로 추출해 나가는 형태이며 여러 가지의 hypothesis가 발생할 수 있음.

Stopping Criterion

beam search decoding에서는 진행 과정에서 hypothesis가 여러 개이므로 다수의 time step에서 토큰이 발생할 수 있으며 토큰이 발생했을 때 해당 hypothesis는 종료되었다고 볼 수 있음. 종료된 hypothesis는 따로 저장해두고 남은 것들을 beam search를 통해 확인해 나감.

→ 우리가 정한 특정 time step T의 길이가 되면 자동 종료하거나, 사전에 정의된 개수 n 만큼 완료된 hypothesis가 생성되면 종료.

→ 완료된 hypotheses에 대해 가장 높은 score를 구하는 과정에서 hypotheses가 길수록 점수가 낮다는 문제가 발생하며, 이를 normalize해주는 과정이 필요함. (score를 전체 단어의 수(t)로 나누어줌)

cf) greedy decoding에서는 모델이 토큰을 생성할 때까지 진행한다.


3. BLEU score

자연어 생성 품질 평가 척도

Precision and Recall

기계번역(=자연어 생성)에서는 각 target 문장의 단어 별로 softmax loss를 계산함. 즉, 정답 단어 확률값이 커지도록 학습됨. 학습 완료 후 정확도 평가는 test data에 대해 softmax loss 또는 각 단어의 분류 정확도를 계산함. 특정 time step에서 특정 GT(Ground Truth)가 나와야하는 가정이라면, 단어를 하나만 잘못 생성되어 밀리면 전체 정확도가 급격히 낮아짐. 따라서 각 단어가 아닌 전체 문장을 기반으로 정확도를 평가할 필요가 있음.

  • precision=#(correct words)length of predictionprecision=\frac{\#(correct\ words)}{length \ of \ prediction}
  • recall=#(correct wordslength of referencerecall=\frac{\#(correct\ words}{length\ of\ reference}
  • F_measure=precision×recall(precision+recall)/2F\_measure=\frac{precision\times recall}{(precision+recall)/2}

⇒ BLEU socre (BiLingual Evaluation Understudy)

1) 개별 단어 수준에서 얼마나 공통적으로 G.T.와 겹치는가
2) N-gram: 연속된 N개의 단어가 얼마나 G.T.와 일치하는가

N-gram을 계산할 때에는 precsion만 고려하여 계산을 수행. 즉, 주어진 예측 문장이 G.T.와 얼마나 겹치는가를 반영. (N은 보통 1부터 4를 사용)

BLEU=min(1,length of predictionlength of reference)(Πi=14precisioni)1/4BLEU=min(1,\frac{length\ of\ prediction}{length\ of\ reference})(\Pi_{i=1}^4precision_i)^{1/4}

brevity penalty: min(1,length of predictionlength of reference)min(1,\frac{length\ of\ prediction}{length\ of\ reference}) → G.T보다 더 짧은 문장을 생성한 경우에 penalty 부여

profile
안녕하세요! 꾸준히 성장하고자하는 엔지니어 강면구입니다.

0개의 댓글