본문 바로가기
대학원 이야기/논문 리뷰

[논문 리뷰] BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding (NAACL 2019)

by misconstructed 2020. 10. 5.
728x90

2019년 구글에서 발표한 BERT에 대한 논문이다.

논문의 원본은 여기서 볼 수 있다.


# Introduction

Pre-trained Language Model은 자연어 처리 task의 성능을 향상시킬 수 있다. PLM(pre-trained language model)을 적용하는 방법은 현재 크게 2가지로 구분된다 : feature-based, fine-tuning. Feature-based 방식의 경우, (대표적으로 ELMo) 특정한 task에 알맞는 구조를 보유하고, pre-trained representation을 특성으로 추가해서 사용하게 된다. 반면에 fine-tuning 방식의 경우 (대표적으로 GPT), 특정 task에 특화된 파라미터를 최소화 하고, 사전 학습된 파라미터를 fine-tuning 한다. 두 방식 모두 pre-training 하는 과정에서는 동일한 objective를 사용하고, 동일하게 unidirectional language model을 사용한다.

하지만 이러한 unidirectional한 구조는 성능을 제한한다고 생각한다. OpenAI GPT의 경우 왼쪽에서 오른쪽으로 이동하도록 구성되어 있는데, 이러한 구조는 현재 토큰이 이전에 나타난 토큰들에 대해서만 attend할 수 있다는 단점이 있다. 이러한 단점은 문맥을 양쪽에서 모두 이해해야 하는 questin-answering task 등에 있어서 치명적일 수 있다. 

이번 논문에서는 fine-tuning 방식을 개선하는 BERT (Bidirectional Encoder Representations from Transformers) 를 제안한다. BERT는 masked language model (MLM) 을 사용해서 성능을 향상시킨다. MLM은 임의로 몇 개의 토큰을 mask하고, mask 된 토큰을 예측하는 것을 objective로 한다. 이러한 방식은 기존의 left-to-right 구조와는 다르게 왼쪽 문맥과 오른쪽 문맥을 모두 학습할 수 있도록 한다. 추가적으로, next-sentence-prediction task를 함께 수행하게 된다. 

# Related Work

Pre-training language representation에는 긴 역사가 있기 때문에, 가장 많이 사용되는 몇 가지를 다뤄본다.

# Unsupervised Feature-based Approaches

단어의 representation을 학습하는 것은 크게 non-neural 방식과 neural 방식(word2vec, GloVe 등)으로 구분한다. Pre-trained word embedding을 NLP 시스템의 성능 향상을 이뤄냈다. 단어 임베딩을 학습하기 위해, letf-to-right language modeling 이나 등의 objective 로 학습을 진행했다. 

ELMo 는 2개의 biLM(left-to-right LM, right-to-left LM)을 이용해서 문맥을 고려한 단어 임베딩을 제공한다. 한 단어의 representation을 left-to-right representation과 right-to-left representation을 연결해서 제공한다. ELMo를 사용함으로서 몇 가지의 NLP benchmark에서 SOTA의 성능을 제공할 수 있었다. (question-answering, sentiment analysis, NER)

# Unsupervised Fine-tuning Approaches

최근에는 레이블링 하지 않는 텍스트를 통해 pre-trained 된 contextual token representation을 생성하고, supervised downstream task에서 fine-tunin 하는 방식이 제안되었다. 이러한 방식의 장점은 시작부터 학습이 완료될때까지 적은 수의 파라미터가 학습된다는 것이다. 이러한 장점을 기반으로 OpenAI의 GPT는 GLUE Benchmark의 다양한 task에서 SOTA의 성능을 제공할 수 있었다. 

# Transfer Learning from Supervised Data

큰 데이터셋을 보유하고 있는 task (NLI, MT 등) 들을 이용해서 transfer learning 을 수행하는 방식도 존재한다. Computer vision 분야에서도 transfer learning이 중요하게 사용되고 있다. 

# BERT

[그림-1]

BERT 는 크게 pre-training 단계와 fine-tuning 단계, 두가지 단계로 구분한다. 

Pre-training 단계에서는 레이블링 하지 않는 데이터를 기반으로 학습을 진행한다. Fine-tuning 과정에서 모델은 우선적으로 pre-train된 파라미터로 초기화된다. 이후 모델을 레이블링된 데이터로 fime-tuning 한다. 실제 task에서 사용하는 모델은 초기에 동일한 파라미터로 시작하지만, 최종적으로는 서로 다른 fine-tuned 된 모델을 보유하게 된다. BERT 는 pre-trained 된 모델과 fine-tuned 된 모델 사이의 구조적 차이가 거의 없게 된다. 

# Model Architecture

BERT는 multi-layer bidirectional Transformer encoder를 사용한다. 기존의 Transformer와 거의 유사한 구조를 사용하기 때문에, 해당 구조에 대한 설명은 이번 논문에서 생략한다. 

  • Transformer block layers = $ L $
  • hidden size = $ H $
  • number of self-attention heads = $ A $

이번 논문에서는 크게 두 가지 종류의 모델을 크기를 기준으로 제안한다.

  • $ BERT_{BASE} $ : $ L = 12, H = 768, A = 12, total parameter = 110M $
  • $ BERT_{LARGE} $ : $ L = 24, H = 1024, A = 16, total parameter = 240M $

$ BERT_{BASE} $ 의 경우 OpenAI 의 GPT 와의 비교를 목적으로 동일한 크기로 제작했다. BERT 의 경우는 현재 토큰의 좌/우를 모두 참조할 수 있는 bidirectional self-attention을 수행하는 반면에, GPT의 경우는 현재 토큰의 왼쪽에 있는 문맥만 참조가 가능하다는 차이점이 있다.

# Input/Output Representations

[그림-2]

실제 사용하는 다양한 task에 공통적으로 사용하기 위해서 단일 문장과 쌍으로 구성된 문장(question-answering 등)을 모두 표현할 수 있도록 한다. "sequence" 라는 표현은 앞으로 단일 문장 또는 쌍으로 이루어진 문장을 칭할 때 사용한다. 단어 임베딩으로는 WordPiece embedding 을 사용하게 된다. Sequence 의 첫 토큰은 [CLS] 라는 특별한 토큰을 사용하게 된다. 쌍으로 구성된 문장들도 하나의 sequence로 표현된다. 두 문장을 하나의 sequence 로 표현하기 위해서, 먼저 두 문장을 [SEP]라는 토큰으로 구분한다. 이후, 각 문장을 구성하는 단어들을 임베딩으로 표현한다. 이러한 방식으로 생성한 입력 임베딩을 $ E $ 로 표현한다. 모든 입력 토큰에 대해서 token segment와 해당 토큰의 position embeddin을 더해서 Input representation 이 생성된다.

# Pre-training BERT

전통적인 left-to-right/right-to-left LM을 사용해서 pre-train하는 ELMo, GPT와는 다르게, BERT는 2개의 unsupervised task를 이용해서 학습하게 된다.

# Task #1 : Masked LM 

상식적으로 left-to-right LM이나, right-to-left LM, 또는 두 결과를 연결한 결과보다 deep bidirectional model 이 성능이 더 좋다고 이해할 수 있다. 하지만, 전통적인 conditional LM의 경우 left-to-right/right-to-left 의 방식으로 밖에 수행하지 못한다. Bidirectional 하게 처리하면 간접적으로 예측하려는 단어를 참조하게 되고, multi-layered 구조에서 해당 단어를 예측할 수 있기 때문이다. 이러한 문제를 해결하기 위해서 BERT는 일정 비율의 token을 mask하게 된다. (이러한 이유로 masked LM 이라고 부른다.) 이번 논문에서는 전체 토큰의 15%를 mask 하게 된다. 

이러한 방식은 pre-train하는 과정에서는 매우 효과적일 수 있지만, 실제 다른 task를 수행할 때 문제가 발생할 수 있다. fine-tuning 과정에서는 [MASK]라는 토큰을 사용하지 않기 때문이다. 이러한 문제를 완화하기 위해서 우리는 전체 15%를 모두 [MASK]로 치환하는 것이 아니라, 15% 중 80% 는 [MASK]로 치환하고, 10% 는 랜덤한 토큰으로 치환하고, 나머지 10%는 기존의 토큰을 그대로 사용하게 된다. 최종적으로 cross-entropy loss 를 사용해서 기존의 토큰을 예측하도록 학습된다. 

# Task #2 : Next Sentence Prediction (NSP)

Question-answering(QA), Natural Language Interference(NLI) 등의 task는 두 문장 사이의 관계를 이해해야 하는 task이다. 이러한 특징은 LM을 통해서 학습하기 쉽지 않기 떄문에, NSP라는 task에 대해서도 함께 학습을 진행한다. 학습 과정에서 모델은 두 문장 A, B를 입력으로 제공받는다. 50%의 경우 두 번째 문장인 B는 실제로 A의 다음 문장으로 구성되고, 나머지 50%의 경우 B는 전혀 관계가 없는 임의의 문장으로 제공된다. B가 다음 문장인 경우 IsNext, 임의의 문장인 경우 NotNext 라고 레이블링 하게 된다. 매우 단순한 task 같아 보이지만, QA와 NLI task의 성능 향상에 큰 도움이 된다는 것을 알 수 있다. 

# Pre-training Data

Pre-training corpus로는 다음과 같은 데이터를 사용했다. Wikipedia의 경우 text passage 만 사용했고, 목록이나 표 등은 모두 제외했다. 긴 문맥을 학습하기 위해서 Billion Word Benchmark 와 같이 섞인 문장으로 구성된 데이터를 사용하지 않았다. 

  • BooksCorpus (800M words)
  • English Wikipedia (2,500M words)

# Fine-tuning 

Downstream task에 BERT를 적용하는 것은 상대적으로 단순하다. 입력(한 문장 또는 두 문장)의 개수에 따라 (앞서 설명한 것처럼) 알맞게 하나의 sequence 로 생성해서 모델의 입력으로 제공한다. 두 문장이 입력으로 제공된 경우, 하나의 sequence로 생성하고, 두 문장 사이의 self-attention도 수행하게 된다. 

Fine-tuning하는 방법은 task에 알맞는 입력과 출력을 모델에 입력으로 제공해서 파라미터들을 해당 task에 맞게 end-to-end로 업데이트한다. Token representation은 token level task(sequence tagging, question-answering 등) 의 입력으로 사용된다. [CLS] 토큰은 classification을 수행하기 위해 사용된다. 

Pre-training과 비교했을 때, fine-tuning은 상대적으로 적은 비용으로 수행할 수 있다. 해당 논문에서 제공하는 결과들은 대부분 Gloud TPU에서 1시간, 또는 GPU에서 몇 시간 내에 처리가 가능하다. (동일한 pre-trained 모델에서 fine-tuning을 하는 시간만 고려했을 때)

# Experiments

BERT fine-tuning을 이용한 11개의 NLP task의 결과를 제공한다.

# Effect of Pre-training Tasks

[표-1]

  • No NSP : masked LM(MLM) 으로만 학습되고 NSP는 사용하지 않는 경우. 이런 경우 QNLI, MNLI, SQuAD 1.1에서 성능이 떨어지는 것을 확인할 수 있었다. 
  • LTR & No NSP : left-context-only model 을 사용하고 NSP도 사용하지 않는 경우. No NSP와 함께 bidirectional representation이 아닌, LTR을 사용하는 경우 모든 task에 대해서 MLM에 비해 성능이 떨어지고, 특히 MRPC와 SQuAD 에서 큰 폭의 성능 저하를 확인할 수 있었다. bidirectional 한 요소를 제외해서 나타난 성능 저하인지 확인하기 위해서, 임의로 초기화된 BiLSTM을 추가했을 때 SQuAD의 성능이 상당히 향상된다는 것을 확인할 수 있었다. (pre-trained bidirectional model 에 비해서는 성능이 떨어진다.)
  • ELMo 처럼 LTR과 RTL 모델을 각각 학습해서 representation을 합치는 방식을 생각해볼 수 있다. 하지만 이러한 방식은 bidirectional model 에 비해 2배의 비용이 든다는 단점이 있다. 

# Effect of Model Size

[표-2]

모델의 크기가 fine-tuning 정확도에 어떠한 영향을 주는지 알아본다. 

[표-2]를 보면, 모델의 크기가 모델의 성능에 직접적인 영향을 준다는 것을 알 수 있다. (큰 모델은 좋은 성능을 제공한다.) 또한, 모델의 크기를 크게 하는 것은 small scale task에서도 큰 성능의 향상을 가지고 온다는 것을 알 수 있었다. 

# Feature-based Approach with BERT

BERT를 feature-based 방식으로 사용할 수 있다. 이러한 방식에는 몇 가지 장점이 있다. 

  • Transformer encoder는 모든 task에 적용하지 못한다. 그러므로 task-specific model 을 추가해서 사용해야 한다.
  • 컴퓨팅 비용을 절감할 수 있다. Pre-computing을 통해서 representation을 생성하고, 작고 비용이 적게 드는 모델을 해당 representation으로 학습한다면 비용을 절감할 수 있다. 

[표-3]

[표-3]은 CoNLL-2003 Named Entity Recognition task에 대한 성능을 비교한다. BERT의 fine-tuning 방식과 feature-based 방식의 성능을 비교해서 볼 수 있다. 


# 관련 논문

  1. Semi-supervised sequence tagging with bidirectional language models. : ELMo (리뷰)
  2. Attention is all you need. : Transformer (리뷰)
  3. Class-based n-gram models of natural language : non-neural word representation (1)
  4. A framework for learning predictive structures from multiple tasks and unlabeled data : non-neural word representation (2)
  5. Domain adaptation with structural correspondence learning. : non-neural word representation (3)
  6. Distributed representations of words and phrases and their compositionality : neural word representation (1) (word2vec)
  7. Glove: Global vectors for word representation. : neural word representation (2) (GloVe) (리뷰)
  8. Semi-supervised sequence learning. : fine-tuning representation (1)
  9. Universal language model fine-tuning for text classification : fine-tuning representation (2)
  10. Improving language understanding with Generative Pre-Training. : fine-tuning representation (3) (GPT, 리뷰)
  11. Supervised Learning of Universal Sentence Representations from Natural Language Inference Data : NLI 를 이용해서 학습
  12. Learned in translation: Contextualized word vectors. : MT를 이용해서 학습 (CoVe, 리뷰)
  13. Google’s neural machine translation system: Bridging the gap between human and machine translation. : WordPiece embedding

 

728x90

댓글