반응형


BERT: Pretraining of Deep Bidirectional Transformers for Language Understanding

NLP계의 전설, BERT 논문을 리뷰해보자.

 

 

 

Abstract 


  • 본 논문은 새로운 방식의 Language Model을 소개한다. Bidirectional Encoder Representations from Transformer(BERT)이다.

  • 기존 ELMo와 같은 방법은 Shallow Bidirectional 하거나, GPT와 같이 Unidirectional 하였지만, 본 논문의 BERT는 모든 Layer에서 좌측과 우측에 있는 모든 내용을 학습한다.

  • 그 결과로 BERT 모델은 단순히 output layer를 하나 추가하는 방식으로 대다수의 NLP Task에서 SOTA를 달성하였다.

  • GLUE 성능 80.5%(기존 SOTA 대비 7.7% 향상), MultiNLI 성능 86.7% (기존 SOTA 대비 4.6% 향상), SQuAD v1.1 에서 F1 93.2(기존 SOTA 대비 1.5 point 향상), SQuAD v2.0에서 F1 83.1(기존 SOTA 대비 5.1 point 향상)

 

Introduction


  • Language Modeling에서 Pre-training은 NLP Task 성능을 높이는데 크게 기여해왔다. 

  • 이러한 NLP Task들은 Natural Language Inference나 Paraphrasing과 같은 문장간의 관계를 예측하는 문장 단위 Task와 Named Entity Recogintion(NER)와 Question Answering과 같이 토큰 단위의 정밀한 Output을 반환해야 하는 토큰 단위 Task로 나뉜다.

  • Pre-training 방식을 Down-stream Task에 적용하는 방법론은 크게 2가지로 나뉠 수 있다고 저자는 설명한다.

  • 첫 번째로는, ELMo와 같은 Feature-based Approach로 사전 학습된 모델 Feature를 특정 Task를 수행하는 곳에 Freeze한채로 붙여서 사용하는 방식이다.

  • 두번째로는, GPT와 같은 방식의 Fine-tuning Approach로, 대량의 데이터로 학습된 모델을 특정 Task에 맞는 Dataset으로 Fine Tuning 시키는 것이다.  Feature-based와 달리 Fine-tuning 과정에서 Pre-trained Feature들 또한 갱신된다.

  • ELMo 방식의 경우 Left to Right 방식과 Right to Left 방식에서 추출된 Embedding을 Concat하여 사용하는 Shallow Bidirection이고, GPT의 경우 Left to Right의 단방향성(Unidirection) 방식으로 학습을 진행한다.

  • 이러한 단방향성 접근은 Pre-trained Representation의 성능을 크게 제한한다고 저자는 주장한다. 예를 들어, OpenAI의 GPT모델의 경우 Left to Right 구조를 지니고 있는데, 이는 각각의 토큰이 자신의 위치 이전에 있는 토큰만을 접근할 수 있음을 의미하며, 문장 단위 Task에서는 최적의 성능을 얻지 못하게 되고, Question Answering과 같은 토큰에 굉장히 민감한 Task에서는 매우 심각한 성능 향상을 일으킬 수 있다.

  • 본 논문에서는 양방향성을 고려한 Fine-tuning Approach 모델인 BERT를 소개한다. Mask Language Model 방식을 통해 특정 토큰을 임의로 마스크를 씌워주고, 원본 단어를 예측하는 방식으로 학습을 진행한다.

  • 이 과정에서 MLM은 왼쪽에 존재하는 토큰과 오른쪽에 존재하는 토큰을 모두 고려하게되는데, 이것이 바로 BERT의 양방향성을 가지게 하는 요소이다. 

  • MLM 뿐만 아니라, BERT에서는 Next Sentence Prediction(NSP)까지 활용을 한다. 이를 통해 문장간의 연관관계를 좀 더 잘 나타낼 수 있으며, Question Answering과 같은 문제에서 높은 성능 향상을 가져온다.

  • 본 논문의 기여점은 다음과 같다. 첫째로는 Bidirectional Language Model을 제시했다는 점, 둘째로는 Fine-tuning based 방식으로는 최초로 SOTA를 달성했으며, 별도의 Task Specific한 구조없이 단순히 Fine-tuning을 통해서 높은 성능을 달성할 수 있기에 공학적 편리성을 제공한다는 점이 있다.

 

 

BERT


  • BERT는 크게 2가지 단계로 나뉘는데, 첫 단계는 대규모 데이터셋을 바탕으로 문장 이해를 학습하는 pre-training 과정과 down-stream task에 맞게 fine-tuning 하는 과정이다.

  • pre-training 과정에서는 특정 task에 상관없이 unlabeled 데이터를 통해서 기본적인 문맥 이해를 위한 학습이 진행되며, fine-tuning 과정에서는 pre-training 과정에서 생성된 parameter를 바탕으로 labeled 데이터를 통해서 fine-tuning을 진행한다.

  • fine-tuning 과정을 통해서 각각의 down-stream task에 대해 서로 다른 모델들이 생성되지만, 이들은 기존 pretrained 에 사용된 Architecture와 크게 다르지 않다. 마지막에 Dense Layer만 추가되는 정도이다.

  • 모델 구조는 기본적으로 Transformer의 Encoder 부분을 활용하여 구현되었으며, Layer 12개, Hidden Layer Size 768, Multi-head Self Attention의 Head 개수 12개를 바탕으로 하는 BERT Base 모델과 Layer 24개, Hidden Layer Size 1024, Head 개수 16개를 바탕으로하는 BERT Large 모델을 실험하였다.

  • BERT Base 모델은 GPT 와 거의 비슷한 수준의 파라미터 수를 가진다.

 

 

BERT - Input/Output Representations


  • BERT가 다양한 Down-stream task들을 아키텍처의 변화 없이 높은 정확도로 수행하기 위해서는 input representation이 단일 문장 뿐만 아니라, Question Answer와 같은 문장의 pair도 효과적으로 표현할 수 있어야 한다.

  • 본 논문에서 다루는 "Sentence"란, 실제 언어학적인 문장의 의미보다는 연속적인 text들의 배열이다. 즉, Input Sequence란, 입력으로 들어오는 토큰들의 집합이다. 그것은 1문장일 수도, 2문장일 수도 있다.

  • BERT는 WordPiece embedding을 사용하였으며 약 30000개의 token vocabulary를 통해 구축되었다.

  • 첫 문장은 반드시 classification 토큰인 [CLS]로 시작하며, 해당 토큰의 최종 hidden state값을 바탕으로 해당 문장이 정확히 어떤 내용을 다루는지를 인식하고 Classification을 진행하게 된다.

  • 필요에 따라서, Sentence Pair가 1개의 Sequence로 입력될 수 있다. 이를 효과적으로 처리하기 위해서 BERT는 두가지 문장을 [SEP] 토큰을 통해서 구분한다. 그 후, 학습 가능한 Embedding을 각각의 토큰에 더해줌으로써 해당 토큰이 문장 A에 속하는지, 문장 B에 속하는지 구분가능하도록 한다.

 

 

Pre-training BERT


  • ELMo나 GPT의 방식과 달리 BERT는 기존의 Left to Right, Right to Left 방식을 사용하지 않는다.

  • 그 대신, BERT에서는 두가지 unsupervised task를 통해서 문장을 이해하는 능력을 습득하게 된다.

Task #1 Masked LM

  • BERT는 양방향 학습을 위해서 Masked Language Modeling(MLM)이라는 과정을 제안한다. 이 과정은 1953년에 발표됐던 논문에서 착안하였으며, Cloze task라고 불리던 방식이다.

  • 입력 Sentence에 대해서 15% 정도의 Token을 Mask로 사용하게 되며, Mask로 지정된 부분을 예측하고 softmax를 통해 vocabulary에서 최종 토큰을 가져오는 방식으로 동작한다. 이 때, 문장 전체를 예측하지 않고 Mask에 해당하는 토큰 부분만 예측한다.

  • 이를 통해 Bidirectional Pre-trained 모델을 얻어낼 수는 있지만, 실제 fine-tuning과정에서는 [Mask]를 사용하지 않기 때문에 이러한 차이를 제거해주기위해서 항상 Mask 토큰을 [Mask]로 대체하지는 않는다.

  • 본 논문의 저자들은 임의로 전체 토큰의 15% 정도를 예측에 사용하기 위한 토큰으로 사용하고, 이중 80%를 [Mask]로 대체하고, 10%는 임의로 아무 토큰값이나 넣어 대체하고, 10%는 아예 변경하지 않는 방식으로 학습을 진행한다. 이 때, 아예 변경하지 않았던 10%의 토큰의 경우에도, BERT는 이것이 원본인지 임의로 바뀐 것인지 구분하지 못하므로, 예측을 진행해야 한다.

  • 각각의 토큰에 대해서 예측을 진행하고, Cross Entropy Loss를 통해 모델을 학습시킨다. 

 

Task #2 Next Sentence Prediction(NSP)

  • NLP Task중에서 Question Answering(QA)나 Natural Language Inference(NLI)의 경우 두 문장간의 관계성을 확실히 이해할 수 있어야 한다. 이는 단순히 Language Modeling만으로는 얻을 수 없는 정보이다.

  • 이런 문장간의 관계성을 학습시키기 위해서 BERT에서는 Next Sentence Prediction(NSP)라고 불리는 Binary Classification을 수행한다.

  • 전체 데이터중에 절반은 문장 A와 실제 문장 A의 뒤에 오는 문장인 문장 B를 뽑고, 나머지 절반은 문장 A와 전혀 관련 없는 문장 B를 뽑는 방식으로 샘플링을 한 다음 학습을 진행한다.

  • B가 정말 A의 다음 문장이라면 IsNext Label을, B가 A와 관련 없는 문장이라면 NotNext Label을 사용하는 방식으로 문장간의 연관관계를 학습하게 되는데, 구현상으로 굉장히 간단하지만 QA와 NLI 부분에서 굉장히 높은 수준의 정확도 향상을 가져왔다고 저자들은 주장한다.

 

Fine-tuning BERT


  • Fine tuning은 Pretrain에 비해서 훨씬 더 빠르게 진행되며, 대략 2~3epoch만 학습해도 SOTA 수준에 이르는 것을 저자들은 실험을 통해 보여준다.

  • 위 그림은 각각의 NLP Task에 대해서 Fine-tuning이 어떻게 이뤄지는지를 도식화한 그림이다.

 

 

Conclusion


  • 본 논문에서 진행한 실험의 결과물들은 Language Model에 있어서 Unsupervised Pre-training은 매우 중요한 요소라는 것을 입증하고 있다.

  • 특히, 본 논문에서 제시한 Bidirectional Pre-training은 데이터가 적은 fine-tuning task에서도 효과적인 성능을 보인다는것을 알수 있었다.

  • 본 논문이 학계에 기여하는 바로 가장 주요한 것은, Bidirectional Pre-training의 효과를 down-stream task에 즉시 적용할 수 있도록 거의 변화가 없는 (Dense Layer만 뒤에 붙이면 되는) 아키텍처를 제시했다는 점에 있다고 저자들은 주장한다.

  • 역시 전설적인 논문답게 배울 점이 많은 논문이었다. 도대체 구글의 리서쳐들은 어떻게 이런 아이디어들을 내는 건지 궁금하다. 복잡한 수식 없이도 굉장히 직관적으로 이해가 가능하며, 이론적 근간이 충분하지 않은 사람이 듣더라도 고개를 끄덕일 만한 설득력 있는 주장을 펼쳐나가면서 결과까지 기존 연구보다 압도적으로 좋게 나타난다. 경이로울 지경이다.
반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,