while (1): study();

[논문 리뷰] Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation 본문

논문 리뷰

[논문 리뷰] Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation

전국민실업화 2021. 6. 27. 17:36
728x90

ArXiv 링크: https://arxiv.org/abs/1609.08144

 

Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation

Neural Machine Translation (NMT) is an end-to-end learning approach for automated translation, with the potential to overcome many of the weaknesses of conventional phrase-based translation systems. Unfortunately, NMT systems are known to be computationall

arxiv.org

 

2016년에 구글에서 발표한 논문인 Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation입니다.

 

1. Introduction

 

 NMT(Neural Machin Translation System)는 end-to-end, 즉 raw input을 입력하여 output으로 출력되는 용이함이 있습니다. 알아서 내부에서 인코더 단에서 소스 언어 문장의 hidden state를 근사하고, 디코더 단에서 타겟 언어 문장으로 출력해주기 때문입니다. 단, 통계에 기반하는 기존의 Phrase-based Machine Translation에 비해서는 3가지 정도 단점이 있었습니다.

 

1. 학습과 추론 시간이 느립니다.

2. 희소한 단어에 취약합니다.

3. 소스 문장의 전체를 커버하지 못하는 경우가 있습니다.

 

이러한 문제를 해결하기 위해서 구글은 다음과 같은 해결책을 제시했습니다.

 

1. 디코더의 최하단과 인코더의 최상단 레이어를 연결하는 방식으로 병렬처리를 용이하게 하였습니다.

2. 저정밀도 연산(low-precision arithmetic)을 기용하여 추론 시간을 줄였습니다. 

3. 서브워드 분절을 사용하여 희소 단어에 대한 대응력을 높였습니다.

4. Length penalty를 사용하여 길이가 서로 다른 문장에 대해 공평하게 손실을 평가하였습니다.

5. Coverage penalty를 사용하여 attention이 소스 언어의 문장 전체를 커버할 수 있게 했습니다.

 

3. Model Architecture

 

 GNMT는 일반적인 LSTM 기반 인코더-디코더 아키텍처를 사용하였습니다. 인코더에서는 타겟 문장을 받아서 Hidden state를 출력합니다.

 디코더는 인코더가 출력한 벡터와 이전 타임스탭까지의 토큰들을 입력받아 해당 타임스탭의 단어의 확률을 출력합니다. 여기서 디코더에 입력으로 주어지는 이전 타임스탭까지의 토큰들은 모두 '실제 정답'입니다. 디코더가 한 타임스탭씩 단어를 출력하기 때문에 실제 디코더의 출력을 다음 타임스탭의 입력으로 줄 경우, 이전 단어의 확률이 실제와 차이가 크면 클수록, 또한 문장의 길이가 길어지면 길어질수록 번역의 질이 낮아집니다. 

 다만 디코더는 자신이 출력하는 정답과는 관계없이 다음 타임스탭에서 학습이 진행되기 때문에 디코더 성능 자체가 저열해질 가능성이 있습니다. 따라서 실제로는 디코더의 출력과 실제 정답을 결합하여 입력으로 주는 것이 일반적입니다. 이를 Input Feeding이라고 합니다.

 NMT가 좋은 성능을 얻기 위해서는 인코더와 디코더가 모두 작은 이상치도 포착할 수 있도록 충분히 깊어야 한다고 합니다. 해당 논문에서는 8개의 레이어를 스택했습니다. 인코더에서는 Bidirectional LSTM을 4개 스택했다는 것을 아래 그림에서 확인할 수 있습니다. 단 층이 깊어질 때 발생하는 Gradient Vanishing을 방지하기 위해서 Residual connection을 이용하였습니다.

 그리고 Attention을 이용하여 인코더 단에서 적절한 정보를 쿼리하되, 인코더의 최종 출력과 디코더의 최하단 레이어만 연산하여 병렬 처리를 용이하게 한 모습입니다. 또한 LSTM의 순방향 연산과 역방향 연산에 각기 다른 GPU를 사용하여 추론과 연산 속도를 증가시켰습니다.

GNMT Encoder-Decoder Architecture

 

4. Segmentation Approaches

 

 희소한 단어를 처리하는 것은 NLP task에 있어 정말 중요한 일입니다. 코퍼스는 한정되어 있음에도 불구하고 보지 못한 단어 하나가 결과의 질을 좌지우지 할 수도 있기 때문입니다. 이를 처리할 수 있는 방법으로 두 가지가 제시되었는데 첫 번째는 단순 복사(simple copy)입니다. 입력 문장으로부터 출력 문장으로 단순히 '복사'하는 것인데 Attention을 이용한 연산이 이에 해당합니다.

 두 번째는 서브워드 분절입니다. 최근까지 OOV를 해결하는 데 가장 많이 쓰이는 기법이기 때문에 구글 역시 이를 사용했습니다. 구글은 Wordpiece model(WPM)을 적용하여 문장을 다음과 같이 변환하였습니다.

 

소스 문장: Jet makers feud over seat width with big orders at stake

타겟 문장: _J et _makers _fe ud _over _seat _width _with _big _orders _at _stake

 

 밑줄이 있는 것은 서브워드 분절로 인해 발생한 공백과, 이미 띄어쓰기가 되어 있던 공백을 구분하기 위한 것입니다. 자주 발생하는 단어는 묶고, 덜 발생하는 단어는 분리함으로써 단일 글자의 유연성과 단어의 효율성을 동시에 얻을 수 있습니다(a good balance between the flexibility of single characters and the efficiency of full words for decoding).

 구글은 여기서 그치지 않고 Mixed Word/Character라는 방법론 또한 제시합니다. OOV에 대해서 단순히 <OOV> 등의 토큰으로 치환하는 방식에서 좀 더 정교하게 접근하여, 단어의 시작, 중간, 끝을 구분합니다. 예를 들어 Miki라는 단어가 OOV라고 했을 때 다음과 같이 치환합니다.

 

Miki → <B>M <M>i <M>k <E>i

 

5. Training Criteria

 

 제가 가장 감명깊게 봤던 부분입니다. 기존의 Maximum Likelihood Estimation(MLE) 방법론은 입력 문장에 대한 출력 문장 확률의 합을 최대화시키는 것을 목표로 합니다. 즉 가장 가능성이 높은 문장을 만드는 것을 목표로 합니다. 단, 이 경우에는 우리는 학습과정에서 BLEU를 고려할 수 없습니다. MLE를 위해 BLEU를 미분할 수가 없기 때문입니다.

MLE

 따라서 구글은 강화학습의 Minimum Risk Training(MRT) 방법론을 도입합니다. 이는 입력 문장에 대해 타겟 문장이 샘플링될 확률에 보상함수(우선은 BLEU라고 가정합니다)를 곱하여 그 전체 합을 최대화합니다. MRT가 샘플링에 기반하는 이상 BLEU를 미분하지 않아도 되고, 결과적으로 우리는 훈련과정에서 BLEU를 사용할 수 있게 되는거죠.

MRT

단, 문제가 있습니다. 구글은 GLEU가 corpus measure의 측정을 위해 고안된 것이라고 합니다. 한 개의 문장만 측정하기에는 적절하지 않은 지표라는 것이죠. 우선 BLEU는 다음과 같이 계산됩니다. N을 최대 n-gram이라고 가정했을 때 로그 n-gram 정밀도와 가중치의 곱에 exponential을 취한 뒤 BP를 곱합니다.

BLEU score

BP는 Brevity Penalty, 즉 Length Penalty와 같은 맥락에서 짧은 문장이 높은 확률을 받는 것을 방지해줍니다. 예를 들어 문장 내 단어가 2개라면, 2개만 맞춰도 100점을 맞게 됩니다만, 이는 10개의 단어 중 10개를 다 맞추는 것보다는 쉬운 일이겠죠. 여기서 올바른 BP를 구하기 위해서는 우리는 길고 짧음의 기준이 필요합니다. 실제 Length penalty를 계산하는 데에도 전체 문장셋 중 가장 짧은 문장의 길이를 고려하죠. 따라서 우리는 단일 문장에 대해서는 BLEU를 제대로 사용할 수 없게 됩니다.

 구글은 이를 해결하기 위해 GLEU를 제시합니다. 이는 정밀도를 사용하는 GLEU와는 달리 단순히 다음과 같이 계산됩니다. 즉, 강화학습을 위해서 만들어진 특수한 지표라고 할 수 있으며, 벤치마크로서의 GLEU와는 다른 것입니다.

 

GLEU = min(recall, precision)

 

 결론적으로 GNMT에서는 MLE 방법론과 GLEU 기반 MRT 방법론을 적절히 섞어서 사용합니다.

 

6. Quantizable Model and Quntized Inference

 

 모델의 효율성과 관련있는 부분입니다. NMT의 가장 큰 문제점 중 하나는 자원을 많이 소모한다는 것입니다. 적어도 추론 과정에서 속도가 느려지는 것은 실사용자의 입장에서 크게 작용하기 때문에, 어떻게든 적은 자원을 소모하면서 번역할 수 있는 방법론이 탐색되었습니다.

 우선 LSTM의 경우 두 개의 accumulator가 있다고 합니다. 하나는 시간축을 따라 이동하는 cell state이며, 다른 하나는 깊이축을 따라 이동하는 hidden state입니다. GNMT는 추론 과정에서 이 두 accumulator에 대해 제약을 걸었습니다. 일련의 압축 과정인거죠.

 또한 full-floating 연산을 8~16 bit 해상도의 정수 연산으로 바꿨습니다. 일전에 이를 low-precision arithmetric이라고 하였습니다. 디코더의 출력이 Softmax 연산되기 전 감마로 클리핑된 것도 눈에 띄네요. 감마는 휴리스틱하게 25를 선택했다고 합니다.

참고로 GPU와 CPU를 사용했을 떄는 적절히 quantize되지 못하고 full-floating 연산되었다고 합니다. TPU를 사용했을 때는 의도한대로 quantize되었고, 결과적으로 성능을 아주 조금 손해보면서 GPU 대비 10배 이상 빨라진 모습을 보였습니다.

  

7. Decoder

 

 일반적인 Beam Search는 더 짧은 결과를 선호합니다. 이는 추론 과정에서 NLL(Negative Log Likelihood)을 더하는 방식으로 진행되기 때문이죠. 따라서 우리는 앞서 이야기한 BP와 같은 Length Penalty를 적용해 줄 필요가 있습니다.

 거기에 더하여 Coverage Penalty도 필요합니다. 앞서 Introduction에서 언급한 '전체 문장을 커버하지 못하는' 문제에 대해서 해결하기 위함입니다. Coverage Penalty는 Attention이 각 문장에 골고루 적용되게 해줍니다. 

 Length Penalty의 가중치를 알파, Coverage Penalty의 가중치를 베타라고 하였을 때 GNMT의 모델 성능은 베타보다는 알파에 대해서 민감한 양상을 보이는 듯합니다. 알파가 0~0.4 정도일 때 일반적으로 좋은 성능을 보였습니다. 이 논문에서는 각각 0.2, 0.2로 세팅했다고 합니다.

 

결론

 

 물론 현재 기계번역은 Transformer 기반 아키텍처가 독식하고 있는 실정이긴 하지만, 그럼에도 불구하고 해당 논문에서 인코더-디코더 아키텍처를 바탕으로 개진한 문제점과 해결책들은 NLP 전반에 적용될 수 있는 사항들인 듯 합니다. 특히 reward function에 민감한 강화학습의 특성에도 불구하고 GLEU를 고안하여 독자적인 Mixing criteria를 만든 점이 상당히 '구글다웠다'고 말할 수 있겠습니다.

 Mixing criteria는 구현을 못했으나, 얼추 비슷하게 해당 아키텍처를 시험해볼 수 있도록 깃허브에 코드를 공유 중이니 필요 시 확인하시키 바랍니다.

 

깃허브 링크: https://github.com/jeongchanyoung-1234/NMT 

 

jeongchanyoung-1234/NMT

Neural Machine Translation with Attention (on develop) - jeongchanyoung-1234/NMT

github.com

 

728x90
Comments