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이다.

GRU: Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

딥러닝/자연어처리
[GRU]Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

[GRU]Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

기존의 Statistical Machine Translation은 통계와 확률 기반으로 문장을 번역했습니다. 하지만 Deep Learning을 도입하였더니 더 좋은 성능을 보이기 시작했습니다. RNN을 이용한 새로운 방식의 Translation을 선보이고 더욱더 간편한 RNN hidden cell 구조를 선보였습니다.

RNN Encoder-Decoder

새로운 Encoder-Decoder 방식의 RNN은 variable-length input sequence를 encode하여 고정된 길이의 vector로 표현하여 다시 variable-length output sequence로 decode합니다. 이때 vector c는 각각의 단어 혹은 문장의 의미를 가지고 있다고 할수 있겠죠. Decoder는 vector c에서 번역할 언어로 decoding 하며 재표현한다고 볼수 있습니다.


Encoder는 x_1 부터 x_t까지 읽으며 RNN cell을 업데이트하고 RNN의 hidden state는 summary c가 됩니다.

Decoder는 input sequence의 context를 담고 있는 c와 이전의 hidden state, y를 이용하여 hidden state를 다음과 같이 업데이트 합니다.

또한 Decoder는 이전의 y값들과 context c, 현재 hidden state를 이용하여 t번째 y 값의 확률을 예측(softmax)합니다.

RNN Encoder-Decoder는 합쳐져 conditional log-likelihood를 최대화하는 Network로 표현될수 있습니다. n번째 x에 대해 n번째 y를 최대로 하는 확률을 maximize 하는 network Θ를 찾는 것입니다.

이 RNN 아키텍쳐를 두가지 방법으로 사용할 수 있습니다.

  • 하나는 input sequence로 target sequence를 생산하는 것입니다.
  • 또 하나는 input과 output sequence를 줬을 때 모델이 한쌍에 대한 score를 얻을 수 있습니다. (4)의 x에 대한 y의 확률을 이용해서 말입니다.

Gated Recurrent Unit



GRU는 reset gate와 update gate가 있습니다. sigma 기호는 sigmoid function을 나타내고, phi 기호는 tanh function을 나타냅니다. 그리고 W와 U는 weight matrices입니다. x는 input, h는 hidden state를 나타냅니다.

  • reset gate는 수식 (5)로 계산되며, 이전의 hidden state가 무시될지 결정합니다.

  • update gate는 수식 (6)으로 계산되며, hidden state가 h^hat으로 update될지 결정합니다.

  • reset gate가 0에 가까워질수록 hidden state가 이전 hidden state를 무시하도록 하며, 현재의 input만을 reset하도록 합니다. update gate는 이전의 hidden state의 정보가 현재의 hidden state까지 전달되도록 조종합니다.

Statistical Machine Translation

우리의 목적은 original source e를 줬을 떄 번역 f를 찾는 것입니다. 식으로 표현한다면 다음과 같겠죠. 즉 source로 번역(target)을 찾을 확률과 source가 target으로 완전히 번역되는 확률을 비례하려합니다.

이를 log 선형 모델로 나타낼수 있습니다. f_n과 w_n은 n번째 feature와 weight입니다.

Z(e)는 w에 의존하지 않는 normalization 상수입니다. w는 BLEU score를 최적화하기 위해 종종 최적화됩니다. log p(e | f)는 source와 target에 매칭되는 구(phrase)를 맞추는 확률들로 분해될 수 있습니다. 이 확률이 추가적인 feature로 표현된다면 (9)와 같습니다.

RNN Encoder-Decoder를 학습할때에는 corpus(말뭉치?)에서 각 구(phrase) pair가 얼마나 자주 나오는지에 대해서는 무시합니다.

  1. large phrase frequency table(큰 구 빈도 테이블)에서 일반화된 빈도수의 phrase pair를 선택하여 연산량을 막기 위함입니다.
  2. RNN Encoder-Decoder가 phrase pair의 translation probability가 이미 phrase fair의 빈도수를 반영하고 있기 때문에 쉽게 학습되지 않기 때문입니다.