ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [논문] BERT, 2018
    개발/머신러닝-딥러닝 2022. 6. 9. 17:49

    제가 이해한 내용을 정리한 글입니다. 오류가 있으면 고쳐주세요!

    BERT, Bidrectional Encoder Representations from Transformers

    최근 자연어 처리 분야에서 빠질 수 없는 이름이다.

    트랜스포머 계열 중 인코더에 집중한 모델이며, 이를 베이스로 다양한 BERT모델이 만들어졌다.

    논문은 여기

     

    배경

    사전학습 모델은 자연어 처리 분야에서 굉장히 효과적이다.

    현재 사전학습 모델은 크게 2가지가 있는데,

    ELMo와 같이 특정 Task를 중심으로 사전 학습된 표현식을 추가적으로 사용하는 feature-based모델과

    GPT와 같이 Task관련 파라미터를 최소화하고 사전학습된 파라미터를 fine-tuning하는 모델이 있다.

    그러나 위 두 예시는 Unidirectional구조를 사용하고 있다.

    왼→오의 문장 흐름을 가지고 학습하는 것은 양방향을 이용해 문맥을 파악하는 것 보다 안 좋다.

     

    BERT는 사전학습 단계에서 입력된 토큰을 랜덤하게 Mask하고, 문맥에 근거해 Mask된 단어를 유추하는 MLM 방식을 사용한다. 이는 왼쪽과 오른쪽, 문맥을 모두 표현할 수 있기 때문에 양방향 트랜스포머 모델을 학습할 수 있게 된다.

     

    모델

    BERT는 사전학습과 파인튜닝, 두 단계로 구분된다.

    사전학습 단계에서는 unlabeled data를 통해 학습하고, 이 사전학습된 파라미터를 가지고 파인튜닝 단계에서 특정 Task 수행을 위한 labeled data로 학습한다.

    두 단계로 나뉘어져 있지만, 사전학습에 사용하는 모델과 파인튜닝에 사용하는 모델은 비슷한 구조를 가진다.

    모델의 구조

    BERT는 기본적으로 Multi-Layer Bidirectional Transformer Encoder를 사용한다.

    이 논문에서는 두 가지 크기의 모델을 사용하는데, 다음과 같다.

    • BASE: 12-layer, 768-hidden, 12-self attention heads
    • LARGE: 24-layer, 1024-hidden, 16-self attention heads

    모델의 입력

    입력은 다양한 모델을 다룰 수 있게 하기 위해서 일반적으로 생각하는 '문장'이 아니라 텍스트에서의 범위를 문장으로 하여 입력받는다. 한 문장 혹은 두 문장이 묶여져 토큰화된 것을 시퀀스라고 한다.

    하나의 시퀀스는 무조건 [CLS]토큰으로 시작하며, 두 문장 쌍을 입력받는 경우 문장을 구분하는 구분자는 [SEP]토큰이다.

    입력 시퀀스는 세 가지 임베딩의 합으로 표현된다.

    • 각 단어별로 매칭되는 WordPiece의 임베딩
    • 단어가 문장A, B중 어디에 속하는지 나타내는 임베딩
    • 문장 내에서 단어의 위치를 나타내는 포지션 임베딩

     

    Pretraing BERT

    Masked LM

    이전까지 bidrectional 모델을 사용하지 않은 이유는 학습과정에서 LM이 예측할 다음 단어를 참조하게 되기 때문이다.

    따라서 BERT는 양방향 표현을 학습하기 위해서 입력 토큰 중 일정 비율을 masking한다. 논문에서는 15%의 비율이다.

     

    그러나 마스크 토큰은 fine-tunning 과정에서는 나타나지 않는 토큰이므로 이를 조정하기 위해서

    마스크된 단어들 중 80%는 [MASK]토큰으로, 10%는 다른 토큰으로, 10%는 그대로 사용하였다.

    이렇게 생성된 i번째 토큰은 cross entropy 함수를 통해 원래 토큰을 찾는 데에 사용된다.

     

    Next Sentence Prediction

    이 분야의 많은 과제들은 두 문장의 관계를 이해하는 것이 중요하다.

    이 관계를 파악하기 위해서 문장 A와 B를 통해 B가 A의 다음 문장인지를 학습한다.

    B의 50%는 A의 다음 문장이며 나머지는 랜덤하게 고른 문장이다.

    이런 단순한 작업이 QA나 NLI 과제에서 도움이 됨을 확인했다.

     

    학습에 사용한 corpus는 BooksCorpus, English Wikipedia를 사용했다.

     

    Finetuning BERT

    BERT는 기본적으로 self attention을 따르기 때문에 Task에 맞는 적절한 input과 output을 정의하기만 하면 된다.

    pretraining 과정보다 훨씬 적은 시간이 걸린다.

     

    결론

    총 11개의 task에서 BERT가 두각을 나타냈다.

    특히 Ablation Study를 통해서 위 구조로 작성한 모델이 가장 좋은 성능을 보였다.

    또한  model의 크기가 클 수록 성능이 좋아졌으며, 이는 very small task에서도 마찬가지로 나타났다.

     

    코드

    Hugging Face에서 구현한 코드

     

    GitHub - huggingface/transformers: 🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.

    🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX. - GitHub - huggingface/transformers: 🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, a...

    github.com

     

    댓글

Designed by Tistory.