Deep Learning/CS224N

[CS224N] Machine Translation (MT), Attention

언킴 2021. 9. 3. 16:11
반응형

Contents

     

     

    Machine Translation(MT)는 1950년대부터 연구를 진행해왔다. 이당시에는 주로 Bilingual dictionary를 활용한 Rule-based의 번역 시스템을 사용했고, 1990s~2010s에는 서로 다른 두 언어의 Parallel 데이터로부터 확률 모델을 구축하는 Statistical Machine Translation이 주를 이루었고 2014이후부터 현재까지는 Neural Machine Translation 이 주로 연구되고 있다. 

     

    Statistical Machine Translation

    SMT는 주어진 parallel 데이터로부터 확률 모델(Probabilistic Model) 을 구축하는 것이 핵심이다. 프랑스어를 영어로 번역하는 경우를 예로 들어보자. 프랑스 문장 F가 주어졌을 때 가장 번역이 잘 된 문장 E가 나올 확률을 최대화되는 E를 찾는 것이 목표다.

     

    $\underset{E}{argmax} P(E|F)$

     

    위 식에 Bayes Rule을 적용시키면 다음과 같다. 

     

    $\underset{E}{argmax} P(F|E)P(E)$

     

    $P(F|E)$은 Translation Model 이라고도 하며 단어와 구가 어떻게 번역되어야할지를 모델링하는 것이고, Parallel data 로부터 학습한다. $P(E)$은 Language Model 이라고도 하며 어떻게 좋은 English 문장을 생성할지를 모델링하는 것이며 Monolingual data 로부터 학습한다. 

     

    일단 Translation Model을 학습하기 위해서는 대량의 Parallel data가 요구된다. 충분한 Parallel data가 있다고 가정하면 Translation Model을 학습하기 위해선 Alignment를 학습해야한다고 한다. Alignment는 Source ~ Target 언어 문장 Pair에서 일치하는 단어 또는 구를 찾아서 짝을 지어주는 작업이다. 

     

    $P(F|E) \rightarrow \underset{a}{\Sigma} P(F, a|E) $

     

    기본적으로, best a와 E를 EM-Algorithm을 통해 찾는 방식으로 Alignment를 학습한다. 이외에도 다양한 방법이 존재한다. CS224N에서는 Neural Machine Translation에 초점을 맞추고 강의를 진행하기 때문에 Alignment를 학습시키는 여러가지 방법론에 대해서는 다루지 않았다. 

    여러 방법론 : https://www.aclweb.org/anthology/J93-2003

     

    SMT하는 과정에 Alignment를 최적화 하는 과정은 결코 쉬운 과정이 아니다. 예를들어 Source word에는 있는 단어가 Target word에는 없는 경우도 존재할 수 있고, Source word에는 여러개의 단어로 분리되어 있는 단어들이 Target word에는 하나로 존재하는 경우도 있고, 그 반대의 경우도 있기 때문이다. Source word는 하나가 존재하고 Target word는 여러 단어가 존재하는 것을 본 강의에서는 $fertile word$라고 부른다. ( many-to-many 도 존재한다. )

    Translation Model을 계산하고 난 후 어떤 문장이 Best E 인지 찾는 $argmax$부분은 디코딩과정이라고도 부르고, 모든 가능한 E에 대해서 확률을 계산하는 과정이기 때문에 계산 비용이 많이들기 때문에 Beam-Search와 같은 Heuristic한 Search Algorithm을 사용하여 계산량을 줄이는 방향으로 디코딩 한다. 

     

     

     

    단점

    - 매우 복잡한 구조를 가지고 있다.

    - 여러 subcomponent로 분리된 디자인을 가지고 있다. 

    - feature engineering이 많이 필요하다. 

    - 위 과정을 하기 위해 사람의 노력을 많이 필요로 한다. 

     

     

     

    Neural Machine Translation

    위 SMT의 방식의 문제점을 보완하기 위해서 Neural Machine Translation이 출현하였다. NMT 방식은 여러 subcomponents 로 분리하여 구성하는 것이 아니라, 하나의 Neural Net 모델로 MT를 수행한다. 2014년 이후, 본격적으로 연구되어 현재는 대부분 NMT 기반의 번역기를 사용한다. Encoder - Decoder 2개의 RNN을 이어 붙인 Sequence-to-Sequence 모델이 기본 형태이며 기존의 SMT 방식에 비해, 더 높은 성능을 보여준다. 

     

     

     

    Seq2Seq model architecture

    Encoder - Decoder 2개의 RNN을 연결한 형태

     

    Encoder

    Encoder 부분은 Source sentence의 context 정보를 요약하고, 요약 정보인 last hidden state에 모이게 되고 해당 부분을 Decoder로 전달해 Decoder의 initial hidden state로 사용하게 된다. 

     

    Decoder

    Decoder에서는 Encoder에서 전달 받은 context 요약 정보를 기반으로 target sentence를 생성하게 된다. Decoder RNN은 이런 부분에서 Conditional language Model의 한 종류로 볼 수 있다. $P(y|x)를 direct로 계산이 가능하게 된다. 

     

     

    Seq2Seq

     

     

    그 후 Seq2Seq Model은 하나의 시스템으로 최적화하게 된다. End-to-End로 backpropagation을 수행하게 되는 점이 특징이라고 할 수 있다. Seq2Seq 학습 과정에서 고려해야할 부분 중 Teacher-Forcing 이라는 것이 있다. 

     

    Teacher-Forcing

    Teacher-Forcing은 모델 학습시 Decoder에서 실제 정답 데이터를 사용할 비율을 설정하는 하이퍼 파라미터인데 초기에 잘못 생성한 단어로 인해 계속해서 잘못된 문장이 생성되어 학습이 잘 안되는 것을 방지할 수 있다. 높에 설정할수록 빠른 학습이 가능해지지만, 학습데이터에 Overfit 되는 문제 또한 발생하므로 적절히 설정해야한다. Inference 단계에서는 Teacher-Forcing ratio 를 0으로 설정하여, 모델이 생성한 단어만으로 다음 단어를 추론한다. 

     

    teacher Forcing ratio = 0 

     

     

    Seq2Seq은 오로지 기계번역(MT)에만 쓰이는 것이 아니라 여러 NLP Task에 사용이 가능하다. long text를 encoder에 받아 short text로 Decode로 생성하게 되면 Summarization 문제를 해결할 수 있고, Dialogue system, Parsing, Code generation 등 여러 문제를 해결할 수 있다.

     

    Seq2Seq에서 Decoding을 할 때 사용되는 Searching Algorithms은 다음과 같다. ( optimization ) 

     

    Exhaustive Search Decoding

    모든 가능한 조합의 문장을 전부 생성하고 확률이 가장 높은 문장을 선택하는 휴리스틱한 방법이며, 해당 Searching은 모든 경우를 다 계산하기 때문에 비효율적이라 효율적인 Searching Algorithm을 선택할 필요성이 있다. 

     

    Greedy Search Decoding

    매 스텝마다 가장 확률이 높은 다음 단어를 선택하게 된다. Greedy Algorithm은 항상 최적의 해를 보장하지는 않는다. 

    e.g

    - 나는 너를 사랑해 $\rightarrow$ English 를 기계번역하는 경우를 생각해보자. 

     

    시작 스텝에서 모든 단어들에 대해서 score 값을 계산하고 score값이 가장 높은 단어를 선택 후 나머지 단어는 제거하게 된다. <END> 토큰이 나올 떄 까지 해당 과정을 반복하게 된다.

     

    $I$ : $-0.7$ = $log P_{LM}(I|<START>, x)$ 

    $You$ : $-0.9$ = $log P_{LM}(You|<START>,x)$

    ...

    ...

    ...

    $Love$ : $-0.5$ = $log P_{LM}(Love|<END>,x)$

     

    $score(y_1,\cdots\ ,y_t) = \underset{i=1}{\overset{t}{\Sigma}}logP_{LM}(y_i|y_1,\cdots\ y_{i-1},x)$

     

    Beam Search Decoding

    매 스텝마다 가장 확률이 높은 k개의 다음 단어를 선택한 후 다음 스탭 단어들의 확률을 예측하는 방법이다. k*V개의 후보군 중 또다시 확률이 높은 k 개의 후보군만 선택하고 나머지 단어는 제거한다. 최종적으로 k*k개의 후보군 중에서 가장 확률이 높은 k개의 후보군 만을 유지하게 된다. 단 Beam Search 또한 항상 최적의 해를 보장하지는 않지만, Exhaustive search보다 효율적이고 Greedy search가 놓칠 수 있는 더 나은 후보군을 유지할 수 있다는 장점이 있다. 

     

    Beam Search Decoding과 Greedy Search의 차이점은 단어를 선택하는 곳에서 발생한다. score를 계산하는 방식은 동일하지만 Beam Search 는 score값이 높은 k개의 단어를 선택 후 나머지 단어를 제거한다. 그 다음 스텝의 모든 단어들에 대해서 score값을 계산하고 확률이 높은 k개를 다시 선택한다. 매 스텝 k개의 후보군을 유지하며 <END> 토큰이 될때까지 반복수행한다. 

     

     

     

    장점

    - 더 유창한 번역이 가능하다. (SMT에 대비)

    - 문맥을 더 잘 이용한다. 

    - phase 유사도를 더 잘 이용한다.

    - 단일 모델이며 End-to-End로 최적화하기 때문에 하위 구성 모델들을 개별적으로 최적화할 필요가 없다.

    - 인간의 엔지니어링 노력이 상대적으로 적게 요구된다.

     

    단점

    - 해석하기가 어렵다. ( 문제가 생길시 디버깅이 어렵다 )

    - 컨트롤하기가 어렵다. ( 특정 규칙이나 가이드라인을 번역에 쉽게 적용하는 것이 어렵다. )

     

     

    위 과정등을 통해서 기계번역을 학습시키고 난 후 모델의 성능을 측정하기 위해 주로 사용되어지는 평가지표로는 Bilingual Evaluation Understudy(BLUE)가 있다. 

     

    Bilingual Evaluation Understudy(BLUE)

    모델이 생성한 번역문과 사람이 작성한 번역문의 유사도를 계산하는 방식이다. 정성적으로 더 좋은 문장임에도 불구하고 BLUE Score가 더 낮게 측정될 수 있기 때문에 불완전한 Measure라고도 한다. 불완전한 Measure이기 때문에 이 평가지표를 맹신하는 것은 지양한다. 

     

    e.g.

    n-gram을 통한 순서쌍들이 얼마나 겹치는지 측정(precision)

     

    예측된 sentence

    빛이 쐬는 노인은 완벽한 어두운곳에서 잠든 사람과 비교할 때 강박증이 심해질 기회가 훨씬 높았다.

     

    실제 sentence

    빛이 쐬는 사람은 완벽한 어둠에서 사람과 비교할 때 우울증이 심해질 가능성이 훨씬 높았다. 

     

    $(\underset{i=1}{\overset{4}{\prod}}precision_i ^{1\over4}) = ({10 \over 14} \times \frac{5}{13} \times \frac{2}{12} \times \frac{1}{11} ) ^{1 \over 4}$

     

     

     

     

     

    Attention

    Attention은 Sequence-to-Sequence의 encoder에서 last hidden state의 정보를 decoder에 전달해줄 때 Bottleneck problem이 발생한다고 한다. Bottleneck problem은 문장의 길이가 길어지면 fixed length로 인해 길이가 고정되어 나가는 과정에서 정보의 손실이 발생한다는 문제이다. Attention에서는 Bottleneck problem에 대한 해결책을 제공해주고, Seq2Seq 모델 구조와 잘 맞는다. Core idea로는 Decoder의 매 스텝마다 source sentence의 특정 부분에 집중하기위해 Encoder와 직접적인 연결을 사용한다는 것이다. 

     

    Step1

    현재 Decoder 의 hidden state 와 Encoder 의 모든 hidden state와 dot product를 통해 attention scores(e) 를 계산

    - Basic dot-product attention : ($e_i=s^Th_i$)

    - Multiplicate attention : ($e_i=s^TWh_i$)

    - Additive atteion:

        - $e_i = v^T\ tanh(W_1h_i + W_2s)$

        - $v \in \mathbb{R^{d_3}} :\ weight vector$

        - $d_3 : attention dimensionality (Hyp)$

     

     

    Step2

    앞선 단계에서 계산된 attention scores 들에 softmax 연산을 취해서 스텝에서의 attention score의 확률 분포를 구한다. 

    - $e^t = [e_1, e_2, \cdots\ ,e_N]$

    - $\alpha^t = softmax(e^t)$

     

    Machine Translation 에서 첫번째 단어를 번역하기 위해서는 Encoder에서도 첫번째 단어에 집중을 하고 있다는 것을 알 수 있다.

     

    Step3 

    Softmax 값과 encoder를 의 hidden state 값의 weighted sum을 통해 최종적으로 Attention output vector (= context vector)인 $a_t$를 구한다.

    - $a_t = \underset{i=1}{\overset{N}{\Sigma}} \alpha^t_i h_i$

     

     

    Step4

    Attention output vector인 $a_t$와 현재 Decoder의 hidden state 인 $s_t$를 Concatenate 한 벡터를 이용해 $\hat{y_i}$를 구한다. 

     

    이와 같은 방식을 계속해서 Decoder의 마지막 input 까지 반복하면 된다 .경우에 따라 이전 step의 attention vector와 현재 step의 decoder input과 concatenate 해서 사용할수도 있다. 

     

     

    장점

    - NMT의 성능을 상당히 향상시킨다.

    - Bottleneck problem을 해결할 수 있다.

    - Vanishing gradient problem 을 완화하는데 도움이 된다. 

        - 멀리 떨어진 hidden state 간의 지름길을 제공한다.

    - 모델의 결과물에 대한 약간의 interpretability(해석가능성) 를 제공해줄 수 있다.

        - (Soft) alignment 를 별도로 구성해서 학습하지 않고도 얻을 수 있다. 

        - Network가 alignment 를 학습 과정에서 스스로 학습한다. 

     

     

    Attention 기법은 Seq2Seq 모델 구조 이외의 다른 모델에도 적용이 가능하다. Attention은 qurey 벡터와 value 벡터가 주어졌을 때 Query 에 기반해, value들의 weight sum 을 계산해주는 기법이며, Attention 은 general 한 Deep learning technique 으로 사용이 가능하다. 

    'Deep Learning > CS224N' 카테고리의 다른 글

    [CS224N] Subword Model - BPE, Wordpiece  (0) 2021.09.14
    [CS224N] ConvNets for NLP  (0) 2021.09.06
    [CS224N] Language Model (n-gram, NNLM, RNN)  (0) 2021.09.01
    [CS224N] Parsing  (0) 2021.08.31
    [CS224N] Named Entity Recognition(NER)  (0) 2021.08.31