딥러닝(DL)/논문 리뷰

Neural Machine Translation by Jointly Learning to Align and Translate (ICLR 2015) - Seq2Seq with Attention

Song 컴퓨터공학 2023. 8. 27. 22:50

 

이전의 Seq2Seq 모델은 하나의 인코더 LSTM을 사용해 입력 문장을 하나의 고정된 크기를 가지는 Context vector 로 변환하고, 이 Context 벡터를 디코더 LSTM의 입력으로 사용해 출력 문장을 뽑아내는 방법을 사용하였습니다. 이 구조의 문제점 중 하나는 병목(Bottlenect) 현상으로 성능 하락의 주 원인입니다. 또한 하나의 Context vector 가 소스 문장의 모든 정보를 가지고 있어야 하므로 성능이 저하된다는 문제점 또한 발생합니다.

 

이를 해결하기 위해 매번 소스 문장에서의 출력 전부를 입력으로 받으면 어떨까? 라는 의문점으로 시작하는 것이 본 논문의 핵심입니다. 이번 논문은 Seq2Seq 모델에 어텐션(Attention) 메커니즘을 적용한 논문입니다. 디코더의 개선에 초점을 맞추고, 디코더 파트에서 인코더에서 나온 모든 정보를 활용(attemtion) 하자 라는 아이디어를 가지고 있고, 이를 통해 실제로 개선된 성능을 얻어내는, 그리고 후속 연구들의 핵심 아이디어를 제공해주는 논문입니다. 그 때문에 이 논문은 원 제목보다 Seq2Seq with attention 이라는 이름으로 더 유명합니다. 추후 소개할 자연어 처리의 근간이 되는 논문인 트랜스포머 또한 인코더 파트의 모든 hidden state를 전부 매번 입력으로 받는데, 이 구조의 아이디어와 유사한 부분이 있습니다. 논문 구현 코드는 아래의 깃허브 주소에서 확인할 수 있습니다.

 

GitHub - Song-Joo-Young/Deep-Learning-Paper-Review

Contribute to Song-Joo-Young/Deep-Learning-Paper-Review development by creating an account on GitHub.

github.com


Neural Machine Translation by Jointly Learning to Align and Translate

 

1. Abstract / Introduction

Neural machine translation(신경망 기계번역) 은 기계 번역 분야에서 새로 주목받고 있는 방법입니다. 과거의 기계번역은 phrase-based system 으로 다양한 sub-component 로 구성되어 있었고, 각 component는 각각 학습되고 구성되었습니다. 전통적인 통계적 기계번역과 달리, 신경망 기계번역은 번역 성능을 높이기 위해 공통 조정이 가능한[can be jointly tuned] 하나의 신경 네트워크를 구축하는 것을 목표로 합니다. 신경망 기계번역은 대부분 Encoder-Decoder 구조로 구성됩니다. Encoder의 경우, 입력 문장을 고정 길이 벡터로 변환시키고, Decoder는 해당 벡터를 이용하여 번역 결과를 생성합니다. 해당 모델의 입력으로 제공된 source sentence와 결과로 생성된 output sentence 사이의 probability를 최대화하는 방식으로 학습됩니다.

이러한 Encoder-Decoder 구조는 bottlenect 문제를 발생시킬 수 있습니다. Bottleneck 문제는 인코더에서 전체 문장을 하나의 고정 길이 벡터로 만들 때 발생합니다. 이런 문제는 문장이 길어질수록 더욱 심하게 나타나고, 인코더-디코더 모델의 성능 또한 문장의 길이가 길어질수로 떨어지게 됩니다. 이는 문장 전체의 정보를 짧은 고정 길이의 벡터로 모두 나타내기 어렵기 때문입니다.

 

본 논문에서는 인코더-디코더 모델에서 align 과 translate 을 함께 해줄 수 있는 새로운 구조를 추가하여 성능을 향상시킬 수 있는 방법을 제안합니다. 

더보기

Each time the proposed model generates a word in a translation, it (soft-) search for a set of positions in a source sentence where the most relevant information is concentrated.

 

Source sentence에서 관련 있는 정보가 몰려있는 부분을 나타내는 context vector를 가지고 target word를 예측합니다. input으로 들어가는 문장 전체를 단일 고정길이 벡터로 변환시키는 것이 아니라 adaptive 하게 벡터의 부분집합만을 선택해주고 그것을 가지고 번역을 수행합니다.

논문의 모델은 디코더에서 하나의 결과를 만들어낼 때 마다, 입력 문장을 순차적으로 탐색해서 현재 생성하려는 부분과 가장 관련있는 영역을 적용시킵니다. 최종적으로 인코더에서 생성한 context word 중 관련성이 가장 크다고 판단되는 영역들과 디코더에서 이미 생성한 결과를 기반으로 다음 단어를 결과로 생성해냅니다.

 

이런 방식의 가장 큰 장점 중 하나는 입력 문장을 고정 길이의 벡터로 표현하지 않아도 된다는 점입니다. 디코더에서 연산을 진행하면서 인코더에서 생성한 context word 를 계속해서 참조하기 때문에, 전체 문장의 정보를 하나의 벡터에 담으려 하지 않아도 되고, 문장의 길이가 길어지도라도 성능을 유지할 수 있습니다.

 

 

2. Background: Neural Machine Translation

확률론적 관점에서, 번역이란 주어진 소스 문장 $x$가 주어졌을 때 조건부 확률 $p(y|x)$를 최대화 하는 출력 문장 $y$를 찾아내는 방식으로 동작합니다. 신경망 기계번역은 조건부 확률을 최대화시키기 위해 sentence pair(문장쌍)들을 병렬 훈련을 통해(using a parallel training corpus) 매개변수들을 적합(fit)시킵니다. 조건부 분포(Conditional distribution)이 번역 모델에 의해 학습되면, 소스 문장이 주어졌을 때 조건부 확률을 극대화시키는 문장을 찾습니다. 

 

최근(본 논문이 나온 시점)에는 신경망 네트워크를 이용해 이러한 조건부 확률을 직접적으로 학습하는 방법들이 제안되었습니다. 이러한 신경망 기계 번역은 일반적으로 두 가지 구성 요소(인코더와 디코더)로 구성되며, 첫 번째 요소는 소스 문장 $x$를 인코딩하고 두 번째 요소는 목표 문장 $y$로 디코딩 합니다. 위 방식은 앞서 언급한 RNN을 이용한 인코더-디코더 모델을 예시로 들 수 있고, 이후 LSTM을 이용해서 RNN보다 좋은 성능을 내는 모델(Seq2Seq)도 제안되었습니다. 근래에 나타난 접근법임에도 불구하고 매우 유망한 결과들을 보여주고 있습니다.

 

2.1 RNN Encoder-Decoder

인코더입력으로 제공되는 문장 $x = (x_1, x_2, ... , x_{T_x})$ 을 고정된 길이의 벡터 $c$로 변환시킵니다. RNN을 이용하는 경우 아래 식을 통해 벡터 $c$를 생성합니다. 

$$ \begin{align*} & h_t = f(x_t, h_{t-1}) \\ & c = q(\{h_1, ... , h_{T_x}\}) \end{align*} $$

 

$h_t \in \mathbb{R}^n$ 는 시간이 $t$일 때의 hidden state 를 의미하고, $c$는 hidden stae의 sequence 로부터 만들어진 벡터를 의미합니다. $f$와 $q$는 non-linear function 을 의미합니다. Seq2Seq 에서는 $f$를 LSTM을 사용하고 $q(\{h_1, ... , h_{T_x}\})=h_T$ 로 사용하였습니다.

 

디코더는 context vector $c$가 주어졌을 때, $c$와 이전의 예측된 결과 $y_1, y_2, ... , y_{t'-1}$ 을 기반으로 다음 단어 $y_{t'}$ 을 예측합니다. 번역된 결과 $y=(y_1,..., y_{T_y})$ 는 아래의 식과 같이 조건부 확률을 기반으로 생성됩니다.

 

$$ \begin{align*}  & p(\mathbf{y})= \prod_{t=1}^T p(y_t| \{y_1, ..., y_{t-1} \}, c) \\ & p(y_t | \{ y_1, ... , y_{t-1} \}, c) = g(y_{t-1}, s_t, c)  \end{align*} $$

 

$\mathbf{y} = (y_1, ... , y_{T_y})$ 를 의미하며, 각각의 조건부 확률은 2번째 식으로 모델링됩니다. 조건부 확률은 바로 직전 time인 $t-1$에서 예측한 결과 $y_{t-1}$ 과 RNN의 hidden state $s_t$ (현재 시점에 확인한 단어를 반영한 hidden state), 그리고 non-linear functin $g$를 이용해서 구할 수 있습니다.

 

 

3. Learning to align and translate ( Attention 기법 )

이번 섹션에서는 신경망 기계 번역을 위한 새로운 아키텍처를 제안합니다. 새로운 아키텍처는 양방향 RNN (bidirectional RNN) 으로 구성된 인코더번역 중 원본 문장을 검색하는 것을 에뮬레이트하는 디코더(디코더가 번역 과정 중 마치 원본 문장을 검색하는 것처럼 동작하는 것을 의미) 로 구성됩니다.

 

3.1 Decoder: General description

새로운 모델 아키텍처에서는 $p(\mathbf{y})= \prod_{t=1}^T p(y_t| \{y_1, ..., y_{t-1} \}, c)$ 을 이용하여 아래와 같이 각각의 조건부 확률을 정의합니다.

 

$$ p(y_i|y_1, ... , y_{i-1}, \mathbf{x}) = g(y_{i-1}, s_i, c_i) $$

 

$s_i$는 RNN의 시간 $t_i$ 시점의 hidden state를 의미하며, $s_i = f(s_{i-1}, y_{i-1}, c_i)$의 식으로 계산됩니다. 기존의 인코더-디코더 접근법과 달리 여기에서의 확률은 각 대상 단어 $y_i$에 대한 별개의 context vector $c_i$를 조건으로 합니다. 본 논문에서는 context vector $c_i$에 대해 annotation $h_i$의 가중합에 의해 계산된다고 표현합니다. 인코더의 hidden state 들은 모든 입력에 대한 정보를 담고 있습니다.

 

$$ c_i = \sum_{j=1}^{T_x} \alpha_{ij}h_j $$

 

$c_i$는 $e_{ij}$의 소프트맥스로 계산됩니다. $e_{ij}$는 정렬 모델(Alignment model)의 energy 로, $j$ 위치 주변의 입력과 $i$위치 주변의 출력이 얼마나 일치하는지 유사도에 따라 점수를 매깁니다. 이 때 점수는 RNN hidden state $s_{i-1}$ 와 입력 문장의 $j$번째 annotation에 의해 결정됩니다.

 

이 때 Alignment model의 $a$는 feedforward neural network를 의미하며, 이 네트워크는 모든 다른 요소들과 공통적으로 학습되는 신경망입니다. 기존의 기계번역과는 달리 alignment는 잠재 변수로 간주되지 않습니다. 대신 alignment model은 직접적으로 소프트맥스를 계산하며, 이를 통해 비용함수에 대한 역전파를 수행할 수 있습니다. 또한 이 그레디언트를 사용해 Alignment model 뿐 아니라 전체 번역 모델 또한 공통으로 학습시킬 수 있습니다. 

 

$\alpha_{ij}$를 target word $y_i$가 source word $x_j$에 align 될 확률이라고 가정해봅니다. 그렇다면 $i$번째 context vector $c_i$는 확률이 $\alpha_{ij}$인 모든 annotation에 대한 expected annotation 이라 할 수 있습니다. $\alpha_{ij}$, 혹은 연관된 파라미터인 $e_{ij}$는 다음 $s_i$를 결정하고 $y_i$를 생성할 때 이전의 hidden state $s_{i-1}$에 대한 annotation $h_j$를 반영합니다. 직관적으로 이는 디코더에서의 어텐션 매커니즘의 구현입니다. (This implements a mechanism of attention in the decoder.) 디코더는 source 문장 중에서 더 주목해야 할 부분, 즉 더 많이 반영해야 할 부분을 결정합니다. 디코더가 attention mechanism 을 갖도록 함으로써 소스 문장의 모든 정보를 고정 길이 벡터로 인코딩해야한다는 부담에서 벗어날 수 있습니다. 이 새로운 접근 방식을 통해 정보는 sequence of annotations 전체로 확산될 수 있으며, 이에 따른 부분을 디코더가 선택적으로 검색할 수 있습니다.

 

 

최대한 논문 본문의 의미를 살려 번역을 해보려 했는데, 논문 자체가 이해하기 어렵게 써 있는 것 같아 다시 한 번 임의대로 정리하도록 하겠습니다.

 

 

즉 2.1의 RNN 부터 다시 정리하자면 직전 연구에서의 아키텍쳐는 고정된 길이를 가지는 context vector $c$를 사용해 Decoder 의 출력 모두에 $c$와, $c$를 RNN의 입력으로 넣어 각각 시점에서 나오는 hidden state들을 $g$라는 함수의 입력으로 넣어서 각 토큰을 추출합니다. 이는 수식으로 아래와 같이 표현되었습니다.

 

$$ \begin{align*}  & p(\mathbf{y})= \prod_{t=1}^T p(y_t| \{y_1, ..., y_{t-1} \}, c) \\ & p(y_t | \{ y_1, ... , y_{t-1} \}, c) = g(y_{t-1}, s_t, c)  \end{align*} $$

 

본 논문에서의 디코더는 "인코더에서 나온 모든 정보를 활용(attention)하자" 라는 아이디어가 핵심입니다. 디코더는 매번 인코더의 모든 출력 중에서 어떤 정보가 중요한지를 계산합니다. $i$는 현재의 디코더가 처리중인 인덱스를 의미하고 $j$는 각각의 인코더 출력 인덱스를 뜻합니다.

 

본문의 용어와 좀 더 관련 지어 이를 설명하면 Alignment model 에서는 디코더의 time $i$ 에서의 정보와 time $j$에서의 정보가 얼마나 연관성이 있는지에 대한 energy 를 계산합니다. 해당 energy는 디코더의 바로 전 time $i-1$ 에서의 hidden state $s_{t-1}$ 와 인코더의 time $j$ 에서의 hidden state $h_j$를 이용해 $e_{ij}=a(s_{i-1}, h_j)$ 와 같은 연산을 수행하여 energy $e_{ij}$ 를 구합니다. 그 후 이를 이용해 인코더의 각 hidden state에 대한 weight $\alpha_{ij}$ 를 소프트맥스로 구합니다. 이 때 weight $\alpha_{ij}$ 는 target word $y_i$가 source word $x_j$에 어느 정도 연관성이 있는지를 나타냅니다. 이를 통해 디코더는 해당 weight 값을 기반으로 source sentence에서 어느 위치의 단어에 더 attention을 줄지 판단할 수 있고, 이러한 방식을 통해 기존의 모든 문장을 하나의 고정 길이 벡터로 변환을 사용하지 않고도 더 좋은 성능을 제공할 수 있습니다.

 

3.2 Encoder: Bidirectional RNN for annotating sequences

일반적인 RNN은 입력 문장 $\mathbf{x}$에 대해 첫 번째 원소 $x_i$부터 마지막 원소 $x_{T_x}$ 까지 순서대로 입력 문장을 읽습니다. 하지만 위에서 제안된 도식에 따르면 각각 단어의 annotation에 대해서 이전의 단어들 뿐만 아니라, 다음의 단어들 또한 요약되기를 원합니다. 이런 이유로 최근 음성인식에서 성공적으로 사용된 양방향 RNN (Bidirectional RNN)을 사용할 것을 제안합니다.

 

BiRNN은 순방향과 역방향 RNN으로 구성됩니다. 순방향 RNN은 $\overrightarrow{f}$가 입력 문장을 순서대로($x_1$부터 $x_{T_x}$까지) 읽고 순방향 hidden state $\overrightarrow{h_1}, ..., \overrightarrow{h_{T_x}}$ 를 계산합니다. 역방향 RNN은 $\overleftarrow{f}$ 가 문장을 역순으로 읽고 ($x_{T_x}$부터 $x_1$까지) 역방향 hidden state $\overleftarrow{h_1}, ..., \overleftarrow{h_{T_x}}$ 를 계산합니다.

 

순방향 hidden state $\overrightarrow{h_j}$와 역방향 hidden state $\overleftarrow{h_j}$를 구함으로써 행렬의 형태 $h_j = \left[ \overrightarrow{h_j^T}, \overleftarrow{h_j^T}  \right]^T$ 의 형태로 각 단어 $x_j$에 대한 annotation을 얻을 수 있습니다. 이런 방식을 통해 annotation $h_j$는 앞의 단어와 다음 단어에 대한 요약을 모두 포함하게 됩니다. RNN의 최근 입력을 더 잘 표현하는 경향 때문에 annotation $h_j$는 $x_j$ 주변의 단어에 더 집중될 수 있습니다. 문장에 대한 annotation은 나중에 디코더와 Alignment model 에서 context vector 를 계산하는 데 사용됩니다.

다시 한 번 본 논문에서 제안한 아키텍처를 보면, 아래 부분은 인코더 파트가 되고 양방향 RNN을 사용하는 것을 확인할 수 있습니다. 윗부분은 디코더 파트를 의미하고 입력 문장의 각 요소들에 대해 가중합을 통해 $c_i$를 계산하게 될 것이고, 그를 디코더에서 사용함으로써 attention 메커니즘을 적용할 수 있습니다.

 

4. Experiment settings

본 논문에서는 영어-프랑스어 번역 작업에 대해서 제안한 접근 방식을 평가합니다. ACL WMT ’14 에서 제공하는 이중 언어 데이터세트를 사용합니다. 비교를 위해 RNN을 사용한 인코더-디코더 모델에 대해서도 평가하고, 두 개의 모델에 대해 동일한 학습 과정과 데이터셋을 적용합니다.

4.1 Dataset

전체 corpus의 단어를 348M개로 제한하였습니다. monolingual corpus data(한가지의 언어로 이루어진 데이터)는 하나도 사용하지 않았고 parallel corpora data 만 사용합니다. 모델을 학습시키기 위해서 각 언어마다 가장 많이 이용되는 단어 30000개를 사용하였고, 추가적으로 [UNK] 토큰도 함께 사용합니다.

4.2 Models

총 2개의 모델을 학습했습니다. 첫 번째 모델은 RNN Encoder-Decoder 모델이고, 두 번째 모델은 본 논문에서 제안한 모델(RNNsearch) 입니다. 두 모델에 대해 각각 2번씩 학습을 진행합니다. 첫 번째 학습에서는 최대 30개의 단어로 구성된 문장들에 대해 학습을 진행하고, 두 번째 학습에서는 최대 50개의 단어들로 구성된 문장들에 대한 학습을 진행합니다. 30개의 단어로 구성된 문장으로 학습된 모델을 RNNencdec-30, RNNsearch-30 이라 명명하고, 50개의 단어로 구성된 문장으로 학습된 모델을 RNNencdec-50, RNNsearch-50 이라 명명합니다. RNNencdec는 1000개의 hidden unit을 보유합니다. RNNsearch의 경우 인코더는 forward/backward 각각 1000개의 hidden unit을 보유하고 디코더에서도 1000개의 hidden unit을 보유합니다. 각 단어 예측에 필요한 조건부 확률 계산을 위해 multilayer network with a single maxout hidden layer를 사용하였습니다. minibatch SGD를 사용하고 옵티마이저로는 Adadelta를 사용했습니다. mini batch는 80개의 문장으로 구성되었고, 총 5일간 학습을 진행했습니다.

 

5. Result

BLEU score 를 기반으로 번역 성능을 평가했습니다. RNNsearch가 모든 경우에 대해 더 뛰어난 성능을 제공합니다.

또한 기존의 phrase-based 번역 시스템(Moses)와 유사한 성능을 제공할 수 있었습니다. Moses 모델의 경우 추가적인 monolingual corpus를 사용했다는 점에서 이번 모델이 뛰어난 성능을 제공한다는 것을 알 수 있습니다.

이번 모델의 가장 큰 장점 중 하나는 source sentence를 하나의 고정된 길이를 가지는 벡터로 변환하지 않아도 된다는 점입니다. Source sentence를 하나의 고정된 길이를 가지는 context vector로 변환하는 경우 문장의 길이가 길어지면 성능이 떨어지는 것을 확인할 수 있습니다. 하지만 RNNsearch-30, RNNsearch-50의 경우 source sentence가 길어져도 어느정도 일관된 성능을 제공하고, 특히 RNNsearch-50은 문장의 길이가 길어져도 성능 저하가 없는 것을 확인할 수 있습니다.

위 그림은 annotation weight $\alpha_{ij}$를 히트맵으로 시각화 한 것입니다. 해당 그림을 통해 번역된 결과가 어떤 입력에 (soft-)align 되었는지를 확인할 수 있습니다. Hard-alignment의 경우 한 단어가 무조건 다른 한 단어와 매핑되어야 하는데 실제 번역을 하는 경우 모든 단어를 1:1로 매핑하는 것에는 한계가 있습니다. 반면 이번 모델에서 제안하는 soft-alignment의 경우 한 단어가 여러 단어와의 관계를 나타낼 수 있으므로 번역하는데 있어 더 좋은 성능을 낼 수 있습니다.

 

6. Conclusion

Encoder-Decoder 라 불리는 기존의 신경망 기계번역에 대한 접근법은 전체 입력 문장을 고정된 길이의 벡터로 인코딩하여 그 벡터로부터 번역을 디코딩합니다. 최근의 연구 결과들을 통해 우리(논문 저자들)은 고정된 길이의 context vector 사용이 긴 문장에 대한 번역에 문제를 발생시킨다고 추측했습니다. 

 

본 논문에서는 이 문제를 해결하는 새로운 아키텍처를 제안했습니다. 우리(저자)는 모델이 각 대상 단어를 생성할 때 인코더로부터 계산된 annotation을 (soft-)search 할 수 있도록 기본적인 Encoder-Decoder 모델을 확장시켰습니다. 이를 통해 모델이 전체 source sentence를 고정된 길이의 벡터로 인코딩할 필요가 없고 모델이 다음 target word를 생성하는 것과 관련이 있는 정보의 관련성에만 집중할 수 있도록 하였습니다. 이는 신경망 기계 번역 시스템이 더 긴 문장에 대해서 더 좋은 성능을 나타내는 것에 긍정적인 영향을 미칩니다. 전통적인 기계 번역 시스템과 달리 alignment mechanism을 포함한 번역 시스템의 모든 부분은 정확한 번역을 생성할 수 있는 로그 확률을 위해 공통으로 훈련됩니다. 

 

데이터셋과 실험에 대해 어느정도의 성과를 달성했습니다.(위의 Result와 동일하여 생략)

 

여기서 더 중요한 점은 제안된 접근 방식이 기존의 문구 기반의 통계적 기계 번역에 버금가는 번역 성능을 달성했다는 점입니다. 이는 신경망 기계번역 아키텍처가 올해에 제안된 것을 고려하면 정말 놀라운 결과입니다. 우리(저자들)는 여기서 제안된 아키텍처가 기계 번역과 더 일반적인 자연어 이해를 위한 중요한 스텝이 될 것이라고 믿습니다.

 

 

 

Reference :

https://arxiv.org/pdf/1409.0473.pdf