6주차(1) - Neural Machine Translation by Jointly Learning to Align and Translate

2019. 2. 26. 00:00풀잎스쿨 NLP Bootcamp

논문링크: https://arxiv.org/abs/1409.0473

참고자료: (한지윤님 발표자료) https://bit.ly/2EulaC3 (Google Slide)


Abstract

최근에 리뷰했던 논문들은 Machine Translation, 그중에서도 NMT를 다루고 있다. 이렇게 소개된 NMT의 구조는 주로 Encoder-Decoder방식을 사용하고 있는데, 이는 한가지 언어의 문장을 다른 언어의 문장으로 다시 재구성한다는 면에서는 합리적인 구성이라고 볼 수 있다. 하지만 이렇게 Encoder-Decoder를 구성할 시에는 Input Sequence/Sentence를 Fixed-Length Vector로 구성해야 하는 단점이 생긴다. 문장내의 모든 정보를 Fixed-Length Vector로 압축할 시에는 문장이 매우 길어질 경우, 문장의 Translation 성능이 급격하게 저하된다는 단점이 생긴다.

이렇게 성능이 저하되는 이유는 문장 전체의 정보를 Fixed-Length Vector로 압축하면서 Input Token/Unit의 순서에 대한 정보가 사라진다는 점 때문이다. 그도 그럴것이 특정 언어의 문장 구조가 다른 언어의 문장 구조와 완벽하게 일치하는 경우는 거의 없기 때문이다. 하지만 Translation을 위해 Sentence 중 어떤 단어에 주목해야 하는지에 대한 정보가 주어진다면 번역이 더욱 제대로 이루어지지 않을까? 이 논문은 이러한 점에 착안하여 Alignment에 주목하여 Soft-search를 이용한 번역 모델을 제시한다.

Contribution

Architecture

일단 Decoder의 구조에 대해 한번 짚고 넘어가보고자 한다. 해당 논문에서는 Context라고 불리는 요소를 사용하고 있는데, 이는 각 Sequence에 대한 Hidden State(여기서는 annotation이라고 칭하고 있다.)를 감안하기 위한 요소이다.

이렇게 해당되는 각 Hidden State에 대해 i번재 input과 j번째 output이 어느만큼 관련이 있느냐를 학습하려는 모델이 바로 이 논문이 제시하고자 하는 모델이다. 즉, alpha_ij를 학습하기 위해 c_i (Context)를 계산하며, 이는 i-1의 input, i번재의 Cell State, 그리고 i번째의 Hidden State를 이용해 연산을 하는 식이다. 위 수식은 Translate하고자 하는 Input Sentence에 대해 Output Sentence의 어느 부분을 더 고려해야 하느냐 계산하기 위함이다.

위에서도 언급했듯이 alpha_ij를 학습하기 위해서는 이를 구하는 공식이 필요하다. 여기서 alpha는 Feedforward Neural Network로 구성되는데, 기존의 NMT에서는 alignment를 Latent Variable로 간주했으나 이 모델에서는 Variable의 한가지로 제시한다.


여기서 e_ij가 바로 alignment이며 위 수식은 alignment model을 공식으로 표현한 내용이다. 이 모델에서는 input의 j번째 위치가 output의 i번째 위치와 얼마나 매치되는가를 Score를 통해 계산한다. 이 Score는 RNN의 Hidden State인 s_(i-1)과 Input Sentence의 j번째 Hidden State(annotation)를 기반으로 계산된다.

한가지 눈여겨 봐야 할 점은 Encoder가 구성하고 있는 구조가 Bidirectional RNN구조라는 것이다. 이는 Annotation이 앞 단어뿐 아니라 뒤에 있는 단어/정보도 포함할 수 있도록 구성한 구조이다. 여기서 h_j는 j번째 단어 앞뒤의 정보를 모두 포함한다.


모델의 상세 Hyperparameter는 다음과 같다.

  • Encoder/Decoder 각 Hidden Size 1000
  • Minibatch SGD
  • Adadelta optimizer

Result & Conclusion

Result

결과 그래프는 Sentence길이에 따라 모델별 BLEU Score가 어떻게 달라지는가를 나타내고 있다. 기존의 방식인 RNNenc모델은 문장의 길이가 길어질수록 급격하게 성느이 떨어지는 것을 볼 수 있다. 그에 반해 논문에서 제시하는 모델인 RNNsearch의 경우 데이터셋에 따라 달라지지만 RNNsearch-50의 경우 문장의 길이가 길어짐에도 불구하고 BLEU Score가 그렇게 달라지지 않는 것을 확인할 수 있다. 여기서 하나 눈여겨봐야 할 점은, RNNsearch-30의 BLEU Score가 RNNenc-50의 BLEU Score보다 더 높다는 점이다. (RNNsearch-30: 학습 데이터셋 내 문장의 최대 길이가 30)


또한 Translation의 Input-Output과의 Weight(alpha_ij)를 시각적으로 살펴보면 Translation의 번역이 반드시 순차적으로 이루어지지 않는다는 점을 알 수 있다. 예를 들어, (a)에서 European이라는 단어가 영어 문장에서 나오는 순서와 프랑스어 문장에서 나오는 순서가 다름에도 불구하고 위치에 상관없이 번역하고자 하는 부분에 대해 Weight가 강하게 주어진 것을 알 수 있다. (영어에서는 5번째에, 프랑스어에서는 7번째에 위치해있다)


이번엔 데이터셋에 UNK(Unknown) 토큰의 유무를 통해 결과를 나타냈다. 결과를 살펴보면 UNK토큰이 포함된 데이터셋에서의 RNNencdec와 RNNsearch의 차이와 UNK토큰이 포함되지 않은 데이터셋에서의 RNNencdec와 RNNsearch의 차이가 크게 다르지 않은 것을 살펴볼 수 있으며, 모든 부분에 대해 RNNsearch의 성능이 더 나은 것을 확인할 수 있다. 또한 RNNsearch-50을 더 오랫동안 학습시킨 결과인 RNNsearch-50*는 더이상 성능이 개선되지 않을때까지 학습을 진행한 결과이며, 다른 모델에 비해 BLEU Score가 더 높게 나온 것을 확인할 수 있다.


Conclusion

해당 논문은 기존 RNN Encoder-Decoder방식의 한계인 Fixed-Length Vector에서의 문제점을 해결하고자 Alignment라는 개념을 사용하여 Translation Matching이 어느 부분에서 이루어 져야 하는가에 대한 모델을 제시했다. 논문에서는 이 모델을 RNNsearch라고 칭하고 있으며, 해당 모델은 기존 모델에 비해 더 나은 BLEU Score를 보인다. 이는 Translation에 대해서 Attention개념이 처음으로 제시된 논문이라고 봐도 무방할 것이다.


개인적으로 아쉬웠던 점은 논문이 이해하기에 많이 난해해서 수식에 대한 이해를 제대로 하지 못하고 리뷰를 했었다는 점이다. 항상 논문을 보면서 느끼는 것이지만 논문에서 설명하지 않는 부분이 수식에서는 구현되어있는 경우가 빈번하게 있었기 때문에 이런 점을 더욱 느끼게 되는 것 같다.