Sequence Models & Attention

Sequence Models & Attention

  • Various Sequence To Sequence Architectures
  • Speech Recognition - Audio Data

Various Sequence To Sequence Architectures


Basic Model

sequence 2 sequence model은 기계 번역부터 음성 인식까지 다양한 분야에 있어서 매우 유용하다.

trans

위의 프랑스 문장을 아래의 영어 문장으로 번역하는 것이 목표라고 해보자. 우리는 평소와 같이 문장의 각 단어를 sequence로 표현한다. sequence x를 input으로 넣으면 sequence y를 output으로 주는 모델을 어떻게 학습시킬 수 있을까?

encdec

(Image:wikidocs)

첫번째로 할 일은 Encoder 라고 불리는 RNN 신경망을 만드는것이다. 앞서 배웠던 GRU,혹은 LSTM으로 구성되어 한 time step에 하나의 단어를 입력 받는다.

모든 단어들을 입력받은 뒤, 정보들을 압축하여 입력된 문장을 나타내는 context vector를 내보낸다.

그리고 context vector를 input으로 받는 Decoder라고 불리는 RNN 신경망에 들어간다.

decoder는 기존의 RNN language 모델과 비슷하게 작동하며 한 time step에 하나의 y를 출력하며 < eos >가 예측 단어로 나올 때 까지 진행한다. (Learning과 testing과정에서 작동하는 방식이 다르며, 추후에 설명)

이같은 Encoder-Decoder model은 Image Captioning에서도 매우 잘 작동한다. CNN에서 feature 학습을 마친 pre-trained 신경망을 encoder로 사용하고, 마지막 softmax 대신 decoder를 도입하면 feature들을 sequential하게 입력받으며 Image captioning을 할 수 있다.

Machine Translation, Image captioning 같은 기본적인 sequence to sequence model을 알아보았다.

이 모델과 앞에서 소개한 language model을 사용한 novel text을 생성하는 모델에는 다음 단어를 'random' 하게 선택 하느냐 'Most likely' 하게 선택하느냐의 차이점이 있다고 할 수 있다.

encoder-decoder model을 conditional language model 이라고 표현할 수 있다.


Picking the Most Likely Sentence

prob

Machine translation에서, 프랑스 문장 x에 대해 결과로 나올 수 있는 영어 문장을 구성하는 단어의 확률들이 나온다.

우리가 원하는것은, novel text sampling과 같이 가능성이 있는 후보들 중에서 random하게 뽑는것이 아니라, 조건부 확률을 극대화 하는 영어 문장을 찾는것이다.

위에서 말한 극대화는 각각의 time step마다 최선의 y^< t >를 선택하는 Greedy algorithm과는 개념이 다르다.

프랑스 문장에 대한 번역 후보로

"Jane is visiting Africa in September"

"Jane is going to be visiting Africa in September"

라는 두 문장이 있다고 해보자. 밑의 후보도 나쁜 수준의 번역은 아니지만, 불필요한 단어가 없는 1번 문장이 더 최선의 번역이라고 할 수 있다.

하지만 Jane is 다음의 단어를 선택할 때, 확률적으로 visiting 보다 going이 나올 확률이 더 높을것이고 greedy하게 선택한다면 going을 선택하게 될 것이다.

따라서 현재에서 최선의 선택이 아닌, 번역 결과 문장 y 의 전체에 대해 최선의 선택을 해야한다.

최대 10개의 단어로 된 문장을 도출한다고 해도 vocab의 크기가 10000이면 10000^10의 경우의 수를 검사해야 하므로 전체를 살펴볼 수 없다. 그렇기에 우리는 Beam Search와 같은 검색 알고리즘을 사용해야 한다.


Beam Search는 앞서 말한 전체 문장에 대한 최적의 선택을 검색하는데에 가장 많이 쓰이는 알고리즘 중 하나다.

각 step마다 B개만큼의 상위 결과를 추려내는 식이다. B는 beam search의 parameter

예제의 영어문장을 번역하는 과정에서 B=3일때 Beam search를 적용하면 다음과 같다.

beam

제일 첫 단어로 도출될 수 있는 가장 높은 확률의 단어 3개를 선택하고, 각각 1만개에 대해서 또 제일 최선의 선택을 한다. 이를 eos가 나올때 까지 반복하면 된다.

해당 과정은

beameq

위와 같은 과정을 중첩시키고

beam2

최종적으로 위의 식을 만든다.

연속적으로 확률들을 곱하는 과정은 1 이하의 작은수를 연속적으로 곱하기 때문에 값이 너무 작아져서 컴퓨터의 float 로 값을 표현하면 부정확해질수가 있다. 따라서 우리는 단조 증가 함수인 log를 취해준다.

beam3

그런데 사실상 log를 취해도 작은 범위에서 계산이 일어나는 것은 마찬가지이기 때문에 일종의 trick으로 argmax 대신 normalize를 해주는 것 처럼 전체 단어의 개수 T_y로 나누어 준다. (alpha는 0~1사이의 수.)

beam4

문장길이 T_y까지 생성되는 모든 문장에대해서 위의 식으로 점수를 매기며 B개만큼 산출을하고, 최종적으로 나온 문장들 중 점수가 가장 높은 1개를 선택하면 된다. (normalized log likelihood objective라고도 불림.)

그렇다면 B의 값은 어떻게 정하는 것이 제일 적절할까? B가 클수록 고려할 수 있는 문장이 더 많아지고 좋은 문장을 찾을 가능성도 늘어나지만 그만큼 계산량이 커지는 tradeoff를 잘 고려해야할 것이다. 한가지 주의할 점은, Beam search는 DFS,BFS와 같이 정확한 결과를 보장하지 못하는 heuristic 알고리즘 이라는것이다.


Beam search를 사용하면 RNN model이 잘못된 것인지, beam search의 세팅이 잘못된 것인지 판별할 수 있다.

계속 나왔던 프랑스 문장에 대한 해석에 대해 사람은 "Jane visits Africa in September" 를 제시하고 모델은 "Jane visited Africa last September" 라고 결과를 도출했다고 해보자. 우리는 사람이 제시한 문장이 더 깔끔한 번역이라고 쉽게 알 수 있다.

이 두문장을 이용해서 Error analysis를 할 수 있는데, 방법은 다음과 같다.

사람이 제시한 문장을 ystar 라고하고 모델이 제시한 문장을 yhat 이라고 할 때 P( ystar | x ) 와 P(yhat | x) 를 계산하고 비교하면 된다.

만약 **P( ystar | x ) > P(yhat | x) ** 인 경우 우리가 예상했던 것 처럼 사람의 결과보다 beam search를 통해 도출해낸 결과의 성능이 떨어지는 것이므로, B를 조정해보는 등의 시도를 해볼 수 있다.

빈면 P( ystar | x ) < P(yhat | x) 인 경우는 사람의 문장이 더 나은 번역인 것이 자명한 상황에서 측정한 score는 모델의 결과가 더 높게 나왔기 때문에 Model을 고치는 시도를 해야할 것이다.


BLEU Score

Machine Translation은 Image recognition처럼 높은 정확도라는 하나의 정답만 있는것이 아니라, 충분히 좋은 정답이 여러가지 나올 수 있다. 그렇다면 충분히 좋은 정답들이 여러개 있다면 평가는 어떻게 해야할까? 그 방법이 바로 BLEU Score다.

BLEU score는 Model이 만들어 낸 문장과 레퍼런스 문장 사이의 유사도를 측정하는 개념이다.

ex)

French : Le chat est sur le tapis.

Reference1: The cat is on the mat.

Reference2: There is a cat on the mat.

Model Output: the the the the the the the.

위와 같은 Reference와 Model의 번역 결과가 있다고 할 때 평가하는 방법은 Model 문장 단어의 Count와 그 단어에 대한 Reference 문장에서의 최대 출현 수인 Count _clip을 나누는 것이다.

Model의 결과에서 'the' 는 7번 나오고, Reference 1에서는 2번, 2에서는 1번 나오므로 Count =7, Countclip= 2가 되고 BLEU Score 는 countclip / count = 2/7 이라고 말할 수 있다.

하지만 이렇게 하나의 단어 단위인 unigram으로 평가를 할 경우 순서 를 고려하지 못한다는 문제가 있다. 이를 해결하기 위해 n-gram으로 확장하여 사용한다.

n=2인 bigram인 경우를 살펴보자.

ex)

Reference1: The cat is on the mat.

Reference2: There is a cat on the mat.

Model Output: The cat the cat on the mat.

단어를 2개 단위씩 끊어 만들 수 있는 bigram의 테이블은 아래와 같다.

bigram

따라서 count_clip/count = 4/6이된다.

n-gram의 식을 일반화 하면

ngrameq

로 표현할 수 있다. 일반적으로, BLEU score를 측정할 때는 보통 n=1 ~ n=4까지의 측정한 P의 값을 합친 후 평균으로 나눈다. (혹은 P_n에 log를 취해주는 경우도 있음.)

bleueq2

하지만 아직까지도 문제가 존재한다. BLEU score가 짧은 문장일 경우 비교적 높은 점수를 받기 쉽다는것이다.

이를 방지하기 위해 BP 라는 패널티 함수를 곱해준다.

bp

따라서 최종 식은 아래와 같다.

bleuf


Attention Model

Attention model은 Encoder-Decoder 모델을 보다 잘 작동하게 만들어준다. Attention은 NLP뿐 만 아니라 Deep Learning의 전반적인 발전에 큰 기여를 한 중요한 알고리즘이다. 가장 대표적인 논문은 Google의 "Attention is all you need" 을 보면 좋을 것 같다.

Encoder-Decoder 모델이 대상 문장을 모두 읽은 다음 activation을 거쳐 번역을 하는것과 달리, 사람은 문장을 번역할 때 문장의 일정 부분을 읽고, 그 부분에 대한 번역을 생각한다.

우리가 긴 문장을 한번에 외우고 번역하기엔 기억력의 한계가 있는 것 처럼, Encoder-Decoder 모델도 입력 문장의 길이가 길어질수록 성능이 저하된다. 이런 점에서 Attention은 인간이 번역을 하는 과정과 좀 더 유사하다고 볼 수 있다.

Attention은 Decoder에서 time step마다 결과를 출력하기 위해 Input 문장을 다시 본다. 특히 지금 시점에서 입력 문장의 어느 부분들을 더 집중적으로 참고하여야 할지 가중치를 둔다.

attention

Attention model의 흐름을 나타내면 위와 같다. 우선 Bidirection RNN 에 대하여 propagation을 하여 a^< t > 벡터를 계산한다. 그 후 Decoder 모델은 Context c, activation s^< t-1 >, 그리고 전 step의 출력값 y^< t-1 > 를 받아 y^< t >를 계산한다. 이것을 eos가 나올 때 까지 반복한다.

c

여기서 Context 를 나타내는 c는 위와 같이 계산이 가능하다.

at

a^<t'>은 Encoder의 time step t'에서의 양방향 벡터를 묶은것을 의미한다.

theta^<t,t'>는 Decoder의 time step t 에서 y^< t >가 Encoder의 time step t'의 a^<t'> 을 어느정도로 attention 해야 하냐의 척도가 된다.

et

s와 a를 입력받아 신경망으로 학습시켜 e^<t,t'>를 구한 뒤, 모든 t'에 대하여 softmax를 취해 theta를 구한다.


Speech Recognition

sequence to sequence model을 도입하고나서 Speech Recognition(음성 인식)의 정확도는 비약적으로 올랐다.

현재 이시간에도 더 좋은 방법이 나오고 있으며, 아직까지 정석으로 존재하는 방법은 없다. 여기서 소개하는 내용도 오래됬다면 오래된 기본적인 개념을 소개한다.

Speech Recognition은 기본적으로 audio clip x를 input으로 받고 그에 대한 transcript y를 결과로 내놓는 모델이다.

옛날에는 음성을 phonemes(음소)로 pre-processing을 거치는 것이 Speech Recognition을 잘 수행할 수 있는 기본으로 생각했다. 하지만 Deep Learning이 발전하고, 점점 더 큰 음성 데이터셋이 구축되면서 이 과정이 필요 없이도 매우 뛰어난 음성 인식이 가능함이 밝혀졌다.

그 중 한가지 방법이 Attention model을 사용하는 것이다.

attsr

연속된 오디오의 연속적인 입력값을 time step에 따라 처리할 수 있다.

또다른 방법은 CTC(Connectionist Temporal Classification) cost를 사용하는것이다.

ctc

CTC는 input의 time step과 output의 time step이 같은 RNN(GRU,LSTM,etc..) 구조를 사용한다.

오디오 파일의 특성은 Input의 time step이 output의 time step보다 훨씬 크다.

예를 들어 100hz로 구성된 10초짜리 파일은 초당100개 *10초 의 1000개의 time step으로 이루어지지만, 그에 반해 output은 몇글자 안되는 문장일 것이다.

CTC 알고리즘을 사용하면 오디오 파일에 대하여 다음과 같은 출력을 얻을 수 있다.

ex) ttt _ h _ eee _ _ _ _ _ _ qqq _ _

CTC는 띄워쓰기(space)와 구분되는 빈칸(blank _ ) 라는 특별한 문자를 사용하여 실제 결과보다 훨씬 큰 time step의 결과물을 출력하게 해준다. 그리고 CTC cost function의 최종 목적은 blank 으로 구분되지 않은 연속된 문자들을 축소하는 것이다.

결과적으로 위의 예제는 최종적으로 'the q' 가 될 것이다.

연관글