본문 바로가기

deep learning

BERT 구조 이해하기

Geneformer 코드를 살펴보던 중, transformer를 기반으로 한 BERT 모델을 불러온 것을 확인하였다.

Geneformer를 더 잘 이해하려면 BERT 부터 알아야할 것 같다. 

Transformer는 공부한 적이 있지만, BERT는 구조를 살펴본 적이 없어서 여기다가 정리해보려고 한다.

 

 

 

 

BERT: Bidirectional Encoder Representations from Transformers 

 

BERT는 pretrained model. 

근본적으로 Language Representation을 해결하기 위해 고안된 구조

즉, 단어, 언어를 어떻게 표현?에 초점을 맞춘 모델

 

왜 Bidirectional?

문장을 앞->뒤 뿐만 아니라 뒤->앞 으로도 파악하기 위해.

 

BERT의 기본 구조

Transformer 구조 사용

단, encoder-only model

(아래 그림에서 왼쪽 부분만 사용했다는 뜻. task에 적용이 아니라, 말그대로 '표현'에 필요한 부분만 가져다가 사용한듯)

 

그렇다면 encoder를 어떻게 학습시켰는지 알아보자.

 

Input Representation

 

1. Token Embeddings

  • 특수 토큰(CLS, SEP)을 사용하여 문장을 구별
  • CLS: 입력받은 모든 문장의 시작 토큰; 여기에 classifier를 붙이면 분류 테스크 가능
  • SEP: 첫번째, 두번째, 세번째...문장을 구별

2. Segment Embeddings

  • token으로 나눠진 단어들을 다시 하나의 문장으로~ 
  • 문장 구별을 하는 임베딩

3. Position Embeddings

  • Transformer에서 사용된 것처럼 각 토큰의 위치를 알려주는 임베딩 (but transformer에서 사용한 함수 방법과는 다름)

1,2,3 임베딩을 더한 임베딩이 최종 input으로 사용된다. 

 

Pretraining

두 가지 unsupervised 방식을 사용하여 문장 표현 학습

1. Masked Language Model (MLM)

  • 문장에서 단어 일부를 랜덤하게 [MASK] 토큰으로 바꾸고, 이를 Transformer 구조에 넣어서 마스킹된 부분을 예측하도록 학습하는 방식
  • 15%를 랜덤하게 [MASK] 토큰으로 바꾸는데, 이 15% 중에서 80%는 [MASK] 토큰으로 바꾸고, 10%는 무작위 단어로 바꿈

 -> context 학습 가능

 

2. Next Sentence Prediction (NSP)

  • 두번째 문장이 첫번째 문장의 바로 다음에 오는 문장인지 맞춤 
  • 라벨은 IsNext / NotNext 두 가지로, 다음에 오는 문장이 맞으면 IsNext, 아니면 NotNext

-> 문장 사이의 관계 학습 가능 

 

cf. pretrained model간 비교

BERT vs OpenAI GPT vs ELMo

위의 그림에서 볼 수 있다싶이 OpenAI GPT, ELMo와 다르게 BERT만 양방향 context 파악 가능

 

 

다음에는 Geneformer 코드에서 BERT 불러오는 부분을 다시 살펴볼 예정 (구조 파악)