반응형

BERT 배경 설명

  • BERT는 Google에서 2018년 10월에 나온 NLP 논문이다.
  • 사실 지금은, Chat-GPT 때문에 GPT가 자연어 처리의 대명사가 되었지만, GPT 전에는 BERT가 자연어 처리의 대표 모델로 불리곤 했었다. 
  • BERT는 성능이 매우 좋아서, 아직도 많은 NLP Task에서 사용되고 있다.
  • 개인적으로 이 논문을 읽으면서, 2018년 6월에 나온 GPT-1 논문을 굉장히 많이 신경 쓰고 있다는 인상을 받았다. 

Abstract

  • 이 논문에서는 BERT(Bidirctional Encoder Representations form Transformers)라는 새로운 모델을 소개한다.
  • 기존의 (그 당시) 유행하는 모델들(특히 GPT-1)과 달리 BERT는 단어의 양방향 데이터(이전 데이터와 이후 데이터 모두)를 사용한다.  
  • 이러한 구조로 BERT는 별도의 task-specific한 변형 없이, 하나의 layer만 추가해도 대다수 NLP task(11개)에서 좋은 성능을 보여준다.

 Introduction

[문제 제기]

  • 기존의 pre-trained language representations들을 specific 한 task에 적용하는 방식은 feature-basedfine-tuning으로 크게 2가지로 나뉘어진다. 
    • Feature-based : task-specific한 구조를 가지고 있고, pre-trained 된 representations들을 추가적인 feature로만 사용한다. (ELMo)
    • Fine-tuning : 최소한의 task-specific한 parameter들을 가지고, 모든 pre-trained parameter들을 fine-tuning 해서 사용한다. (GPT)
  • 하지만, 기존의 방식들은 pre-trained model을 학습하는 과정에서 이전 데이터들만 사용하는 unidirectional launguage models (단방향 모델)이다. 
  • 이러한 방식은 pre-trained representations들의 효과를 감쇠한다. 특히, fine-tuning model에서 이런 감쇠 효과는 더 크다. 

[모델 제시]

  • 이 논문에서는 "BERT"라는 모델을 제시하여, fine-tuning 방식의 pre-trained language model의 성능을 향상 시킨다.
  • BERT는 "masked language model(MLM)" pre-training objective를 이용하여, 단방향 데이터만을 사용하는 기존의 한계를 경감한다. 
  • 은 input 데이터의 token들에 randomly 하게
  • 기존 left-to-right language model pre-training과 달리, MLM은 left와 right context 정보를 모두 활용할 수 있다. 
  • 추가적으로 "next sentence prediction"을 통해, text-pair 들의 representation들을 학습한다. 

 Model

  • BERT는 기존의 Fine-tuning 방법들(특히 GPT-1)처럼 2개의 step으로 구성된다.  (1) pre-training (2) fine-tuning

  • Model Architecture : BERT의 모델 아키텍처는 Transformer를 그대로 사용했다. Paper에서는 두 버전의 BERT 모델을 소개한다. 첫 번째로, GPT와 비교하기 위해, 동일 모델 사이즈를 가지고 있는 BERT BASE(12개의 Layer, 768 Dimension, 16개 Self-Attention)이다. 두번째로, BERT LARGE(24개의 Layer, 1024 Dimension, 16개의 Self-Attention) 이다. 
  • Input/Output Representations : BERT는 WordPiece Embeddings를 사용한다. BERT는 다양한 NLP task에 응용할 수 있도록, 단일 문장이나 문장의 짝 모두를 input으로 사용할 수 있도록 한다. 모든 문장의 맨 첫 token은 special token인 "[CLS]"로 시작하고(해당 Token 등은 sentence 단위의 classification에 활용된다.), 두 문장이 Input으로 들어올 때는 두 문장 사이에 "[SEP]" token을 넣어 구분하고, 어느 문장에 소속된 token인지 구분할 수 있는 learned embedding을 문장을 이루는 각 token에 추가했다.(Segment embeddings)

아래 그림은 BERT의 input representations를 나타내는데, token 자체의 embeddings와 어느 문장에 속하는지를 나타내주는 Segment embeddings, token의 문장 내 위치를 가르쳐주는 Position embeddings로 구성되어 있다. 

 

 

  • BERT의 Pre-Training 단계
    • 논문 내내 강조하는 것이, BERT는 단방향 모델이 아닌, 양방향 Language model을 사용한다는 것이다. 
    • Masked LM 
      • 직관적으로 생각해도(수능 빈칸 추론 문제만 생각해 봐도) 단어를 추정할 때, 그 단어의 앞부분만 보는 것이 아닌 뒷부분에서 힌트를 얻을 수 있다. 하지만, 기존 모델들은 한쪽 방향의 단어들만으로 Language model을 학습했다. BERT는 지금껏 계속 강조해 온 대로, 양방향의 데이터를 모두 활용하기 위해 Masked LM을 제시한다. 
      • Masked LM은 일정한 확률로 무작위로 input token을 가리고("[MASK]" token으로 대체), 문장 내 다른 단어들을 통해, 해당 token을 추정하는 방식(기존의 LM과 동일하게 cross-entropy)으로 학습된다
      •  이런 Masked LM에는 한 가지 문제가 있는데, pre-training에 빈번하게 등장하는 "[MASK]" token이 실제 fine-tuning 과정에서는 없다는 것이다.(pre-training 학습을 위해 임의로 넣어주었기 때문에) 이를 해결하기 위해, 논문에서는 token을 무조건 [MASK]로 대체하는 것이 아닌, 확률적으로 바꿔주는 스킬을 사용한다. 따라서, 한 문장에서 15% 정도의 token의 위치를 1) 80% 확률로 [MASK] token으로 대체, 2) 10% 정도 random 한 token으로 대체, 3) 10%는 바꾸지 않고 원래 단어로 둔다. → 특정 token 들에 의지해서 masked 된 token을 추정하는 것을 방지해 주는 Augmentation 효과도 있을 것이다.  
    • Next Sentence Prediction
      • 앞부분까지는 한 문장 내에서 단어를 추정하기 위한 방법이었다. 하지만, 많은 NLP task들은 문장 간의 관계가 중요한 경우가 많다. 이러한 문장 간의 관계는 기존 Language model로는 잡 포착하기 어려웠다.
      • 문장 간의 관계를 학습하기 위해, BERT에서는 next sentence prediction task를 이용하였다. 
      • 앞서, 문장의 Embeddings 중 Segment Embedding이 존재하였는데, 실제 데이터들은 한 문장 뒤에 다음 문장이 오는 구조로 되어있다. (실제 문장이든, QA 문장이든 선후 관계가 존재한다.) 
      • next sentence prediction task에서는 실제 데이터에서 뒤에 오는 문장을 임의로 변경하여, false 데이터를 만들어서 두 문장 간의 선후 or 인과 관계에 대한 binary classification을 학습한다.  
      • 이러한 구조는 매우 간단하지만, QA 등의 문장 간의 인과 관계가 중요한 task에서 매우 효과적인 성능 향상을 보인다고 한다.
  • BERT의 Fine-tuning 단계
    • BERT의 fine-tuning 과정은 Transformer 구조를 그대로 이용하였고, Input의 형태가 단일 문장이던, 문장의 짝이던 동일하기 때문에 매우 직관적이다. 
    • 언급한 대로, Input의 형태는 task에 상관없이 모두 동일하고, Output은 앞서 문장 앞에 넣어주었던 [CLS] token을 classification을 위한 output layer의 input으로 넣어 학습하면 된다.
    • Pre-training 과정은 매우 많은 시간과 H/W 리소스가 필요하지만, fine-tuning은 구조가 간단하고 simple하기 때문에 inexpensive 한 과정이라고 한다. (사실 이 특징 때문에, AI의 패러다임이 모델 중심에서 데이터 중심으로 바뀐 것 아닌가 싶다.) 

 

Experiments

  • BERT를 이용해서 11개의 NLP task를 실험했다. 
  • GLUE(General Language Understanding Evaluation)를 포함한 다양한 언어 모델에서 다른 모델들을 능가하는 performance를 보여준다. 
  • 실험에서 놀랄만한 점은, BERT가 인간보다 높은 성능을 보이는 테스트도 있다는 것이다. 

→ BERT도 GPT-1과 마찬가지로, 논문 자체가 실용성에 초점을 맞추고 있다 보니, 학습 부분을 자세히 설명해 놓았다. 자세한 내용은 논문을 직접 참고하는 게 좋을 것 같다. 

 

Conclusion

  • 최근에(그 당시에) 수많은 unlabeled 데이터를 통해, unsupervised pre-training을 진행하는 것이 NLP 분야에 엄청난 발전을 이뤘다. 
  • 이 논문의 가장 큰 contribution은 이러한 방법을 통합하는 bidirectional 구조를 제안했다는 것이고, 이러한 pre-trainin g구조가 다양한 NLP 분야에 활용할 수 있다는 점이다.   

출처

Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. 2019. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. In Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers), pages 4171–4186, Minneapolis, Minnesota. Association for Computational Linguistics.

 

총평

지금 생각하면 당연한 것인데, Bidirectional 구조를 제안하고, 실제 NLP 분야에서 좋은 성능을 보여줬다는 것이 신기하다. 개인적으로 논문 전체가 GPT를 신경 쓰고 있다는 느낌이 들어, 역시 Google 사람들은 혜안이 있구나 하는 생각이 들었다. 아직 BERT 뒤에 논문들을 읽어보지 못했지만, 전체적으로 NLP 논문들이 작은 단위(근처 단어)를 보다가, 큰 단위(이 논문에서는 next sentence prediction으로 인접 문장까지) 봤다는 것을 봐서, 점점 참조하는 범위가 늘어나겠구나라는 것을 유추해 볼 수 있을 것 같다.  

+ Recent posts