BERT : Pre-training of Deep Bidirectional Transformers for Language Understanding (2019, arXiv preprint)

2023. 12. 19. 19:28AI & ML & DL/Paper Review

Introduction

  • pre-trained language representation을 활용하는 방법에는 task-specific architecture에 pre-trained representation을 추가적인 feature로 사용하는 (예 : ELMo) feature-based 방법과 task-specific parameter를 덜 쓰되 task에 맞춰서 pre-trained parameter를 전부 fine-tuning하는 (예: GPT) fine-tuning 방법이 있다. 두 방법론 모두 pre-training시에 unidirectional language model에 같은 objective function을 활용한다고 한다.
  • 이 논문에서는 현존하는 방법론들이 pre-trained representation의 영향을 제한시킨다고 본다. 특히나 standard language model들이 unidirectional 한 점이 제일 문제로써 sentence-level task처럼 bidirectional하게 보아 context를 이해해야 하는 경우에 매우 치명적이라고 한다.
  • 그래서 이 논문에서 제시한 BERT모델은 pre-training objective로 MLM(masked language model)을 활용해 unidirectional하게 학습하는 점을 완화하고자 했다.
  • 이 논문의 contribution들은 아래와 같다.
    • Langauge representation을 pre-training하는데 bidirectional 하게 학습하는 것의 중요성을 증명했다고 한다.
    • Pre-trained representation을 활용하면 task-specific architecture이 덜 필요해진 것을 실험 결과를 통해서 보였다고 한다.
    • BERT 모델 자체가 NLP task들 중 11개에서 SOTA를 먹었다고 한다.

Method

  • BERT는 pre-training과 fine-tuning으로 크게 두 스텝으로 이루어져 있다고 한다. Pre-training에서는 unlabeled data를 여러 pre-training task들에 대하여 학습을 하고 fine-tuning에서는 pre-trained parameter들을 활용하되 모든 parameter들을 특정 task에 맞도록 labeled data로 재학습한다.
  • 모델 구조는 multi-layer bidirectional Transformer encoder를 활용한다. 논문에서는 BERT Base / Large 버젼을 만들어 layer 수 등 세부적인 구조까지 개제되어있다.
  • Input 및 Output : 30,000 단어 토큰들에 대하여 WordPiece embedding을 사용했다.
    • 여러 문제에 활용할 수 있도록, input representation가 single sentence인지 아니면 pair of sentence인지 구분할 수 있도록 구분용 토큰([SEP])을 두고 어느 senetence에 해당되는지를 알려주는 embedding을 모든 token에 더하는 조치를 해두었다고 한다.
    • 소스의 첫 토큰은 항상 special classification token([CLS])로 두었고 이에 대응하는 마지막 hidden state는 classification을 위한 sequence representation을 의미했다.
    • Input representation은 token / segment / position embedding들을 전부 더한 것으로 주어진다.
  • Pre-training BERT : Masked LM / NSP 두 unsupervised task들을 통해서 pre-train 하였다.
    • Masked LM : 랜덤하게 몇 프로 정도의 input token들을 masking 한 다음에 이를 맞추는 task로 cloze task라고도 한다. 이러한 경우에는 각 mask token들에 대응하는 final hidden vector들이 LM처럼 vocabulary에 대한 output softmax에 주어진다고 한다. 논문에서는 문장 전체를 복구하기보다는 그냥 mask된 단어들을 맞추는 것만 학습시켰다고 한다. 그러나 이렇게 pre-train할 경우에는 fine-tuning에서 [MASK] token이 주어지지 않아 다른 점이 생기므로, 이를 좀 완화시키기 위해서 masking 하는 token들이 항상 [MASK] token으로 바뀌지 않고 몇 프로 정도는 그대로 두거나 / 랜덤한 token으로 바꾼다고 한다.
    • NSP(Next Sentence Prediction) : QA 나 NLI 같은 task들에서는 두 문장의 관계를 이해하는게 중요하므로 단일 언어의 corpus에서 생성하기 쉬운 NSP task를 pre-train 한다고 한다. Input에 문장 A와 B가 같이 주어질 때 반반의 확률로 B가 A 이후에 오는 문장이거나 아닐 수도 있다. (이를 각각 IsNext / NotNext로 labeling 했다고 한다.) [CLS] token의 final represenation이 NSP에 활용된다고 한다.
    • Pre-training data : pre-training corpus로는 BooksCorpus / English Wikipedia(text passage만)를 활용했으며, document-level corpus를 사용했다고 한다.
  • Fine-tuning BERT : Transformer의 매커니즘 자체가 BERT를 많은 용도로 사용할 수 있게 해서 fine-tuning은 쉬운 편이라고 한다.
    • Text pair들을 활용하는 task들이라면 주로 각 text pair들을 따로따로 encoding을 하고 bidirectional cross attention을 적용해야하는데, BERT는 self-attention mechanism으로 이를 한번에 할 수 있다고 한다. (text pair들을 이어서 self-attention을 그냥 돌리므로)
    • 각 task별로 그냥 task-specific input / output을 BERT에게 주고 모든 parameter들을 end-to-end 방식으로 fine-tuning 하면 된다고 한다.
      • Pre-training으로 주어진 sentence-pair input들은…
        • paraphrasing 에서의 sentence pair
        • entailment 에서의 hypothesis-premise pair
        • QA 에서의 question-passage pair
        • text classification / sequence tagging 에서의 degenerate text-∅ pair
        와 유사하다고 볼 수 있으며
      • Output들의 token들은 QA / sequence tagging 등을 위해 output layer에서 활용될 수 있으며 [CLS] representation은 classification을 위한 output layer에 활용되어 entailment / sentence analysis에 활용될 수 있다.
    • Fine-tuning은 pre-training에 비해서 inexpensive하다고 한다.

Conclusion

  • 최근에 language model들을 위한 transfer learning이 좋은 성능을 보임에 따라 많은 language understanding system들에는 unsupervised pre-training이 필수적임을 알게 되었다. 그래서 deep unidirectional architecture라도 성능 향상을 볼 수 있었는데, 이 논문에서는 deep bidirectional architecture을 활용함으로써 generalization을 했다는 점을 major contribution으로 삼는다.

 

예전에 리뷰했던 BERT 논문입니다. 이 논문도 Transformer 논문을 읽고 읽어본 논문이었는데 꽤 재밌게 읽었습니다. MLC논문들에 비해서 어느정도는 읽기가 편했으나 NLP를 모르는 입장으로써 새로운 단어들이 매우 나와서 좀 헤맸던 기억이 있습니다. 그래도 이 논문도 AI / DL 을 공부한다면 꼭 읽어봐야할 논문이라고 생각합니다.

 

제가 알기로는 이 논문이 제가 군생활동안 제대로 리뷰한 논문들 중 마지막일겁니다. 다른 논문을 읽게되거나 정리할 기회가 된다면 또 이 블로그에 글을 올리도록 하겠습니다.