Curaai00's Deep Learning Blog

Attention, RNNsearch: Neural Machine Translation by Jointly Learning to Align and Translate

딥러닝/기계 번역
Attention

Neural Machine Translation by Jointly Learning to Align and Translate

Attention Mechanism이 처음으로 소개된 논문이다. 논문 내에서는 attention보다 soft-alignment라는 용어를 더 사용한다. 기계번역에 attention을 이용하여 network가 alignment을 학습한다. 기존의 기계번역에서 사용한 알고리즘, 딥러닝 모델보다 더 좋은 성능을 냈다.

용어 정리

시작하기전, 이 포스트와 논문에서 사용하는 용어들을 정리하겠다.

  • Soft-alignment(attention): source word => target에 대한 정보를 스스로 alignment를 학습하여 사람이 직접 알려주지 않는 방법이다.

  • Hard-alignment: source sentence의 word를 target sentence의 word로 사람이 직접 지정해준다. Ex)'I am hungry.', '나는 배고프다.'를 I=>나, am => 는, hungry => 배고프다

  • context vector c: 문장의 의미를 담고있는 fixed length vector이다.

  • Annotation: Encoder의 hidden state를 annotation이라고 부른다. 수식에선 Encoder의 hidden state를 h로 표현한다.

  • hidden state: t번째 input에 대한 정보를 담고 있는 vector이다. 아무런 얘기 없이 hidden state라고 나와있을 경우 Decoder의 hidden state를 말하는 것이다. 수식에서는 Decoder의 hidden state를 s로 표현한다.

  • source sentence $ x^T $, target sentence $ y^T $: 길이가 T인 input, target sequence이다. 여기서 sequence는 word vector의 sequence를 말한다. $T_x$는 x의 길이, $T_y$는 y의 길이이다. $ \boldsymbol{x} = (x_1, \cdots, x_{T_x}) $

기존의 방법들

딥러닝을 이용한 기계번역은 x가 주어졌을 때, Neural Network(Model)로 conditional probability를 최대화 하는 y를 찾는 것이다. Model은 Encoder-Decoder 방식에 base를 두고 있는데, RNN, LSTM, GRU를 네트워크로서 사용한다. RNN을 사용할 경우 아래의 이점을 얻을 수 있다.

  1. input & output length에 제한이 없다.
  2. sequential한 data에 대해 순서(alignment)를 학습할 수 있다. 단어를 번역하여 문장을 번역하는 것이 아니라, 문장 전체를 읽고, 의미를 파악하여 다른언어로 변환한다.
  3. 예외 상황에 강하다 => dictionary을 이용한 알고리즘은 dictionary 외의 단어나 입력이 들어오면 정확도가 떨어지지만, 딥러닝의 경우 Dataset의 분포가 다양하다면 작은 예외 상황에 대해서는 유연하다.

Basic RNN Encoder-Decoder는 다음 수식으로 정의한다.

$$ \begin{align} h_t = f(x_t, h_{t-1}) \label{eq:1} \tag{1} \\ c = q(\{h_1, \cdots, h_{T_x}\}) \label{eq:2} \tag 2 \\ p(y_t | \{ y_1, \cdots, y_{t-1}\}, c) = g(y_{t-1}, s_t, c) \label{eq:3} \tag 3 \\ p(\boldsymbol y) = \prod_{t=1}^T p(y_t | \{ y_1, \cdots, y_{t-1}\}, c) \label{eq:4} \tag 4 \\ \end{align} $$

(1),(2)는 Encoder이고, (3),(4)는 Decoder이다.

  1. nonlinear function인 LSTM을 f로 사용하여, 이전 annotations와 input으로 현재 annotation을 구한다.
  2. Annotations sequence(각각의 annotation $h_t$는 $x_t$의 정보를 가지고 있기 때문에 정보가 encoding된 sequence라고 봐도 무방하다.)는 q함수로 fixed length vector c로 생성된다. 여기서는 $h_T$가 c이다.
  3. (문장의 의미를 담고 있는 c, 이전에 예측한 단어 $y_{t-1}$, 현재의 hidden state)을 입력으로 하여 다음으로 올 단어의 확률을 예측한다.
  4. T까지 예측을 하면 한 문장에 대한 기계번역이 완료된다.

h는 x와 $h_{t-1}$로 구할 수 있고, c는 encoder에서 나온 hidden state sequence에서 생성된다. 이전의 방식은 LSTM을 f로 사용하고, q($h_1$ ~ $h_T$)는 $h_T$로 사용했다.

decoder는 Multi-layer인 g로 (이전의 예측한 단어, 현재 hidden state, c)를 입력으로 하여 다음단어의 확률을 예측한다. 1부터 T까지의 단어를 에측하면 한 문장이 되는 것이다.

Attention, Learning to Align

Encoder

x의 각 단어들을 다른 언어로 바꾸는 과정에서 여러 단어를 하나로 포현할 수도 있고, 하나를 여러 단어로 표현할 수도 있다. 또한 앞뒤 문맥상 단어의 의미가 변질될 수 있다. RNN을 통과한 x인 annotation이 각 단어의 의미를 나타내는 것 뿐만아니라, 앞뒤 근처의 단어들까지 요약한 정보를 가지고 있어야한다. 이점을 Bidirectional RNN을 통해 forward RNN, backward RNN으로 해결한다. 그래서 Encoder의 output은  자세한 것은 Bidirectional RNN을 참고하길 바란다. $h_j = \left \lbrack \overrightarrow{h^{\intercal}_j} ; \overleftarrow{h^{\intercal}_j}\right \rbrack$

Decoder

우리의 목표는 soft-alignment로 Decoder가 번역을 좀더 잘하도록 하는 것이다. 그래서 현재 annotation_t가 y_t와 얼마나 연관이 있는지 알려줘야한다. 사람의 손 없이 말이다.

$$ \begin{align} e_{ij} = v_a^\intercal \ tanh(W_a s_{i-1} \ + \ U_a h_j) \label{eq:5} \tag 5 \\ e_{ij} = a(s_{i-1}, h_j) \label{eq:6} \tag 6 \\ \alpha_{ij} = \frac{exp(e_{ij})}{\sum_{k=1}^{T_x} exp(e_{ik})} \label{eq:7} \tag 7\\ c_i = \sum_{j=1}^{T_X} \alpha _{ij}h_j \label{eq:8} \tag 8 \\ s_i = f(s_{i-1}, y_{i-1}, c_i) \tag 9 \\ v_a \in \mathbb R^{n'}, W_a \in \mathbb R^{n' \times n}, U_a \in \mathbb R^{n' \times 2n} \end{align} $$

annotation $h_j$의 중요도를 반영하는 energy e는 n' size의 matrix v, W, U로 만들어진다. 이 matrix도 학습이 가능하기 때문에 현재 annotation을 y에 대해 네트워크(matrix)로 soft-alignemt를 줄 수 있다. e는 softmax로 확률값으로 바뀌게 되어 각 annotation이랑 합쳐져 context vector c가 만들어진다. 임의로 attention을 만들어본다면

'나는 라면을 먹는다.' => 'I eat ramen' 일때, ramen을 예측한다면,

context vector c = 0.1(alpha) * ([나는]의 hidden state) + 0.7(alpha) * ([라면을]의 hidden state) + 0.2(alpha) * ([먹는다]의 hidden state)

과 같이 나타낼 수 있다.

결과

논문 저자들은 English-to-French 번역으로 모델을 측정하였다. ACL WMT14를 사용했고 BLEU라는 predict setence가 target sentence와 얼마나 같은지를 나타내는 성능측정지표이다.

기존의 모델인 RNN Encoder-Decoder(RNNencdec)과 논문에서 새롭게 제시한 모델인 RNNsearch를 비교하였다. 학습할 때 sentence의 word length에 제한을 두어 학습했다. (RNNencdec-30/50, RNNsearch-30/50)

모델

RNNencdec, RNNsearch 모두 Encoder와 Decoder의 hidden units(hidden state)이 각각 1000개씩 이다. target word에 대한 conditional probability를 계산하기 위해 두 모델 모두 single maxout hidden layer를 사용했다.

Adadelta로 minibatch는 80sentence로 학습시켰다고 한다.

분석

attention, soft-alignment의 장점은

  1. 사람의 word2word labelling이 필요없다.

  2. matrix이기 때문에 네트워크로서 학습할 수 있다.(모델의 component로서 추가적인 처리가 필요없음, gradient를 공유함)

  3. 언어모델에 대해 적합한 특성을 가지고 있다.

    Soft-alignment가 hard-alignment와 다르게 좋은점은, 언어는 유연하다는 점 때문이다. 예를들어 한국어와 영어를 예를 들어보자면 "My grandfather have dinner."이 문장하나를 한국어로 바꿔보면

    • "할아버지가 저녁을 먹는다"
    • "할아버지께서 저녁을 먹는다"
    • "할아버지가 저녁을 드신다"
    • "할아버지가 밥을 먹는다"
    • "할아버지가 진지를 드신다"
    • "우리 할아버지가 저녁을 먹는다"

    등 언어별로 문법이나 번역 형태가 다르다. network는 예외 상황에 대해 스스로 학습한다. 또한 x와 y의 길이가 달라 hard alignment가 불가능해도 soft-alignment는 가능하다.

이 3가지 정도가 있다.

그림은 attention(annotation weight alpha_ij)을 visualization한 것이다(0: black, 1:white). x축은 source sentence(English)이고 y축은 예측번 번역 문장이다(French). 보다시피 matrices의 diagonal이 대부분 강한 weight를 띄고 있다.

(a)는 문장의 attention을 visualization한 것이다. (b),(c),(d)는 test set에서 sample로 뽑힌 setences이다.