[CS224N] Lecture 8 - Translation, Seq2Seq, Attention

김재희·2021년 5월 10일
0

CS224N

목록 보기
8/15

Pre-Neural Machine Translation

  • 기계번역(Machine Translation): 특정 언어의 문장을 다른 언어의 문장으로 번역하는 태스크.

1. Rule Based(1950s)

최초의 시도는 1950년대 초반 러시아어를 영어로 번역하여 냉전에서 우위를 점하려던 영국에서 시작되었습니다. 이때의 시스템은 원시적으로 구성되었습니다. 단순한 규칙 기반 방법론으로, 러시아어-영어 사전을 구축하고, 이를 이용해 러시아어에 매칭되는 영어 단어를 찾는 방식이었습니다. 이후에도 문법을 중심으로 번역하는 규칙 기반 방법론이 개발되었지만, 어마무시한 비용이 투입되어야 했습니다.

2. Statistical Machine Translation(1990s ~ 2010s)

딥러닝이 발전하기 전의 기계번역은 주로 통계기반 기계 번역이 주를 이루었습니다. 프랑스어 -> 영어 번역을 예시로 들어봅시다.
우리가 모델을 통해 달성하고자 하는 것을 영어 문장(y), 프랑스어 문장(x)를 이용해 식으로 표현해보면 다음과 같습니다.

argmaxyP(yx)argmax_yP(y \mid x)

즉, 프랑스어 문장이 주어지면, 이에 가장 적절하고 그럴듯한 영어 문장 y를 찾는 것입니다. 그리고 위의 식을 베이지안 룰을 이용해 풀어보면 다음과 같이 바뀌게 됩니다.

argmaxyP(xy)P(y)argmax_yP(x \mid y)P(y)

위 식은 두 항으로 이루어져 있습니다.

  • P(xy)P(x \mid y)(Translation Model): 이 항은 영어 문장이 주어졌을 때, 프랑스어 문장의 확률분포를 생성하는 번역 모델을 이루는 항입니다. 이때, y는 기존의 영어 문장에 비해 짧은 단위로 구나 절, 혹은 단어로 되어 있습니다. 번역 모델은 동일한 뜻의 영어와 프랑스어 문장이 짝을 이루고 있는 병렬 말뭉치(pharallel data)를 통해 학습시킬 수 있습니다.
  • P(y)P(y)(Language Model): 이 부분은 우리가 이전의 강의들에서 배웠던 Langage Model을 통해 표현되는 항입니다. 즉, 현재 y의 문장이 얼마나 영어 문장으로서 자연스러운지 확률분포를 통해 표현하게 됩니다. Language Model은 이전에도 배웠듯이, 단일 언어 데이터로 학습시킬 수 있습니다.

우리가 이전에 Language Model을 배웠으니 P(y)P(y) 항은 어떻게 학습시킬 수 있는지 알고 있습니다. 그런데 어떻게 P(xy)P(x \mid y) 항을 학습시킬 수 있을까요?

2-1. Learning for SMT

번역 모델을 학습시키기 위해선 병렬 데이터가 필요하다고 했습니다. 병렬 말뭉치는 사람이 직접 작성한 동일 내용에 대한 두 언어의 문장 대 문장 혹은 문단 대 문단의 데이터입니다.

그리고 이를 이용할 때, 한가지 개념이 더 추가됩니다. "정렬"입니다. 정렬은 단어 단위의 두 언어 간의 동치 관계를 의미합니다.
정렬을 식에 삽입하면, 다음과 같습니다.

P(x,ay)P(x, a \mid y): y 문장이 주어졌을 때, x가 a의 정렬로 되어 있을 확률을 의미합니다.

2-1-1. Alignment

프랑스어 -> 영어 예시로 돌아오자면, 영어 문장과 프랑스어 단어는 위와 같이 거의 1대 1 대응 관계를 보이고 있습니다. 그래서 오른쪽 표에서 한칸씩 아래로 내려가며 정렬된 것을 알 수 있습니다. 여기서 프랑스어 Le는 영어에 대응되는 단어가 없습니다. 이를 가짜(spurious) 단어라고 합니다.

하지만 모든 번역이 이렇게 1대 1 대응관계를 통해 이루어지지 않습니다.

Many to One


위에서 여러 영어 단어가 하나의 프랑스어 단어에 대응되는 모습을 보이고 있습니다. 이러한 경우를 many-to-one이라고 합니다.

One to Many


반대로 하나의 프랑스어가 여러 영단어의 뜻을 내포하고 있을 때도 있습니다. entarte라는 단어는 "파이로 어떤 사람을 때리다"라는 뜻이라고 합니다. 하지만 이를 뜻하는 영어 단어는 없고, "hit with a pie"라는 구로 대체되어야 합니다. 이럴 때, one에 해당하는 단어를 번역 시 여러 단어로 나눠진다는 의미에서 fertile word라고 합니다.

Many-to-Many


영어의 여러 단어가 프랑스어의 여러 단어와 대응되는 경우도 있습니다.

이처럼 번역은 단순히 단어끼리의 매칭으로 해결할 수 없습니다. 단어의 위치와 다른 단어와의 관계도 살펴야 합니다. 조금 상상해봐도 쉽게 모델이 학습할 수 있지 않아 보입니다. 어떻게 이러한 정렬 관계를 학습시키는 걸까요?

다시 식으로 돌아오면

우리가 프랑스어에서 영어로 번역할 때, 영어의 어떠한 단어들이 등장해야 그럴듯한 번역문이 될지 계산하는 것이 위의 식입니다.

가장 단순한 방법은, 모든 경우의 수를 모두 계산하는 것입니다. 100만개의 영어 단어가 있다면, 매 시점마다 100만개의 단어가 나타날 조합을 계산합니다. 하지만 이렇게 된다면 정말정말 계산량이 많아지고 비효율적일 수 밖에 없습니다.

다른 방법으론 휴리스틱 알고리즘을 사용하는 것이 있습니다. 시점마다 확률이 너무 낮은 단어들은 제외하고 경우의 수를 계산하게 됩니다. 그리고 이를 decoding이라고 합니다.

decoding은 나중에 좀 더 자세히 설명하기로 하고, 단순하게 설명하자면 다음과 같습니다.

독일어 -> 영어 번역 태스크에서 위와 같이 번역되어야 할때,

각 독일어 단어는 위와 같은 영어 단어로 번역될 수 있습니다. 가장 오른쪽의 hause는 house, home, chamber, at home으로 번역 될 수 있습니다. 이 중에, 가장 확률이 높은 house를 선택합니다. 그렇다면, 이제 house 외에 home, chamber, at home으로 번역될 가능성은 계산하지 않습니다. 트리구조로 생각하면, house 외의 노드를 prunning하는 것으로 볼 수 있습니다. 그리고 nach와 house의 뜻으로 사용될 경우의 hause를 고려하면 home이 가장 확률이 높으므로 나머지 영어 단어 후보들은 계산에서 제외합니다.

이 방식을 반복하여 사용하게 됩니다.

2-1-2. Summary

통계기반 기계 번역을 요약하면 다음과 같습니다.

  • 2010년대까지 기계 번역에서 주류를 이루던 연구 분야였습니다.
  • 가장 좋은 성능을 보였지만 너무 복잡한 구조를 가지고 있었습니다.
  • 수많은 요소들이 사용되었습니다.
  • 사람이 직접 feature engineering을 하여 자원이 많이 투입될 수 밖에 없었습니다.
  • 유지 보수에 있어서도 각각의 언어 짝(영어-프랑스어, 영어-독일어, 한국어-영어)마다 다르게 적용되기 때문에 많은 자원이 투입될 수 밖에 없었습니다.

Nerual Machine Translation

신경망 기계 번역이 2014년 등장하게 됩니다. 이는 하나의 신경망 네트워크를 이용해 번역 작업을 수행해보려는 시도였습니다. 이때 사용했던 모델은 seq2seq으로 불립니다. seq2seq은 입력된 시퀀스와 다른 도메인의 시퀀스를 출력하는 태스크에 사용되는 모델입니다. 자연어 처리에선 문장을 입력받아 다른 문장을 생성하는 태스크라고 볼 수 있을 것 같습니다.

당시 사용된 모델 구조는 인코더 단의 rnn 하나, 디코더 단의 rnn 하나로 아주 단순한 모델이었습니다.

1. Model Architecture

모델 구조는 다음과 같습니다. 프랑스어 -> 영어 번역을 예시로 하겠습니다.

1-1. Encoder

왼쪽의 인코더 단에는 번역에 사용될 프랑스어 문장이 입력됩니다. 이때, 각 단어의 임베딩 벡터가 각 시점마다 입력값으로 사용되게 됩니다. 이는 bidrectional rnn, LSTM, GRU등 rnn류의 모델이면 무엇이든 사용할 수 있습니다. 마지막 시점의 hidden state는 프랑스어 문장의 정보를 담고 있는 벡터가 되어 디코더 단의 hidden state로 정보를 전달하게 됩니다.

1-2. Decoder

오른쪽의 디코더 단의 첫번째 입력값은 문장의 시작을 의미하는 start 토큰입니다. 인코더의 마지막 hidden state에서 넘어온 프랑스어 정보와 문장의 시작을 의미하는 입력값을 받아 디코더는 첫번째 번역 단어인 he를 내놓게 됩니다. 그리고 번역 태스크는 문장 생성 태스크이므로, 다음에 올 단어를 예측하기 위해, 첫번째 시점의 예측값인 he가 두번째 시점의 입력값으로 사용되게 됩니다. 이런 식으로 이전 시점의 예측값이 현재 시점의 입력값으로 반복하여 사용되게 됩니다. 만약 디코더가 문장의 마지막을 의미하는 end 토큰을 출력한다면, 예측은 끝나게 됩니다.

이를 식으로 표현하면 위와 같이 표현할 수 있습니다. 번역하고자 하는 문장이 인코딩된 벡터 x가 주어졌을 때 우리가 생성하고자 하는 y y의 확률분포는 x와 이전 시점까지 생성된 y1,...,yt1y_1, ..., y_{t-1}가 주어졌을 때 해당 시점의 토큰 yty_t 확률의 곱입니다.
이는 디코더가 인코딩이라는 조건을 가지고 있는 언어 모델임을 의미합니다. 즉, 디코더는 인코딩을 조건으로 가지는 조건부 언어모델입니다.

위의 내용은 예측 과정을 보여주고 있습니다. NMT의 훈련 과정은 예측과 다른 과정으로 진행됩니다. 이는 나중에 보여드리도록 하겠습니다.

Application
seq2seq은 단순히 기계 번역 태스크에만 사용되지 않습니다. 다음 태스크를 포함하여 매우 다양한 분야에서 사용되고 있습니다.

  • 요약 : 긴 텍스트를 입력받아 내용은 유지하되 길이가 짧은 텍스트를 생성하는 태스크입니다.
  • 대화 : 맥락을 파악하여 입력받은 말과 자연스레 이어지는 말을 생성하는 태스크입니다.
  • 파싱 : 이전에 배웠던 파싱입니다. 파싱을 하나의 시퀀스로 보고 생성하게 됩니다.
  • 코드 생성 : 우리가 자연어로 원하는 과정을 입력하면, 자동으로 코드를 만들어주는 태스크입니다.

1-3. Conditional Language Model

위에서 디코더는 인코더를 조건으로 가지는 조건부 언어 모델이라고 했습니다. 이를 좀더 생각해보면 다음과 같습니다.

  • 디코더는 이전에 생성한 단어를 기반으로 다음에 나타날 단어 분포를 생성하는 언어 모델입니다.
  • 디코더는 시작 언어의 인코딩을 조건으로 단어를 생성하는 조건부 모델입니다.

2. Training a NMT system

위에서 본 예시는 NMT의 예측 과정이라고 했습니다. 그렇다면 어떻게 학습을 시킬까요?

2-1. Forward Propagation

모델 훈련의 순전파 시 예측과 다른 점은, 디코더에도 고정된 입력값이 있다는 것입니다. 예측에서는 직전 시점의 예측 단어가 현재 시점의 입력값으로 사용되었습니다. 하지만, 훈련 과정에선 정확하게 각 시점의 단어를 알고 있어야 학습이 가능해집니다. 랜덤한 초기 파라미터에서 제대로 된 단어를 예측할 수 없기 때문입니다. 그래서 위와 같이 start 토큰부터 pie에 이르기까지 본래 병렬 말뭉치에 존재하는 이전 시점의 영어 단어를 입력값으로 넣어주게 됩니다. 또한, 출력의 마지막 단어는 무조건 end 토큰이어야 합니다.

2-2. Backward Propagation

역전파 과정은 기존의 언어 모델과 비슷합니다. 각 시점의 예측값과 실제값 사이의 손실함수를 계산하고, 이를 평균내어 최종 손실값으로 사용합니다. 이를 인코더 단까지 역전파하여 파라미터를 업데이트 하게 됩니다.

이와 같이 손실값부터 모델의 입력값까지 한번에 역전파가 일어나는 방식을 end-to-end 방식이라고 합니다. end-to-end는 우리가 원하는 태스크의 입력부터 출력까지 하나의 모델로 구성하는 것을 의미합니다. end-to-end 방식을 이용하게 되면, 인코더와 디코더가 해당 태스크에 적합하도록 학습시킬 수 있다는 장점이 있습니다. 다만, 우리가 구축할 인코더 혹은 디코더보다 기존에 사전학습된 언어 모델이 더욱 좋다면 이를 모델에 붙이고 freeze하거나 fine-tuning하여 사용할 수도 있습니다.

3. Generation

모델 구조와 학습 방법까지 살펴봤습니다. 이제 실제로 모델이 번역하는 과정을 살펴보도록 하겠습니다. 이때, 인코더 단에서 발생하는 것은 RNN류의 모델이 hidden state를 전달하는 과정과 다를 것이 없습니다. 그래서 디코더 단에서 발생하는 일에 집중해보도록 하겠습니다.

3-1. Greedy Decoding

이전에 디코더를 설명하면서 이전 시점의 예측 단어가 현재 시점의 입력값으로 사용된다고 이야기 했습니다. 이는 아직 전체 문장의 확률분포를 알고 있지 않음에도 이전 시점에 가장 확률이 높은 단어가 최적의 선택지라고 가정하고 다음 단어를 예측하는 과정입니다. 탐욕 알고리즘이 디코더에 적용된 것이라고 볼 수 있을 것 같습니다. 그래서 이를 greedy decoding이라고 부릅니다.

I'd like to see the world on the giant's shoulder

난 거인의

난 거인의 어깨
난 거인의 어깨 위에 있는

난 거인의 어깨 위에 있는 세상이다.

하지만 탐욕 알고리즘의 한계로 인해 greedy decoding은 문제점을 가지고 있습니다. 이전에 예측한 단어가 틀렸을 경우 이후의 예측은 전혀 엉뚱한 결과물을 내게 됩니다. 위의 문장은 "난 거인의 어깨 위에서 세상을 보고 싶다"라고 번역되어야 합니다. 하지만 "어깨 위에서" 대신에 "어깨 위에 있는"이라고 단어를 예측하여 이후 문장이 어색하게 되었습니다.

특히 문장 생성은 이전 시점의 정보만 이용해서 생성되기 때문에 한가지 문장의 경우만 생성하게 되면 의미가 이상해질 위험에 있습니다. 여러 후보 문장을 생성한 다음, 후보 문장들의 완성도를 확인하고 최적의 문장을 선택할 필요가 있습니다.

디코딩은 위와 같은 식으로 표현될 수 있다고 이야기했습니다. greedy decoding의 문제점을 해결하기 위해서는 정해진 시퀀스 길이 T에 대해 각 시점마다 모든 토큰 조합의 확률을 계산하고 이 중 최대값을 가지는 토큰 조합을 최종 생성 문장으로 선택해야 합니다. 하지만 이는 시간복잡도가 너무 커지게 되어 비효율적입니다. 번역 시 인간이 일부 단어 조합만 고려하여 번역한다는 것을 생각하면 더욱 그렇습니다.

3-2. Beam Search Decoding

그래서 beam search decoding은 beam search algorighm을 이용하여 greedy decoding을 개선하면서 적절한 문장 후보를 고려하고자 고안되었습니다.
beam search decoding은 각 시점마다 가장 그럴듯한 k개의 문장 후보를 탐색합니다. 이 떄 k를 beam size라고 합니다. 각 문장 후보(hypothesis)는 위의 디코딩 식을 이용한 스코어를 가지게 됩니다.

t 시점까지 생성된 문장 후보 y의 스코어는 Language 모델을 이용해 계산한 조건부 확률의 로그 값입니다. 로그 값이기 때문에 그럴듯한 문장일 수록 높은 값(0에 가까운 값)을 가지게 됩니다.

3-2-1. Process

Beam Search Decoding의 과정을 설명하면 다음과 같습니다. 이때 k = 2입니다.

우선 시작 토큰과 인코딩된 hidden state만 이용하여 첫번째 시점의 두가지 가설을 생성합니다. 그리고 이 가설의 스코어를 계산합니다. 이때 he는 -0.7, I는 -0.9로 he가 좀 더 그럴듯해 보입니다.



앞서 만든 두 가지 가설에 각각 두 개씩 토큰을 예측하고 스코어를 계산합니다. 이때는 현재 생성된 토큰의 스코어와 이전에 생성된 토큰의 스코어를 더하여 사용하게 됩니다. 그리고 총 네개의 가설 중 k개의 가설만 유지해야 하기 때문에 스코어가 높은 2개의 가설만 남깁니다. 위의 사진에서는 he hit과 I was가 -1.7과 -1.6으로 가설로 살아남았습니다.

위의 과정을 다시 반복해 두 가지 가설에 다시 두 개씩 토큰을 예측하고 스코어를 계산합니다.






모든 생성이 종료되면 마지막 시점에 가장 스코어가 큰 노드의 경로를 다시 거슬러 올라가면서 문장을 생성하게 됩니다.

greedy encoding에선 모델이 end 토큰을 생성하면 문장 생성을 멈췄습니다. 하지만 beam search decoding에선 하나의 가설이 end 토큰을 생성하더라도 다른 가설이 계속 탐색을 이어가게 되기 때문에 문장 생성이 종료되지 않습니다. 그렇다면 어떻게 문장 생성을 멈추게 할까요? 다음과 같은 두가지 방법이 있습니다.

  • 최대 문장 길이 T를 설정하여 T만큼의 깊이만 탐색하고 문장을 선택합니다.
  • n개의 문장이 end 토큰을 생성하면 생성을 종료하고 end 토큰을 생성한 문장 중에 최종 문장을 선택합니다.

하지만 이렇게 할 경우 문제가 발생합니다. end 토큰이 생성된 시점이 다르기 때문에 각 가설의 길이는 모두 다를 수 밖에 없습니다. 그리고 스코어는 계속해서 더해지기 때문에 문장의 길이가 길어질수록 스코어가 작아질 수 밖에 없습니다. 이로인해 문장의 길이가 짧은 문장이 자주 선택되는 편향이 발생하게 됩니다. 이는 문장이 그럴듯한 정도와 관계 없이 문장의 길이로 인해 발생하는 편향입니다.

이를 해결하는 방법은 간단합니다. 스코어를 문장의 길이로 나눠주어 nomalize하면 됩니다. 이를 이용하여 최종적인 스코어 식은 다음과 같습니다.

4. Advantages and Disadvantages

NMT가 SMT에 비해 가지는 장점과 단점은 무엇일까요?
장점은 다음과 같습니다.

  • 성능이 훨씬 좋다. : NMT는 SMT에 비해 훨씬 자연스러운 문장을 만들어 줍니다. 이는 RNN을 이용하기 때문에 문맥을 고려하고, 단어가 조금 달라진다하더라도 의미적으로 비슷한 문장이라면 비슷하게 해석할 수 있기 때문입니다.
  • 관리하기 쉽다. : end-to-end 모델의 특징은 관리가 편리하다는 점입니다. 데이터를 꾸리고 모델을 학습시키면 feature engineering이나 번역을 위한 사소한 일에 투입되는 자원을 줄일 수 있습니다.

단점은 다음과 같습니다.

  • 블랙박스 모델이다. : 모든 단점은 블랙박스 모델이라는 점에 기인합니다. 어떠한 원리로 이렇게 번역했는지 알 수 없기 때문에 문제가 발생해도 수정하기 쉽지 않고, 사회적 물의를 일으킬 수 있는 혐오 표현이나 욕설 등의 번역을 관리하는 것이 쉽지 않습니다.

4. BLEU(Bilingual Evaluation Understudy Score)

번역 태스크를 평가할 수 있는 지표로는 BLEU가 있습니다. BLEU는 인간이 번역한 문장과 기계 번역의 문장이 얼마나 유사한지 평가하는 지표입니다. BLEU는 높을수록 성능이 좋습니다. BLEU는 동일한 문장에 대해 여러 사람이 번역한 문장을 이용해 평가할 수 있습니다. 이때 모델이 생성한 문장을 candidate/ca, 사람이 번역한 문장을 reference/ref라고 하겠습니다. BLEU의 계산 방식을 차례대로 살펴보도록 하겠습니다.

4-1. n-gram precision

우선 가장 간단하게는 cadidate에 등장한 단어들이 reference에도 등장했다면, candidate은 정확히 예측했다고 볼 수 있을 것입니다.
n-gram을 이용하여 candidate의 단어가 reference에 얼마나 등장했는지 측정하는 방식입니다.

ngramprecision=ref  있는  ca  ngram의수ca  ngram  n-gram precision = {ref에\;있는\;ca의\;n-gram의 수 \over ca의\;n-gram의\;수}

  • candidate : I am a boy who likes summer
  • reference 1 : I am just a boy who love sunny days
  • reference 2 : I like hot days

위와 같은 candidate과 reference가 있을 때, cadidate의 단어들이 reference에서 등장했다면 이는 옳바른 번역이라고 볼 수 있을 것 입니다. unigram의 경우 summer를 제외한 모든 단어가 reference에 등장했으므로 다음과 같이 계산될 수 있습니다.
unigram  precision=67unigram\;precision = {6 \over 7}

하지만 이렇게 계산하면 다음과 같은 문제가 발생합니다.

  • candidate : am am am am am am am
  • reference 1 : I am just a boy who love sunny days

candidate은 말도 안되는 문장이지만 unigram precision은 referece에 am가 등장했으므로 1이 나와 버립니다. 이를 해결하기 위해서는 candidate과 reference에서 중복을 고려하여 계산할 필요가 있습니다.

4-2. modified n-gram precision

이를 위해 이전 n-gram precision 식에서 분자를 수정해야 합니다. 이때 각 n-gram에 대해 다음과 같은 작업을 수행한다고 합니다.

countclip=min(ngram  ca에등장한  횟수,ngram  ref  등장한  횟수)count_{clip} = min(n-gram이\;ca에 등장한\;횟수, n-gram이\; ref에 \;등장한\;횟수)

modified  ngramprecision=cacountclipcacountmodified \; n-gram precision = {\sum_{ca} count_{clip} \over \sum_{ca} count}

이를 통해 uni-gram이 ca나 ref에 중복하여 등장하여도 이를 어느정도 완화할 수 있게 됩니다. ref에 자주 등장하지 않은 n-gram인데 ca에 자주 등장했다면, 이는 잘못 번역한 것이라 볼 수 있기 때문에 precision을 낮게 주어야 합니다. 위의 식은 이를 수행하고 있습니다.

하지만 여기서도 문제가 생깁니다.

ref : I don't know how to make BLEU equation.
ca1 : I don't equation how make BLEU to know.
ca2 : make BLEU equation I don't tell how to.

ca1과 ca2 모두 ref의 단어의 순서만 뒤바꾸어 놓았습니다. 이때 n이 얼마이냐에 따라 두 ca에 대한 평가가 달라지게 됩니다.

  • unigram : ca1 - 1 / ca2 - 78{7 \over 8}
  • bi-gram : ca1 - 27{2 \over 7} ca2 - 47{4 \over 7}

즉, n의 크기에 따라 같은 문장이라도 점수가 판이하게 달라질 수 있습니다. 이를 고려해서 BLEU가 만들어집니다.

4-3. BLEU

BLEU=exp(n=1N(wnlogpn))BLEU = exp(\sum_{n = 1}^{N} (w_nlogp_n))

wnw_n: n-gram에 대한 가중치
pnp_n: modified n-gam precision

위의 식을 통해 다양한 n에 대한 n-gram precision을 종합할 수 있습니다. 하지만 여전히 문제는 있습니다. 위와 같은 경우 만약 ca의 문장이 짧다면 점수가 높게 나오는 경향이 있기 때문입니다. precision에서 분모가 ca의 count이기 때문입니다. 문장이 짧을 수록 패널티를 주는 항이 필요합니다.

4-4. Brevity Penalty

BP={1  if c  re(1r/c)  if c  rBP = \begin{cases} 1\; & \text{if c $\geq$ r}\\ e^{(1-r/c)} \; & \text{if c $\le$ r} \end{cases}

c : cadidate의 길이
r : cadidate과 길이가 가장 비슷한 reference의 길이

BLEU=BP×exp(n=1N(wnlogpn))BLEU = BP \times exp(\sum_{n = 1}^{N} (w_nlogp_n))
ca가 ref보다 길이가 길다면 정상적으로 번역된 길이일 수도 있기 때문에 패널티를 주지 않습니다. 하지만 ca가 길이가 비슷한 ref보다 짧다면 번역이 미완성된 상태일 수 있기 때문에 패널티를 주어 BLEU 점수를 낮춥니다.

4-5. Advantages & Disadvantages

BLEU는 계산 속도도 빠르고 비교적 성능을 잘 대표하는 지표로 사용되고 있습니다. 특히 BLEU는 병렬 데이터를 정렬하는데 사용될 수 있어 활용성이 높습니다.
하지만 실제 번역은 동일한 단어를 사용하지 않아도 좋은 번역이 될 수 있습니다. 병렬 코퍼스의 경우 번역의 표준화 등을 이유로 직역을 기본으로 합니다. 하지만 초월번역 등 우수한 번역의 경우 단순히 단어 단위로 번역하기 보다 그 맥락을 파악하여 전혀 엉뚱한 단어가 등장할 수도 있습니다. BLEU는 이러한 경우 그 성능을 제대로 측정할 수 없다는 단점을 가지고 있습니다.

5. Conclusion

RNN을 이용한 NMT는 기계 번역 분야에서 엄청난 발전을 이뤄냈습니다. SMT가 수많은 feature engineering이 필요하여 장시간 축적된 기술임에도 NMT가 등장한지 2년 만에 SMT의 성능을 넘어섰습니다.

그럼에도 불구하고 NMT는 여전히 문제점이 많았습니다.

  • Out of Vocabulary : 만약 학습 데이터에 존재하지 않는 단어가 입력될 경우 이를 적절히 처리하지 못했습니다.

  • Domain mismatch : 학습 데이터가 위키피디아, 논문, 신문 기사 등 문어체가 주를 이룰 경우 문어체 번역에 애를 먹었습니다.

  • Context : NMT는 맥락을 저장하고 이를 활용하는데 애를 먹습니다. 기사 전문이나 책을 번역하려고 한다면 정말 긴 시간의 정보가 문장 단위를 넘어서 전달되어야 하지만 그렇지 못했습니다.

  • Low Resource Language pairs : NMT 학습을 위해선 방대한 병렬 코퍼스가 필요하지만 이를 구축하는 것은 쉬운 일이 아닙니다.

  • Common Sense is not trained well

    프린터가 종이를 먹다 라는 표현은 프린터가 종이에 막혔을 경우에 사용되지만, 이러한 관용적인 표현은 문장에 드러나 있지 않습니다. 사회적 관습이나 활용을 학습해야 하지만 NMT는 이러한 학습이 쉽지 않습니다.

  • Social bias

    인터넷 상에 존재하는 수많은 문서에는 암묵적인 사회적 편향이 담겨 있습니다. 이는 그대로 NMT에도 학습되게 됩니다. 프로그래머는 주로 남자이고, 간호사는 주로 여자이기 때문에, 이를 학습한 NMT는 성별 중립적인 표현을 입력하여도 자연스레 성별이 편향된 표현으로 번역하게 됩니다.

하지만 NMT는 상당히 어려운 작업이며 NMT를 구축하는 과정에서 새로운 모델이 많이 탄생하게 됩니다. 이제 배울 Attention 역시 이 과정에서 탄생했습니다.

Attention


seq2seq의 구조는 위와 같다고 했습니다. 인코더의 마지막 hidden state는 번역하고자 하는 문장의 인코딩입니다. 이는 번역하고자 하는 문장의 정보가 인코더의 마지막 hidden state에 담겨있다고 했습니다.
하지만 정말 그렇게 될까요? 만약 인코더의 길이가 50이 된다고 해봅시다. 그렇다면 초기 시점의 정보가 마지막 시점까지 잘 전달되지 못할 것입니다. 이는 초기 시점의 단어들을 번역하는데 어려움을 겪게 합니다. 이를 타게할 방안은 무엇일까요?

SMT에서 alignment가 각 단어간 대응관계를 표현한다고 했습니다. 그리고 SMT는 이 대응 관계를 이용해 번역합니다. 이를 NMT에 활용할 수 없을까요? 그래서 attention 번역된 문장을 생성할 때, 각 문장과 대응되는 원래 단어를 찾아서 활용하는 방안을 고안했습니다.

1. Model Architecture

attention 알고리즘은 다음과 같은 순서로 진행됩니다.

우선 디코더의 hidden state와 인코더의 hidden state를 내적하여 attention score라는 것을 구합니다. 내적은 두 벡터 간 유사도를 구할 때 사용됩니다. 즉, attention score는 현재 시점의 디코더의 정보와 인코더의 매 시점의 정보의 유사도를 의미하고 있습니다.

attention score는 인코더의 매 시점마다 계산되게 됩니다.

이렇게 구한 attention score를 softmax 함수에 통과시켜 확률 분포를 생성합니다. 이 시점에선 il이라는 단어에 가장 집중하고 있는 것을 볼 수 있습니다. 문장의 시작에선 il이라는 단어가 가장 유사한 정보를 가지고 있는 것입니다.

위에서 구한 확률 분포를 가중치로 하여 인코더 각 시점의 hidden state를 가중합해줍니다. 이를 attention output이라고 합니다. 이는 SMT의 aligment와 유사하면서 보다 유연한 사용이 될 수 있습니다. SMT의 aligment는 대응관계를 이진 분류로 표현하기 때문에 완전히 대응되거나, 완전히 고려할 필요가 없다고 여기지만, attention score는 디코더의 정보에 활용될만한 정도를 고려하여 인코더의 정보를 취합했기 때문입니다.

attention output은 디코더의 hidden state와 concat되어 예측값을 산출할 때 사용됩니다. 이때 DNN, softmax 등의 구조를 사용하게 됩니다.

위의 attention 과정은 디코더의 매 시점마다 반복되어 실행됩니다.

2. Equation

  • encoder hidden state
  • t 시점의 decoder hidden state
  • attention score
  • attention dist.
  • attention output
  • t 시점의 예측을 위해 사용되는 벡터

3. Advantages

  • NMT 성능을 비약적으로 향상시켰습니다.
  • 병목현상을 해결했습니다. seq2seq에선 인코더의 정보가 마지막 hidden state에 집중되어 제대로 전달되지 못하는 병목현상이 발생했지만, attention은 디코더가 직접 인코더의 모든 시점에서 정보를 가져오게 함으로써 이를 해결했습니다.
  • vanishing gradient problem을 완화했습니다. attention은 디코더와 인코더를 직접 연결한 구조입니다. 이는 그래디언트가 인코더의 마지막 시점과 디코더의 첫 시점의 연결 뿐 아니라 인코더와 디코더의 각 시점으로 직접 흘러가도록 만들어 vanishing gradient problem을 완화했습니다.
  • 모델을 어느정도 해설할 수 있게 만들어줍니다. attention score를 분석하면 모델이 각 시점마다 어디에 집중하고 있는지 알 수 있습니다.

위 사진은 seq2seq with attention에서 attention score를 시각화 한것입니다. 아래 사진은 본래 alignment입니다. 두 도표는 매우 유사한 것을 볼 수 있습니다. SMT의 alignment는 직접 사람이 작성해야 하는 수고가 발생하는 것에 비해 attention은 모델이 직접 구축하고, 보다 유연한 형태라는 점에서 더 우수하다고 할 수 있습니다.

4. Generalization

attention은 단순히 seq2seq에만 사용되지 않고, 많은 모델에서 사용됩니다. 그래서 좀 더 확장된 버전의 attention 정의가 필요합니다. 원문을 가져오자면

Given a set of vector values, and a vector query, attention is a technique to compute a weighted sum of the values,dependent on the query.

즉, 벡터인 value들의 집합과 하나의 벡터인 query가 있을 때, attention은 query를 이용해 value들의 가중합을 구하는 방법론입니다.

그리고 종종 논문 등에서 query attends to the values 와 같은 표현을 볼 수 있는데, 이것이 바로 attention 메커니즘을 설명하고 있는 것입니다.

이렇게 확장할 경우 attention을 다음과 같이 해석할 수 있습니다.

  • attention output은 query가 집중하고자 하는 value의 요약된 정보입니다.
  • attention은 고정된 벡터 사이즈를 통해 query가 value들의 정보에 접근하는 방식입니다.


참고

https://blog.naver.com/PostView.nhn?blogId=sooftware&logNo=221809101199&from=search&redirect=Log&widgetTypeCall=true&directAccess=false
https://wikidocs.net/31695
https://en.wikipedia.org/wiki/BLEU
https://tech.kakaoenterprise.com/50

0개의 댓글