728x90

1. Seq2Seq with attention Encoder-decoder architecture Attention mechanism

sequence to sequence의 대표적 예시는 기계 번역이 있다.

Seq2Seq Model

출처 : 네이버 부스트캠프 자료

  • 인코더와 디코더로 구성되어 있다.
  • 챗봇을 예시로 들자면, 인코더에 특정 문장이 입력으로 주어졌을 때 디코더에서 이에 알맞는 대답을 예측하여 생성 모델이다.
  • 입력을 처리하는 RNN 모델을 인코더, 출력을 처리하는 RNN 모델을 디코더라 한다.
  • 위의 두 RNN 모델은 파라미터를 공유하지 않는다.
  • RNN 모듈로는 LSTM을 사용한다.
  • 인코더의 마지막 타임 스텝의 hidden state 벡터를 디코더 RNN의 입력($h_{0}$)으로 사용한다.
  • 디코더의 입력 벡터로 처음에는 Start of Sentence라는 의미의 <SoS>를 넣어주고, 출력으로 End of Sentence라는 의미의 <EoS>가 나오면 디코딩을 멈춘다.

 

Seq2Seq Model with Attention

  1. 고정 길이 벡터인 hidden state 벡터를 통해 정보들이 전달되고, 마지막 hidden state 벡터에 그 모든 정보를 욱여넣으면 bottleneck 문제가 발생할 수 있다. -> 이때 attention을 Seq2Seq 모델의 추가 모듈로 사용하면 문제를 해결할 수 있다.
  2. LSTM 구조로도 long-term dependency 문제를 완전히 해결할 수 있는 것은 아니다.(*입력문장을 거꾸로 읽는 과정을 추가하여 문제를 해결하는 방안도 존재)
  3. 매 타임 스텝마다 발생한 hidden state 벡터 모두를 활용하자는 것이 attention 모듈의 기본적인 아이디어

  • 합이 1인 형태의, 상대적인 가중치로 이뤄진 벡터, 즉 softmax layer의 output를 어텐션 벡터라 부른다.
  • decoder RNN의 hidden state 벡터와 Attention output을 concatenate한 것이 $\hat{y_{1}}$ 이다.
  • 중간에 틀린 단어를 출력했더라도, 그 다음에 올 단어를 올바르게 넣어줄 수 있다.

4. 위에서는 디코더와 인코더의 hidden state 벡터를 내적으로 계산하여 attention score를 구했지만 다른 방법들도 있다.

attention score

 

Attention is Great!

  • 기계번역 성능 크게 높임
  • 보틀낵 문제를 해결
  • 기울기 소실 문제 해결
  •  해석 가능성 제공 - 디코더가 각 타임 스텝을 예측할 때 인코더 상의 어떤 단어에 집중했는지 알 수 있게 됨

 

2. Beam Search

Greedy decoding

  • 그때그때 바로 다음 스텝의 단어를 예측하는 디코딩
  • 단어를 한 번이라도 잘못 예측하면 다시 되돌릴 수가 없음

Exhaustive search 완전 탐색

  • 모든 경우의 시퀀스를 탐색하는 방법이다. 따라서 시간 복잡도가 매우 크다.

Beam search

  • greedy decoding와 exhaustive search의 중간
  • k개씩의 단어를 생성하여 확률적으로 더 답과 가까운 단어를 탐색한다.
  • k는 보통 5 ~ 10이다.
  • score는 모두 음수이고 그 중 가장 높은 score를 보이는 단어를 채택한다.
    • 로그함수는 단조증가함수이므로 x값이 오르면 y값도 오르는 식(그 반대도 마찬가지)이기 때문.
  • 국소적 최적값을 내는 것이기 때문에 항상 global 최적값과 일치할 순 없다.
  • 다만 완전 탐색보다 훨씬 효율적인 방법이다.
  • 그리디 디코딩은 <END> token을 만나면 문장이 끝난 것이지만 빔 서치는 각기 다른 hypotheses가 각기 다른 타임 스텝에서 <END> token을 발생시킬 수 있다.
    • 한 hypotheses가 <END> token을 생성했다면 그것은 그대로 디코딩을 끝내고 임시 공간에 저장한다.
    • 그리고 이어서 나머지 hypotheses에 대한 빔 서치 디코딩을 실행한다.

Stopping criterion

  • 사전에 정한 최대 디코딩 타임 스텝 T를 기준으로 중단
  • 완료된 hypotheses의 개수가 n 개 이상일 때(임시 공간에 얼마나 저장되는지를 통해 판단) 중단

Finishing up

  • 최종적으로 디코딩이 완료된 hypotheses 리스트를 갖게 된다. 이 중에서 가장 높은 score를 택한다. 이때 로그 버전의 joint probability값이 가장 큰 hypotheses를 최종 결과물로 삼는다.
  • 긴 시퀀스에 대해서는 낮은 score가 매겨지는 부작용이 발생하므로, 길이로 나누어 score를 정규화한다.

 

3. BLEU score

1. precision : 예측된 결과가 우리에게 노출되었을 때 우리가 실질적으로 느끼는 정확도.

2. recall : 검색했을 때 실제로 관련된 문서가 얼마나 검색되었는지.

3. f-measure(f1score) - 조화 평균 사용

* 산술 ≥ 기하 ≥ 조화

 

BLEU score

  • 개별 단어 레벨에서 얼마나 공통된 단어가 많이 나왔는지
  • 연속된 n개의 단어가 얼마나 나왔는가
  • 번역에서, precision만을 고려, recall은 x
    • 1~4 gram의 precision 고려
    • 원래의 문장과 비교하여 얼마나 빠짐없이 번역을 했는가가 중요하다기보다는
    • 이미 도출된 결과만을 보고 느끼는 정확도

출처 : 부스트캠프 수업 자료

  • 4개의 precision을 모두 곱한 후 4제곱근 ( =기하 평균)
    • 조화 평균 사용하지 않은 이유 : 작은 쪽의 값에 너무 큰 가중치를 부여하므로
  • brevity penalty
    • min(1, pred/ref) 부분
    • prediction이 짧아진다면 그에 맞춰서 precision도 낮춰주겠다는 의미
    • recall의 최댓값을 의미하기도 함
  • 예시 문제

출처 : 네이버부스트캠프 자료

 

 

 

 

 

728x90