1. Applications of RNNs
→ Many to one
텍스트 분류가 many to one 태스크에 해당된다.
language classification, sentiment analysis 모두 이에 해당된다.
→ One to many
Image Description이 이에 해당된다.
(하나의 사진에 대해서 사진을 설명하는 문장으로 출력이 되는 task)
→ Many to many
Language model을 변형하고 새로운 조건들을 부여하여
ai model이 기계번역, 요약, 대화, 파싱, 코드 생성.. 등 다양한 자연어처리 task를 해낼 수 있도록 한다.
i/o 모두 sequence (=many) 임을 확인할 수 있다.
" Neural Machine Translation (NMT) is a way to do Machine Translation with a single end-to-end neural network.
The neural network architecture is called a sequence-to-sequence model (aka seq2seq) and it involves two RNNs. "
2. RNN Language Model & Text Generation
저번에 RNN의 기본 구조를 알아보고, RNN을 이용하여 many to one task (text classification)도 수행해보았다.
이번에는 RNN을 Language Model (many to many task)에 적용하는 방법에 대해서 알아본다.
시점(time step)개념이 도입된 RNN으로 언어 모델을 만들면 입력의 길이를 고정하지 않을 수 있다!
이렇게 RNN으로 만든 언어 모델을 RNNLM(Recurrent Neural Network Language Model)이라고 한다.
x_t 는 [Vocab size] 차원의 원-핫벡터이다.
E는 pretrained 임베딩 테이블 (룩업테이블)을 이용한다. 만약 사전학습된 테이블을 쓰지 않는다면, 랜덤 초기화해서 end-to-end 학습과정에 포함시켜 학습시킬 수 있다.
E의 차원은 [Vocab size] * [embedding size] 이 될 것이다.
따라서 e_t 는 [embedding size] 차원의 벡터로 변환된 것이다. (vocab size >> embedding size)
이전 시점(t-1)의 hidden vector h_t-1 + e_t 로 현재 시점(t)의 hidden vector : h_t를 구한다. (Recurrent neural net)
이때 각각 파라미터 W_e와 W_h를 곱해준다.
h_t를 구할 때 이용하는 위 그림에서의 함수 f는 보통 tanh함수를 이용한다.
U는 각각의 hidden vector (여기서 hidden vector의 차원 = RNN에서 정해주는 차원)를 다시 vocab size의 벡터로 변환해준다. (dense layer, Linear translation)
예측값 y_t 와 gt 값을 비교하여 cross-entropy loss를 계산하고 이를 바탕으로 loss가 작아지도록 가중치를 업데이트 한다.
→ 여기서 학습되는 파라미터는 (E), U, W_h, W_e 이다.
원래대로라면, t시점에 예측한 값이 t+1 시점에 새로운 예측할 때의 입력으로 들어가게 된다.
하지만 이렇게 하지 않고 t시점의 실제 정답값을 t+1 시점의 입력으로 넣어주어 훈련을 시키는 훈련방법을 "Teacher Forcing" 이라고 한다.
이 방법은 훈련과정에서 틀린 예측값을 계속 활용하여 학습이 부정확해지거나 느려지는 현상을 개선해준다.
여기서 중요한 부분은,
RNN의 특징 : W_e, W_h가 공유된다는 것!
즉, 하나의 통일된 파라미터가 계속 사용되므로 가변적인 sequence의 길이에 대해서도 적용이 가능하게 되는 것이다.
다만, 'Multilayer RNN LM' 의 경우는 layer가 여러 개인 경우에 해당하는데, 파라미터가 공유되지 않는다. (물론 하나의 레이어 내에서는 공유하게 됨) 따라서 학습해야 할 파라미터가 많아진다. (참고 : 간단한 text 분류의 경우 layer가 많다고 성능이 좋아지는 것은 아니라고 한다. 따라서 보통 layer 1~2개까지만 쌓거나 LSTM을 이용한다고 한다.)
3. Machine Translation : 기계번역
- RNN LM을 확장시킨 대표적인 예시 : 기계번역!
- "Language Model" : 말을 만드는, 예측하는 모델 → "Machine Translation" : 언어모델이 가지는 특수한 목적 여러 가지 중 하나, 번역을 수행
- 기존의 RNN for 텍스트 생성은 계속 그 다음 단어를 예측해냄
- 하지만 기계번역은 1언어에서 2언어로 번역될 때, sequence의 길이가 다르기 때문에 그 different sequence length를 처리할 수 있는 모델이 필요함
예 ) English : the black cat drank milk (5 words)
French : le chat noir a bu du lait (7 words)
[ Encoder - Decoder model ]
1언어의 sequence의 모든 정보를 'Encoder'에서 인코딩되고,
이렇게 인코딩 된 결과는 'Decoder'에서 제 2언어로 번역되어 디코딩, 출력된다.
이렇게 2개의 RNN으로 구성된 인코더-디코더 모델을 sequence to sequence model이라고도 부른다.
인코더에서 모든 단어들에 대한 정보를 담은 context vector가 출력되면,
이 context vector와 special token인 <SOS> 토큰을 decoder가 받아들여 디코딩을 시작한다.
[ Training model ]
Encoder-decoder model을 훈련시키는 방식은 아래와 같은데,
우측 상단의 식은 cross-entropy loss을 구하는 산식이다. 이 Loss를 최소화하도록 훈련이 된다.
이 과정에서도 teacher forcing (교사강요)를 이용할 수 있다.
[ Inference (Decoding) ]
Greedy Inference와 Beam search 방식이 있다. text generation에서는 다음 위치에 올 단어를 확률 기반으로 예측한다. 각각의 시점 t에 출력될 수 있는 단어의 종류는 다양히 있고 이를 조합하면 다양한 문장이 생성될 수 있다.
이 때 vocabulary에 있는 단어들 중 가장 나올 확률이 높은 단어로만 선택하여 텍스트를 생성해나가는 inference 방식을 : greedy inference라고 한다. 하지만 한 번 n번째 단어로 특정 단어를 선택한 이후, n+1번째 단어를 선택하면서 문장이 어색해지더라도 다시 돌아갈 수 없으며 이에 따라 가장 높은 확률의 단어들로만 뽑아서 조합한 문장은 완벽하지 않을 수 있다는 문제가 있다.
Beam search 방식은 다음으로 출력될 수 있는 단어 후보의 갯수(k=beam size, practically 5~10)를 정하고, 그 후보들로 <EOS> 토큰이 생성될 때까지 문장을 생성하는 방식이다. (각각의 문장을 hypothesis라고 부름) hypothesis score은 joint probabaility로 계산되며, 이 score가 가장 높은 hypothesis가 최종 선택 문장이 된다. (단, 문장이 길어지면 probability가 작아질 수 밖에 없어서 문장의 길이로 점수를 정규화해준다.) 우측 그림은 k=2인 경우의 도식이다.
[ Problems w/t encoder-decoder model ]
encoder (RNN) 에 decoder (RNN)을 붙임으로써 seq to seq의 태스크가 가능해졌다!
하지만 이 모델에는 어떤 문제점이 있을까?
- 질의응답 task의 경우와 같이, input이 매우 긴 경우에 그 긴 input을 제한된 크기의 context vector에 담아야한다는 병목현상이 발생한다.
→ 따라서 'Attention'이 등장하게 되었다. (seq 2 seq with Attention)
[ Solution : Attention ]
원래 방식 (encoder-decoder model)은 마지막 hidden vector를 decoder의 input으로 입력했다.
이 마지막 hidden vector가 소스 문장의 모든 정보를 담아야 했기 때문에 병목현상이 발생했다.
하지만 이제는 모든 시점에서 decoder는 encoder에 입력되는 매 시점의 input으로부터 더 관련이 높은 input을 참고하여 output을 생성한다.
Attention의 원리에 대해서는 이전 글에 자세히 작성한 적이 있으므로, 여기서 attention에 대한 설명은 생략한다.
4. Machine Reading Comprehenstion (MRC) : 기계 독해
긴 문장, 문서를 기계가 읽고 이해함을 요하는 태스크!
얼마나 잘 이해하는지, 그 이해 정도를 평가하기 위해서 검증용 QA Task가 나오게 된 것이다.
(질문에 대한 답을 정확히 한다면, Reading comprehension의 능력이 잘 학습되었다고 판단할 수 있는 것임
"Since questions can be devised to query any aspect of text comprehension, the ability to answer questions is the strongest possible demonstration of understanding." )
MRC 연구에 따라 NLP에서 전통적인 (통계적인) 추론에서 벗어나 머신러닝, 딥러닝으로 문제를 해결하기 위한 연구가 발전하게 되었다.
현재는 reading comprehesion 능력을 넘어 REASONING (추론) 능력을 요하는 연구가 활발히 이루어지고 있다.
아무튼 MRC는 기계독해를 평가할 수 있는 데이터셋의 등장과 함께 해당 데이터셋에 대한 리더보드에서의 경쟁에 따라 모델이 발전되어 왔다. 따라서 CNN/Daily Mail Dataset, Standford Question Answering Dataset (이하 SQuAD), Open-domain QA를 살펴보며 태스크를 수행하기 위해 디자인된 모델들에 대해서도 살펴보겠다.
[ CNN/Daily Mail Datasets ]
CNN/Daily mail dataset은 CNN과 데일리 메일 뉴스 기사에서 만든 closed-style의 독해력 데이터셋이다.
'closed-style'은 누락된 단어를 추론해야 한다는 의미이다. 'Question'을 만들기 위해서는 기사를 요약한 문장에 있는 'entity'를 빈칸으로 두고 기계가 독해를 통해 맞추도록 하였다. 기사에서 핵심 entity들은 entity marker라고 불리는 @entity#로 대체되어, 모델이 참고할 'Passage'로 쓰인다. 모델은 해당 기사의 내용을 기반으로 'Question'에서 누락된 entity를 추론하는 작업을 수행하게 된다.
위의 예시와 같이, Passage가 주어졌을 때 Question 속 placeholder에 들어갈 적합한 entity#를 찾아내야 한다.
해당 task를 해결하기 위해 제시된 방법1은 'Entity-Centric Classifier' 이다. feature engineering의 작업을 통해 candidate entity에 대해 아래와 같은 식을 적용하여 최종 답을 찾아내는 전통적인 feature-based classifier 방식으로, 성능개선에 한계가 있었다.
이와 달리 end-to-end neural net으로 학습시킬 수 있는 Attentive Reader의 구조는 아래와 같다.
위와 같은 기본적 attentive reader 구조를 토대로 DeepMind Attentive Reader가 2015년에 발표되었고, 이후 attention 연산 방식만 수정하여 나온 것이 Stanford Attentive Reader로, 2016년에 발표되었다.
[ Stanford Attentive Reader (2016) ]
https://www.aclweb.org/anthology/P16-1223.pdf
▶ Attention
- BiLSTM 양방향으로부터 나온 hidden state를 concat하여 question vector를 얻음
- 마찬가지로, BiLSTM의 양방향 hidden state를 concat 하여 문장 내 단어 개수 만큼의 passage vector를 생성함
- question embedding (q)와 모든 contextual embeddings ( ˜ pi ) 를 비교하여 q와 관련이 있는 정보를 P(passage)에서 찾는다.
- probability distribution α 계산 : 문맥상에서 단어 pi와 질문 q의 연관도에 따라 계산됨 :: αi = softmax i ( q⊺ Ws ˜ pi )
(Ws ∈ Rh× h is used in a bilinear term, allows us to compute a similarity between q and ˜ pi more flexibly than with just a dot product.)
- output vector o 계산 : 모든 contextual embeddings {˜ pi}의 weighted sum :: o = sigma( αi ˜ pi )
▶ Prediction
- 가장 답이 될만한 a를 output으로 예측한다.
- (W_a)⊺ o 에 softmax함수를 씌우고 negative log-likelihood 계산으로 loss를 최소화하는 방식으로 훈련시킨다.
[ DeepMind Attentive Reader (2015) ]
https://arxiv.org/pdf/1506.03340.pdf
passage (이 논문에서는 document(d)라고 표기)에서 양방향 lstm의 인코딩 결과를 concatenate한 벡터를 y_d,
question으로부터 같은 작업을 한 output 벡터를 u라고 한다.
위 식에서 m(t), s(t)를 보면 stanford attentive reader와 다른 방법으로 attention연산을 수행함을 확인할 수 있다.
BiLSTMs + attention models 가 semantic matching을 학습하는데 뛰어난 모델 디자인임을 확인했다.
여기서 이 모델들이 정말로 passage + question에 대한 answer을 entity없이도 잘 할 수 있는지 확인하기 위해서
QA Dataset을 만들었고, 이 데이터셋이 "Stanford Question Answering Dataset" (이하 SQuAD)이다.
[ SQuAD ]
SQuAD : 100,000+ Questions for Machine Comprehension of Text
이전 데이터셋과의 차이 : In contrast to prior datasets, SQuAD does not provide a list of answer choices for each question. Rather, systems must select the answer from all possible spans in the passage, thus needing to cope with a fairly large number of candidates.
위의 cnn/dailymail dataset의 정답을 예측하는 과정은 passage내에 정해진 entity가운데 정답을 구하는 것이었지만
이번 SQuAD dataset에서는 passage 내에서의 'span'에서 start position과 end position을 예측하는 방식이다.
따라서 두 가지 예측-gt에 대한 loss가 최소화되도록 하는 방향으로 학습이 된다.
이렇게 학습을 할 때 가장 예측에 실패하는 경우가 많은 case는 숫자와 관련된 예측을 하는 경우라고 한다.
SQuAD는 여전히 QA 데이터로 활용하기에 한계가 존재한다. Question은 span select로 answer을 모델이 출력할 수 있도록 하는 범주의 질문으로만 작성되어야 하고, 크라우드소싱으로 질문을 human이 만들 때 passage를 기반으로 만들기에 단어 자체가 매우 겹치도록 만들 수 밖에 없다.
[ Open-domain QA ]
Reading Wikipedia to Answer Open-Domain Questions
출처
- 학교 수업 "자연어처리"의 내용을 바탕으로 작성되었습니다.
- cs224n lecture 7의 내용을 참조하여 작성되었습니다.
'Study > 자연어처리' 카테고리의 다른 글
Attention & Transformer (2) (0) | 2024.04.10 |
---|---|
Attention & Transformer (1) (0) | 2024.04.10 |
Text Classification (+Benchmark & Evaluation) (0) | 2024.03.24 |
[cs224n] Lecture 15 - Code Generation (0) | 2024.03.24 |
Gemma (1) | 2024.03.09 |