[NLP] Improving Language Understanding by Generative Pre-Training
이번에 소개할 논문은 2018년도 OpenAI에서 발표한 “Improving Language Understanding by Generative Pre-Training”라는 제목의 논문이다.
이 글을 소개하는 현시점 ChatGPT로 이미 많은 사람들에게 친숙해진 모델의 초기 버전인 GPT 1.0 논문이고 이후에 나온 2.0, 3.0 등등 순차적으로 다룰 예정이니 천천히 이해해보자.
논문 링크 : https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf
Generative Pre-training language model로 언어 모델의 자연어 이해 능력을 높여보자!
Abstract
자연어 이해(Natural language understanding)는 텍스트 추론(textual entailment), 질문 응답(question answering), 의미 유사도 평가(semantic similarity assessment), 문서 분류(document classification) 등 다양한 작업이 있다.
레이블이 없는 text corpora(말뭉치)는 많지만 특정 task를 학습하기 위해 레이블 되어있는 데이터는 매우 적다. → 이로인해 모델이 판별적으로 적절해 동작하는게 어렵다.
"generative pre-training"과 "discriminative fine-tuning"을 통해 이런 문제들을 해결할 수 있음을 보였다. 여기서 Generative Pre-training은 레이블이 없는 수 많은 데이터를 이용해 language model을 pre-training하는 것이고 Discriminative fine-tuning은 pre-trained model을 각 task에 맞게 fine-tuning하는 과정이다. 이를 이용해서 각 task에 맞도록 input을 변환해 사용했고 transfer learning을 더 잘 할 수 있게 되었다. 이때 모델 구조의 최소한의 변화만 가지고도 좋은 성능을 달성했다는 점이 특징이다.
이런 방법을 적용해 여러 자연어 이해에 대한 benchmark에서 효과를 확인하였고 일반적인 model이 다른 task에 특화된 모델들에 비해서 더 좋은 성능을 보였다.
Introduction
NLP에서 supervised learning에 대한 의존을 줄이기 위해서 raw text로부터 효과적으로 학습을 하는 것이 중요하다. 대부분 딥러닝 모델들은 레이블이 달린 수많은 데이터가 필요한데, 이는 레이블이 부족한 많은 분야에서 적용을 제한한다.
이런 상황에서는 unlabeled 데이터로 언어 정보를 활용할 수 있는 모델이 대안이 된다. 데이터를 labeling하는 것은 시간과 비용이 많이 들기 때문이다.
더욱이 이미 수많은 레이블이 존재해 supervised 학습을 할 수 있어도 unsupervised 방식으로 나은 representation을 학습하는 것이 model 성능을 높일 수 있다. pre-trained word embedding을 활용해 수 많은 NLP task들에서 성능을 향상 시킨것이 그 예이다.
하지만 unlabeled text에서 word-level 이상의 정보를 활용하는 것은 꽤 어렵다. 두가지 이유가 있는데 하나는 transfer learning에 유용한 text representation을 학습하기 위한 효과적인 optimization objective가 명확하지 않다는 점이다. 최근 연구는 모델링, 번역 등 다양한 objecte가 있지만 각각은 잘하지만 다른 task에서는 잘 동작하지 않는다. 이로 인해 어떤 optimization objective가 전반적으로 좋은 성능을 낸다고 말하기 쉽지 않다는 것이 첫번째 이유이다.
두번째는 이렇게 학습된 representation들을 효과적으로 target task에 transfer할지 일관된 방법이 없다는 것이다. 기존 방법들은 모델 구조를 task에 맞게 바꾸거나, 복잡한 학습 방법을 사용하거나, auxiliary learning objective를 추가하는 등의 조합을 이용했다. 이런 불확실성은 language processing을 위한 효과적인 semi-supervised learning 방법을 개발하는 것을 어렵게 만든 요인이다.
논문에서 제안하는 방법은 unsupervised 방법과 supervised fine-tuning을 조합한 semi-supervised 방식을 채택했다. 목표는 많은 task들에 대해 적은 변화만 가지고 transfer 가능한 보편적인 representation을 학습하는 것이다.
많은 unlabeled text data와 몇몇의 target task에 대한 label이 있는 데이터를 활용했고 두 단계의 학습 절차를 거쳤다. 처음엔 unlabeled data를 통해 initial parameter들을 학습하고 target task에 맞도록 supervised learning을 했다.
모델은 지난 posting에서 설명했던 Transformer를 사용했고 다양한 NLP 분야에서 강력한 성능을 보였다. Transformer는 RNN보다 더 나은 long-term dependency를 보장하고 다양한 task에 대해서도 더 나은 transfer 결과를 가졌다.
Transfer 동안엔 구조화된 text input을 single contiguous sequence로 처리하는 taversal style 방법을 통해 task adaptation을 진행했다. 실험 결과를 통해 최소한의 모델 구조 변경으로도 효과적인 fine-tuning이 가능함을 보여주었다.
총 4가지 언어 이해 task (natural language inference, question answering, semantic similarity, and text classification)에 대해 평가하였다. General한 하나의 모델로 각 task에 특화된 구조의 모델들과 비교해 12개의 task 중 9개에서 SOTA를 달성하며 좋은 성능을 기록했다.
또한 pre-trained model에 대해 zero-shot 학습을 진행했을 때도 downstream task에서 유용한 linguistic knowledge를 습득하는 것을 보였다.
Related Work
Semi-supervised learning for NLP
Unsupervised pre-training
Auxiliary training objectives
Framework
모델의 학습은 two stage로 진행된다. 첫 단계는 대규모 text corpus에 대해 high-capacity를 가지는 language model을 학습하는 것이고, 두번째는 학습된 모델을 task에 맞는 labeled data로 fine-tuning하는 단계이다.
Unsupervised pre-training
Unsupervised 학습은 기존 language model을 학습하는 것처럼 log likelihood를 maximize하는 방향으로 진행한다. 주어진 unsupervised 토큰들의 corpus인 $\mathcal{U} = \{u_1, \dots , u_n\}$에 대해서 다음의 objective를 가지고 학습을 한다.
$$L_1(\mathcal{U}) = \sum_ilogP(u_i|u{i-k},\dots,u_{i-1};\Theta)$$
이때 $k$는 context window의 size이고 network parameters $\Theta$와 $i$ 이전 토큰들을 condition으로 확률 $P$를 구한다. parameter 업데이트는 SGD (stochastic gradient descent)를 통해 학습한다.
실험에 사용된 language model은 multi-layer Transformer decoder를 이용했다. (Transformer에 대한 정리 참고)
모델은 Transformer의 변형으로 볼 수 있는데 논문에 주어진 수식을 보면 input context vector를 embedding하고 positional encoding vector를 더해주는 과정이 기존 Transformer와 동일하게 구성됨을 알 수 있다.
$$ h_0=UW_e + W_p \\ h_l = \text{transformer_block}(h_{l-1}) \; \forall{l} \in [1,n] \\ P(u)=\text{softmax}(h_nW^T_e)$$
$U=(u_{-k}, \dots , u_{-1})$는 토큰들의 context vector이고 $n$은 layer의 수이다. (논문의 수식에는 $i$로 나와 있지만, 오타인 것 같아 포스팅에는 $l$로 수정하였다.) 결국 $n$개의 layer가 stack 되어 있고 그 입력은 embedding vector와 positional embedding을 더한 $h_0$이 된다. target token에 대한 output distribution은 feedforward layer와 softmax를 거쳐 나오게 된다.
Supervised fine-tuning
먼저 위의 loss $L_1$을 통해 모델을 학습한 뒤 target task에 대해 supervised learning을 통해 fine-tuning을 한다. label된 데이터셋을 $\mathcal{C}$라고 할 때 각 인스턴스들은 input token sequence $(x^1, \dots , x^m)$과 label $y$로 구성되어 있다고 할 수 있다.
Input을 pre-trained model에 넣어 마지막 transformer block의 activation $h_l^m$을 얻고 이것을 추가된 linear output layer를 통해 $y$를 예측한다. 추가된 layer의 파라미터는 $W_y$로 표시할 수 있고 이를 수식으로 표현하면 아래와 같다.
$$P(y|x^1,\cdots,x^m) = \text{softmax}(h^m_lW_y)$$
이를 이용해 아래 $L_2$를 maximize하는 objective를 얻을 수 있다.
$$L_2(\mathcal{C}) = \sum_{(x, y)} \log P(y|x^1, \dots, x^m)$$
또한 language modeling을 fine-tuning의 보조(auxiliary) objective로 포함하는 것이 두가지 측면에서 도움이 되었다고 한다. 하나는 supervised model의 일반화 성능을 개선하고 다른 하나는 수렴을 가속한다는 것이다.
결과적으로 loss는 $ L_3(\mathcal{C}) = L_2(\mathcal{C}) + \lambda * L_1(\mathcal{C}) $로 얻어진다. fine-tuning 과정에서 업데이트 되는 파라미터는 $W_y$와 delimiter token에 대한 embedding이다.
Task-specific input transformations
일부 task(text classification)들은 모델을 바로 fine-tuning 할 수 있지만, 구조화된 입력을 요구하는 task들(question answering, textual entailment 등)은 추가적인 수정이 필요하다. 기존 방법들은 transferred representation을 기반으로 task specific architecture를 학습했다. 이를 위해서는 많은 양의 customization을 도입하고 추가된 구조적 요소들에는 transfer learning을 사용하지 않았다. 하지만 논문에서 제안하는 방법은 pre-trained model을 여러 task에 적용하기 위해, 구조화된 입력(structured inputs)을 정렬된 시퀀스(ordered sequence)로 변환하는 방법을 사용합니다. 이 방법은 traversal-style approach라고 부르며, 아키텍처의 큰 변경 없이 task 간에 적용될 수 있습니다. 이에 대한 그림이 figure 1에 나와있는데, pre-trained model은 그대로 두고 입력을 ordered sequence로 변환하여 model이 처리할 수 있도록 함을 알 수 있다. 모든 변환에는 초기화된 시작과 종료를 나타내는 토큰($ 〈s〉,\;〈e〉 $)이 포함된다.
Textual entailment
추론의 경우 premise $p$ (전제)와 hypothesis $h$ (가설) token sequece를 concat하는데 그 중간엔 delimiter token인 $\$ $를 삽입한다.
Similarity
유사성의 경우, 비교하는 두 문장 사이에 내재적인 순서가 없다. 따라서 가능한 순서를 모두 처리하는 방법을 사용한다. 즉, “Text1 - delim - Text2”와 “Text2 - delim - Text1”를 모두 독립적으로 처리하고 결과로 나온 sequence representation $h_l^m$을 element-wise sum으로 더해 최종 linear output에 넣어준다.
Question Answering and Commonsense Reasoning
질문 답변과 상식 추론의 작업들은 context document $z$, 질문 $q$, 가능한 답변 $\{ a_k \}$가 주어지는데, document와 질문을 가능한 답변을 사이에 delimiter를 두고 concat한다. 따라서 $ [ z;q;\$;a_k ]$의 입력을 얻게 된다. 그리고 이런 sequence들을 독립적으로 각각 처리하고 가능한 답변에 대한 output distribution을 생성하기 위해 softmax를 통해 normalization한다.
Experiments
Setup
Unsupervised pre-training
학습 데이터셋 : BooksCorpus dataset
다양한 장르의 미출판 책들을 7000권 이상 포함하고 있다. 생성 모델이 long-range information에 조건을 주는 것을 학습할 수 있는 연속된 긴 text를 포함하고 있다. 다른 대안으로는 ELMo에서 사용된 1B Word Benchmark가 있는데 데이터셋의 크기는 비슷하지만 sentence level에서 섞여있기에 long-range structure를 파괴한다. 논문의 language model은 이 corpus에서 매우 낮은 token level perplexity*인 18.04를 달성했다.
Model specifications
모델은 original transformer를 따르는데, masked self-attention head를 가진 12개 layer의 decoder만 사용했다. 이때 차원은 768, head의 수는 12개이다. position-wise feed-forward network는 3072의 차원을 썼다. Adam을 이용해 최적화했고 learning rate는 최대 $2.5e-4$, 초기 2000번의 iteration 동안 0부터 선형적으로 증가하고 cosine annealing scheduler를 이용했다. 연속된 512개의 token sequence를 64개 random sampling해 minibatch를 구성하고 100 epoch동안 학습을 했다.
Weight initialization은 $N(0, 0.02)$, 정규화를 위해 40000번의 token 병합을 통해 bytepair encoding(BPE)** 방식으로 어휘들을 구축했다. Residual, embedding, attention의 dropout은 0.1을 적용했다. 이전 연구에서 제안된 $L_2$ regularization을 조금 변형한 버전을 사용했는데 모든 non-bias 또는 gain weights에 대해 $w=0.01$로 설정하였다. Activation은 Gaussian Error Linear Unit(GELU)를 사용했다. 그리고 Transformer에서 사용한 sinusoidal positional embedding 대신 learned position embedding을 사용했다.
그리고 전처리로 ftfy 라이브러리를 사용해 BooksCorpus 안의 raw text를 정리하고 punctuation과 whitespace 등을 spaCy tokenizer를 통해 표준화했다.
Fine-tuning details
명시되지 않은 hyperparameter들은 unsupervised pre-training과 동일한 설정을 사용했다. Classifier의 dropout은 0.1로 정했고 대부분 task들은 batchsize 32와 $6.25e-5$의 learning rate를 사용했다. 대부분은 빠르게 finetune되어 3 epoch 정도면 훈련이 충분했다. 학습의 0.2% 동안은 warmup을 했고 linear learning rate decay scheduling을 통해 learning rate를 관리했다. 이때 $\lambda$는 0.5로 설정했다.
Supervised fine-tuning
다양한 supervised task들에 대해 실험을 수행하고, 여기엔 natural language inference, question answering, semantic similarity 및 text classification이 포함된다. 이러한 task 중 일부는 최근에 출시된 GLUE multi-task benchmark의 일부로 사용할 수 있고 이를 활용하였다.
Natural Language Inference
자연어 추론(NLI; natural language inference)는 문장들의 쌍을 읽고 그 사이의 관계를 함의(entailment), 모순(contradiction), 중립(neutral) 중 하나로 판단하는 것을 포함해 recognizing textual entailment라고도 알려져있다.
많은 연구들이 있었으나 lexical entailment, coreference 그리고 lexical과 syntactic의 모호함과 같은 다양한 현상의 존재로 어려움을 가지고 있다.
모델은 이미지 캡션(SNLI), 음성 변환, 대중 소설, 정부 보고서(MNLI), 위키백과 기사(QNLI), 과학 시험(SciTail), 뉴스 기사(RTE)가 포함된 5개의 다양한 데이터셋에 대해 평가한다.
표 2는 이전 연구들과 비교해 저자들이 제안한 모델의 다양한 NLI task에 대한 결과를 보여준다. 다섯 개의 데이터셋 중 네 개에서는 기존 방법에 비해 큰 성능 개선을 달성했다.
이전 SOTA에 비해 MNLI에서 최대 1.5%, SciTail에서 5%, QNLI에서 5.8%, SNLI에서 0.6% 향상된 결과를 보였다. 이를 통해 제안하는 모델이 여러 문장에 대한 추론을 더 잘 처리하고 언어의 모호한 측면을 다룰 수 있다는 것을 보여준다.
비교적 작은 데이터셋 중 하나인 RTE에서 정확도 56%를 달성했는데 multi-task biLSTM(61.7%)보다 낮은 수치이다. 저자들은 제안하는 방법이 더 큰 NLI 데이터셋에서는 높은 성능을 보인 것을 감안할때 개선 가능성이 있다고 판단하지만, 더 연구를 진행하진 않았다고한다.
Question answering and commonsense reasoning
질문 응답(Question answering)도 single / multi-sentence 추리(reasoning)이 필요한 task이다. RACE 데이터셋은 중고등학교 시험에서 나온 영어 지문과 관련된 질문들로 구성되어 있다. 데이터셋의 corpus는 다른 데이터셋 (CNN, SQuaD)와 비교해 더 많은 reasoning type의 질문들을 포함하고 있다. 제안하는 모델이 long-range context를 잘 학습했기에 이를 평가하기 위한 좋은 지표가 될 수 있다. 그리고 Story Cloze Test에서도 평가했는데 이는 두 가지 옵션 중 multi-sentence story의 올바른 결말을 선택하는 것을 포함한다.
이런 task들에서 제안하는 모델은 기존 SOTA 모델들과 비교해 큰 차이로 성능이 좋았다. Story Cloze에서 최대 8.9%, RACE 전체에서 5.7% 향상된 성능을 보였고 이는 모델이 long-range context를 잘 다룬다는 것을 보여준다.
Semantic Similarity
Semantic similarity(혹은 paraphrase detection) task는 두 문장이 의미적으로 동일한지 예측하는 것이다. 어려운 점들은 개념의 rephrasing, 부정 이해, 모호성 처리 등이 있다. 평가를 위해 3개의 데이터셋, Microsoft Paraphrase corpus (MRPC)(뉴스에서 수집), Quora Question Pairs (QQP), Semantic Textual Similarity bechmark (STS-B)를 사용했다.
3개 중 2개에 대해서 SOTA를 달성했고 STS-B에서는 1점의 차이를 QQP에서는 Single-task BiLSTM + ELMo + Attn에 비해 4.2%의 개선을 보였다.
Classification
Classification에 대해서는 2개의 task에 대해서 평가를 진행했다. Corpus of Linguistic Acceptability (CoLA)는 문장이 문법적으로 올바른지에 대한 전문가의 판단을 포함, 훈련된 모델의 고유한 언어적 편향을 평가한다. 반면 Stanford Sentiment Treebank (SST-2)는 표준 binary classification task이다.
제안하는 모델은 CoLA에서 45.4로 이전 35.0에 비해 큰 성능 향상을 보였고 모델이 학습한 고유한 언어적 편향을 보여주었다. SST-2에서는 91.3%의 정확도로 SOTA를 달성했다. 거기에 GLUE 벤치마크에서는 72.8의 overall score를 달성하였는데, 이는 이전 SOTA 68.9보다 훨씬 좋은 결과이다.
전반적으로 제안된 모델은 12개의 데이터셋 중 9개에서 SOTA를 달성했고 많은 경우에서 앙상블을 사용한 방법들을 능가했다. 또한 다양한 크기의 데이터셋, 작은 데이터셋인 STS-B (≈5.7k samples)에서 큰 데이터셋 SNLI (≈550k samples)에 이르기까지 잘 동작함을 보였다.
Analysis
Impact of number of layers transferred
Figure 2의 왼쪽 그래프는 unsupervised pre-training에서 supervised target task로 transfer하는 layer 수에 따른 영향을 보여준다. Transfer layer 수가 커질 수록 성능이 좋아지는 것을 알 수 있다. MultiNLI에서 transformer layer가 최대 9%까지 성능이 증가할 수 있었고 이는 pre-trained model의 각 layer가 target task의 문제를 해결하기 위한 유용한 기능을 한다는 것을 알 수 있다.
Zero-shot Behaviors
저자들은 Transformer의 pre-training이 왜 효과적인지 알아보고자 가설을 세웠다. 가설은 기본 생성 모델이 language modeling 능력을 향상시키기 위해 평가하는 많은 task들을 수행하게 배우고, Transformer의 구조가 LSTM에 비해 transfer를 돕기 때문이라는 것이다. Supervised fine-tuning 없이 task를 수행하는 기본 생성 모델 기반의 heuristic solution들을 설계해 traning 과정을 시각화했다. 그 결과는 Figure 2 오른쪽 그래프인데, heuristic 모델들의 성능이 안정적이었고 다양한 task의 학습이 가능함을 의미한다. LSTM은 zero-shot 성능에서 높은 변동성을 보였고 이는 Transformer 구조에서 inductive bias를 transfer함을 의미한다.
Ablation studies
Ablation study로 3가지를 진행했다. 표 5에서 결과를 확인할 수 있으며, 첫번째는 auxiliary LM objective를 fine-tuning 제거했을 때이다. Auxiliary objective는 NLI와 QQP task에서 성능향상에 도움이 됨을 확인 가능하다. 특히 규모가 큰 데이터셋에서는 도움이 됨을 알 수 있다. 두번째는 LSTM과 Transformer의 비교이다. Transformer 대신 LSTM(single layer 2048 unit)을 사용했을 때 5.6의 평균적인 score drop이 있었고 LSTM은 단지 하나의 데이터셋 (MRPC)에서만 Transformer를 능가하는 성능을 달성하였다. 마지막으로 제안하는 Transformer 구조와 바로 pre-training 없이 supervised learning을 했을 경우 모든 task에서 성능이 pre-training을 한 경우보다 낮았다. 평균적으로 14.8%의 성능 감소가 있었다.
Conclusion
저자들은 다양한 corpus에 대해 generative pre-training과 discriminative fine-tuning을 통해, single task-agnostic 모델로 자연어 이해를 향상시키기 위한 framework를 제시했다. 이러한 방법을 통해 long-range dependency를 처리할 수 있었고 다양한 task들에 transfer할 수 있었다. 이를 통해 12개의 평가중 9개에서 SOTA를 기록했다. Unsupervised pre-training이 개별 task에 대해 성능 향상을 할 수 있음을 보였고 이런 unsupervised learning을 통해 다른 도메인에서도 새로운 연구를 가능하게 할 수 있을 것이라고 말했다.
* perplexity
자연어 처리와 특히 언어 모델링에서 모델의 성능을 측정하는 지표로, 모델이 주어진 데이터를 얼마나 잘 이해하고 있는지 나타낸다. 낮을수록 모델의 성능이 좋다고 평가된다.
$$ \text{Perplexity} = 2^{-\frac{1}{N} \sum_{i=1}^{N} \log_2 p(w_i)} $$ 로 계산되고 여기서 $ p(w_i) $는 각 단어 $ w_i $에 대한 모델의 확률 예측이고, $ N $은 전체 단어의 수이다.
** Bytepair Encoding
자연어 처리에서 사용되는 텍스트 토큰화 기법 중 하나로 가장 많이 등장한 문자열을 병합해 데이터를 압축하는 기법이다.
Transformer에 이어 GPT 1.0 논문에 대한 리뷰였습니다. 잘못된 설명이나 모호한 부분은 댓글로 피드백 주시면 반영하도록 하겠습니다!
2023.09.26