- References
https://arxiv.org/abs/1810.04805?source=post_page (논문 원본)
해당 포스팅은 BERT 논문을 자세히 읽으며 공부한 내용들을 논문의 목차 순서대로 정리한 것이다.
0. Abstract
BERT가 unlabeled text로부터 deep bidirectional representations pre-train이 가능하다는 것을 강조하며 논문이 시작된다.
즉, BERT는 unlabeled data로 부터 pre-train을 진행 한 후, 이를 특정 downstream task(with labeled data)에 fine-tuning(transfer learning)을 하는 모델이다.
논문에서 deep bidirectional이란 단어가 많이 등장하는데, Bidirectional LSTM이나 ELMo와 같은 모델에서 bidirectional이란 키워드를 사용하긴 했으나, BERT에서는 deep bidirectional의 deep을 더욱 강조하여 기존의 모델들과의 차별성을 강조한다.
(deep bidirectional이 기존의 bidirectional(shallow bidirectional, unidirectional)과는 무엇이 어떻게 다른지는 아래에서 자세하게 설명하겠다)
또한, 하나의 output layer만을 pre-trained BERT 모델에 추가하면 Question Answering, Language Inference 등과 같은 NLP의 다양한 주요 task(총 11개)에서 SOTA를 달성 할 수 있다고 말한다.
(이는 pre-trained BERT모델의 확장성이 넓고, 그 성능 역시 기존의 모델들을 훨씬 뛰어넘는다는 것을 의미)
1. Introduction
Language model(LM)의 pre-training 방법은 BERT 이전에도 많이 연구되고 있었고, 실제로 굉장히 좋은 성능을 내고 있었다.
특히 문장 단위의 task(NLI 등)에서 두각을 보였는데, 이러한 연구들은 두 문장의 관계를 전체적으로 분석하여 예측하는 것을 목표로 한다.
또한 문장 뿐만 아니라 토큰 단위의 task(개체명 인식, QA 등)에서도 역시좋은 성능을 보였는데, 이러한 모델은 token 단위의 fine-grained output을 만들어 내야한다.
여기서, fine-grained output이란 하나의 output을 내기 위해 작은 단위의 output 프로세스로 나눈 뒤 수행하는 것을 의미한다.
이때, down stream task에 pre-trained language representation를 적용하는 방법은 크게 두 가지가 존재한다.
첫번째는 feature based approach다.
대표적으로 ELMo가 있는데, ELMo는 pre-trained representations을 하나의 추가적인 feature로 활용해 (down stream) task-specific architecture를 사용한다.
bidirectional language model를 통해 얻은 representation을 embedding vector과 단순히 concat해준다.
두번째는 fine-tuning approach이다.
Fine-tuning approach의 예는 OpenAI의 GPT(Generative Pre-trained Transformer)가 있다. GPT는 task-specific(fine-tuned) parameters 수 는 최소화하고, 모든 pre-trained 파라미터를 조금만 바꿔서 down stream task를 학습한다.
feature based approach와 fine-tuning approach 둘 다 pre-train 과정에서 동일한 목적함수(objective function)을 공유하는데, 이때 일반적으로 language representation을 학습하기 위해 unidirectional language model을 사용한다.
💡ELMo가 순방향 언어 모델과 역방향 언어 모델을 모두 사용하기 때문에 Bidirectional lanuage model이라고 생각할 수 있지만, ELMo는 각각의 단방향(순방향,역방향) 언어모델의 출력값을 concat해서 사용하기 때문에 하나의 모델 자체는 단방향이다. 이것이 바로 BERT에서 강조하는 deep bidirectional과의 차이점이라고 할 수 있다.
논문에서는 기존의 방법(feature based, fine-tuning approach) 특히 fine-tuning 방법이 representation pre-training의 성능을 떨어뜨린다 말한다.
그 예시로 GPT의 단점에 대해 말하는데, GPT와 같은 단방향 language model의 경우 모든 토큰이 이전 토큰과의 attention만 계산하므로 문장 수준의 task에서는 sub-optimal(차선책)이 된다고 한다.
optimal(최선책) : 양쪽 토큰들 모두와의 attention 계산하는 것
또한 QA와 같은 토큰 단위의 task에서는 context의 양방향을 포함하는 것이 굉장히 중요한데, fine-tuning based 접근을 사용하면 성능이 매우 떨어진다.
(논문 전체적으로 BERT가 GPT에 비해 훨씬 뛰어나다는 것을 굉장히 강조하는 것 같다.)
그렇기에 deep bidirectional context가 중요하며, 이를 충족하는 것이 바로 BERT다.
BERT는 "Masked Language Model"(MLM)을 pretraining 목적으로 사용하여 이러한 단방향성의 제약을 완화시켰다.
Masked Language Model(이하 MLM)은 랜덤하게 입력 토큰의 일부를 마스킹시키고, 해당 토큰이 구성하는 문장만을 기반으로 그 마스킹된 토큰들의 원래 값을 정확하게 예측하는 것이 목적이다.
단방향 언어 모델의 사전학습과는 다르게, MLM는 양방향 context를 융합시켜 deep bidirectional Transformer를 가능하게 한다. 게다가, MLM에서 text-pair representations로 pretrain하면 "Next sentence prediction" task도 적용할 수 있다.
2. Related Work
이번 섹션에서는 language representation을 pre-training하는 방법론(feature based, fine tuning, transfer learning)들의 긴 역사를 대표적인 것들만 간단하게 리뷰한다.
2-1. Unsupervised Feature-based Approaches
단어 혹은 문장의 representation 학습은 수십년 동안 진행되어 왔는데, non-neural method와 neural method로 나뉜다. 각 method 별 대표적인 논문은 아래와 같다. 관심 있는 분들은 해당 논문을 읽어보시면 될 것 같다.
<non-neural method>
- Peter F Brown, Peter V Desouza, Robert L Mercer, Vincent J Della Pietra, and Jenifer C Lai. 1992. Class-based n-gram models of natural language. Computational linguistics, 18(4):467–479.
- Rie Kubota Ando and Tong Zhang. 2005. A framework for learning predictive structures from multiple tasks and unlabeled data. Journal of Machine Learning Research, 6(Nov):1817–1853.
- John Blitzer, Ryan McDonald, and Fernando Pereira. 2006. Domain adaptation with structural correspondence learning. In Proceedings of the 2006 conference on empirical methods in natural language processing, pages 120–128. Association for Computational Linguistics.
<neural method>
- Ciprian Chelba, Tomas Mikolov, Mike Schuster, Qi Ge, Thorsten Brants, Phillipp Koehn, and Tony Robinson. 2013. One billion word benchmark for measuring progress in statistical language modeling. arXiv preprint arXiv:1312.3005.
- Jeffrey Pennington, Richard Socher, and Christopher D. Manning. 2014. Glove: Global vectors for word representation. In Empirical Methods in Natural Language Processing (EMNLP), pages 1532– 1543. Matthew P
이러한 발전에 더불어, word embedding의 Pre-training은 오늘날 NLP 분야에서 굉장히 중요한 문제가 되었다.
또한 word embedding을 통한 접근 방식은 자연스레 sentence embedding 혹은 paragraph embedding으로 이어졌다.
sentence representations 학습은 BERT 이전까지
- 다음 문장의 후보들을 순위 메기는 방법
- 이전 문장이 주어졌을때, 다음 문장의 left - to - right generation 방법
- denoising auto-encoder에서 파생된 방법
등 을 사용하였다.
ELMo와 그 후속 모델들은, 전통적인 word embedding 연구에서 한 층 더 발전하였는데, 바로 left-to-right와 right-to-left 언어 모델을 통해 context-sensitive feature들을 뽑아내는 방식이다.
이렇게 생성된 토큰 별 contextual representation은 left-to-right, right-to-left representation의 단순 concat이다.(shallow bidirectional)
이렇게 단순 concat하는것 만으로도 ELMo는 주요 NLP benchmarks(QA, 감성분석, 개체명 인식 등)에서 SOTA를 달성했다. 그러나 이러한 모델들은 deep bidirectional하지는 않다.
2-2. Unsupervised Fine-tuning Approaches
초기 feature-based approaches에 대한 연구는 unlabeled text로 부터 word embedding parameter를 pre-training하는 방향으로 진행되었다.
최근에는, contextual token representation을 만들어내는 (문장 혹은 문서)인코더가 pre-training되고, supervised downstream task에 맞춰 fine-tuning된다.
이러한 접근방식의 장점은 scratch로(처음부터) 학습하는데 적은 파라미터로 충분하다는 것이다.
GPT 역시 이러한 방식을 사용하여 다양한 문장 단위 task에서 SOTA를 달성 할 수 있었다.
2-3. Transfer Learning from Supervised Data
또한 기계번역(Machine Translation)과 자연어추론(NLI) 대규모 데이터셋으로부터의 효과적인 전이학습(Transfer Learning)을 보여주는 연구도 있다.
전이학습은 자연어처리 뿐만 아니라 CV(Computer Vision) 연구에서도 그 중요성이 강조되는데, ImageNet 등을 활용해 사전학습을 한 모델이 성능이 좋다고 한다.
3. BERT
논문에서는 BERT를 Pre-training part와 Fine-tuning part로 나누어 설명한다.
Pre-training part에서는 다양한 pre-training tasks의 unlabled data를 활용해 초기 파라미터를 설정하고,
이를 바탕으로 학습된 모델은 Fine-tuning part에서 downstream tasks의 labled data를 이용해 fine-tuning된다.
아래 그림을 보면 알 수 있듯, 항상 동일한 Pre-trained model의 파라미터가 서로 다른 downstream tasks(QA, 번역 등)의 초기 값으로 사용된다. 이러한 초기값들은 fine-tuning 과정에서 downstream task에 맞게 조정된다.
Model Architecture
Bert의 모델 아키텍처는 multi-layer bidirectional Transformer encoder이다.
즉, 양방향 Transformer encoder를 여러 층 쌓은 것인다.
(Transformer에 대한 자세한 설명은 여기를 참고하시기 바란다.)
BERT base의 경우 L = 12, H = 768, A = 12로 총 110M개의(약 1억1천만) 파라미터를 사용하였고,
BERT large의 경우 L = 24, H = 1024, A = 16으로 총 340M개의(약 3억4천만) 파라미터를 사용하였다.
BERT base모델은 OpenAI의 GPT와의 비교를 위해 파라미터 수를 동일하게 만들어 진행하였다.
여기서 다시한번 GPT의 단점이 언급되는데, GPT는 모든 토큰이 왼쪽 토큰들과만 어텐션을 계산하는 constrained self-attention이 사용되는 반면, BERT는 bidirectional self-attention이 사용된다.
참고로 GPT는 next token만을 맞추는 기본적인 language model을 만들기 위해 transformer decoder만을 사용하였고, BERT는 MLM과 NSP를 위해 self-attention을 수행하는 transformer encoder만을 사용했다.
Input/Output Representations
BERT가 다양한 down-stream tasks에 잘 적용되기 위해선 input representation이 애매하지 않아야 한다.
하나의 문장 혹은 한 쌍의 문장을 하나의 토큰 시퀀스로 분명하게 표현해야한다.
이때 'sentence'는, 언어학적인 sentence 즉 문장의 의미 뿐만 아니라 인접한 텍스트들의 임의의 범위라는 뜻도 포함
이를 위해 BERT에서는 총 3가지의 Embedding vector를 합쳐서 input으로 사용한다.
모든 Input 시퀀스의 첫번째 토큰은 [CLS] 토큰인데, [CLS] 토큰과 대응된는 최종 hidden state는 분류 문제를 해결하기 위해 sequence representation들을 종합한다.
또한, Input 시퀀스는 문장의 한 쌍으로 구성된다. 문장 쌍의 각 문장들은 [SEP] 토큰으로 분리된다. 또한 각 문장이 A문장인지, B문장인지 구분하기 위한 임베딩(Segment Embeddings) 역시 진행한다.
Token Embeddings는 WordPiece embedding을 사용하고, Position Embeddings는 Transformer에서 사용한 방식과 동일하다.
Input representation은 이러한 대응되는 토큰(segment + token + position)을 전부 합치면 된다.
3-1. Pre-training Bert
BERT의 Pre-training 과정에서는 크게 두가지 unsupervised-tasks가 사용되는데, 바로 Masked LM(MLM)과 Next Sentence Prediction(NSP)이다.
3-1-1. Task # 1: Masked LM
Masked LM(MLM)이란, input tokens의 일정 비율을 마스킹하고, 마스킹 된 토큰을 예측하는 과정이다.
이는 Cloze task에서 영감을 얻었다고 한다.
위 그림에서 볼 수 있듯, 입력으로 들어온 단어 토큰 W들 중 일부(W4) 를 [MASK] token으로 바꿔준다.
많은 실험을 해봤을때, 바꾸어주는 비율이 15% 일때 가장 성능이 좋았다고 한다.
또한 이 [MASK] token은 pre-training에만 사용되고, fine-tuning 과정에서는 사용되지 않는다.
Denoising Auto Encoder과 다르게 BERT에서는 오직 [MASK] token만을 예측한다.
(Denoising Auto Encoder는 전체 input을 재구성한다.)
다만, 이러한 방식을 통해 bidirectional pre-trained model은 얻을 수 있지만, pre-training과 fine-tuning 사이의 mismatch가 발생한다.
왜냐하면 [MASK] token이 fine-tuning과정에서는 나타나지 않기 때문이다.
이를 해결하기위해 위에서 언급한 15%의 [MASK] token에서 추가적인 처리를 더 해준다.
- 80%의 경우 : token을 [MASK] token으로 바꾼다. ex) my dog is hairy -> my dog is [MASK]
- 10%의 경우 : token을 random word로 바꾼다. ex) my dog is hairy -> my dog is apple
- 10%의 경우 : token을 원래 단어 그대로 놔둔다. ex) my dog is hairy -> my dog is hairy
위와 같은 방법으로 [MASK] token이 cross entropy loss를 통해 원래 token을 예측할 것이다.
💡10%의 경우 (random word change)
무작위 단어로 바꾸면 모델의 성능이 떨어지지 않을까 생각할 수 있지만, 15%의 token 중에서 10%만을 바꾸는 것이므로 실제 비율은 1.5% 밖에 되지 않아 모델의 성능과는 상관없다.
💡10%의 경우 (original word)
단어를 그대로 두는 것은 실제 관측 단어에 대한 representation을 bias해주기 위함이다.
3-1-2. Task # 2: Next Sentence Prediction (NSP)
많은 NLP의 downstream task(QA, NLI 등)는 두 문장 사이의 관계를 이해하는것이 핵심이다. 이러한 문장 사이의 관계는 language modeling으로는 알아 낼 수 없는데, 이를 학습하기 위해 BERT모델은 binarized next sentence prediction(NSP)을 이용한다.
조금 더 설명하자면, pre-training example로 문장A와 B를 선택할때, 50퍼센트는 실제 A의 다음 문장인 B를(IsNext), 나머지 50퍼센트는 랜덤 문장 B를(NotNext) 고른다는 것이다.
💡예를 들자면, 아래와 같은 예시가 50:50의 비율로 등장한다는 것이다.
Input = [CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP] Label = IsNext
Input = [CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP] Label = NotNext
위 그림에서 볼 수 있듯, C 토큰은 next sentence prediction(NSP)을 위한 토큰이다.
BERT는 이 토큰 C를 이용하여 input으로 들어온 두 문장이 원래 corpus에서 이어 붙여져 있던 문장인지(IsNext) 아닌지(NotNext)를 맞춰가며 학습한다.
이러한 학습는 QA, NLI 등의 task에서 매우 유용하게 작용한다.
Pretraing data
Pretraining 과정은 많은 데이터를 필요로 하는데, corpus 구축을 위해서 BooksCorpus(약 8억개의 단어)와 English Wikipedia(약 25억개의 단어)를 사용하였다. Wikipedia는 본문만 사용하였고, 리스트, 표, 헤더 등은 무시하였다.
긴 인접 시퀀스(input)를 뽑아내기 위해서는 문서 단위의 corpus를 사용하는 것이 문장 단위의 corpus를 사용하는 것 보다 훨씬 유리하다.
3-2. Fine-tuning BERT
Fine-tuning 과정은 비교적 간단한데, Transformer의 self-attention 메커니즘 덕분에 BERT는 많은 downstream task를 모델링 할 수 있다.
이때, 수행하고자 하는 downstream task에 따라 BERT는 task-specific input을 받아, fine-tuning을 진행한다.
- Sentence pairs in paraphrasing
- Hypothesis-Premise pairs in entailment
- Question-Passage pairs in question answering
- Degenerate-None pair in text classification or sequence tagging
Output역시 downstream task에 따라 달라진다.
- token representation in sequence tagging or question answering
- [CLS] representation in classification(entailment or sentiment analysis)
분류(Classification)문제의 경우, classify하고 싶은 갯수(K)에 따라 classification layer를 붙여준다.
Fine-tuning 과정은 Pre-training에 비해 훨씬 비용이 덜 든다.
(대부분의 task의 경우 TPU에서 1시간, GPU에서 몇시간)
4. Experiments
해당 부분 부터는 다음 포스팅에서 이어서 작성하겠습니다.
댓글