BERT : Bidirectional Encoder Representations from Transformer

- transformer에서 encoder 정보만 사용하는데, bidrectional한 정보만 사용하겠다.

1) Masked language model : 순차적으로 model을 사용하는 것이 아닌, 특정 위치에 mask를 씌워서 그 부분을 예측.

2) Next sentence prediction : 다음 sentence가 corpus에서의 contextual하게 다음 등장하는 sentence인지 학습.


Input/Output representations

- down-stram tasks에 따라, single-sentence를 받을수도 pair로 된 sentences를 받을 수도 있다.(Q-A Task)

- Sentence : 연속적인 task의 span(문법적으로 맞는, 완벽한 문장이 아니어도 된다.)

- Sequence : single setence일수도 2개의 sentence가 결합된 형태일수도 있음.

- sentence가 들어갈 때 token단위로 들어가는데, 일정 비율로 token에 mask를 씌워서 input으로 넣음. (unlabeled sentence-> 연속적인 sentence를 집어 넣겠다.)

Token 개념

- [CLS] : sentence의 시작을 알려주는 토큰

- [SEP] : 두 개의 sentence를 구분해주는 토큰

- final hidden vector of [CLS] token : 감성분류나, NSP, 유사도와 같은 binary 분류만 할 때는 이 token만 사용함.

- Tn : n번째 token에서 hidden vector

Bert의 목적

- 0/1 token(final [cls] token)과 Mask LM task를 동시에 학습시키는 게 목적

 

Input Representation is the sum of

1) Token embedding : wordpiece embeddings with a 30,000 token vocabulary (token들의 위치에 해당하는 embedding vector) 

* wordpieces :_J et _makers _fe _ud -> 띄어쓰기로 word를 구분하는 걸 _로 구분. 한 word 내에서 자주 발생하는 것으로 나눈다는 개념(=BPE와 유사). 자주 쓰는 단어 단위.

2) Segment embedding : [SEP] token 기준으로 sentence를 기준으로 나뉘는 embedding. 위 그림에서 EA, EB로 나눠진 이유.

3) Position Embedding : token position에 대한 embedding.

-> 각각의 embedding들이 동일한 차원을 가지고 있으므로 더해서 representations을 구성하게 됨.


Pre-training BERT Task1 : Masked Language Model(MLM)

- 전체 sequence의 15%만 [mask] token을 씌움. 

- output 윗 단에 FC layer + GELU + Norm -> w'4이 w4(실제 token)이 되도록 학습을 시켜주는 것이 MLM.

- ELMo는 양방향으로 각각 학습해서 token을 선형결합하는 방식 사용. vs Bert는 순차적이 아닌 mask를 씌워서 model이 학습을 통해 가려진 단어를 예측하도록 함.

- pre-trained단계에서만 일어나고 fine-tuning단계에서는 일어나지 않음. [MASK] token에 대한 mismatch가 발생할 수 있음.

-> mismatch 해소 solution : i번째 token이 mask가 씌워진다고 하면, 그 중 80%만 실제로 masking을 하고, 10%는 random token으로 치환, 10%는 masking을 하지 않고 original token을 그대로 사용. (왜?)

 

Task2 : Next Sentence Prediction (NSP)

- QA이나 NLI는 2개 이상의 문장들에 대한 관계를 이해해야 풀어낼 수 있음. 문장 단위의 Language model은 이 관계를 이해할 수 없음. ELMo와 GPT는 문장 단위로 학습했기에, 2개 이상의 문장을 함께 학습하진 않음.

- 50%는 A -> B가 이어지는 문장에서 뽑아와서 label 1로 주고, 50%는 실제로 다음 문장이 아닌 것에서 뽑아와서 label 0으로 줌. 그 이후 sequence를 구성해서 [token]을 통해 next sentence인지 아닌지 판별.


Datasets for pre-training

- BookCorpus(800M words), https://github.com/soskek/bookcorpus 

- English Wikipedia(2,500M words), https://github.com/attardi/wikiextractor 

 

Hyper-paramter settings

- maximum token length : 512 (90%의 step은 128개로 사용)

- batch size : 256

- l2 weight decay

- 모든 layer에 대해 dropout 0.1

- ReLU -> GeLU


Fine-tuning BERT

- BERT 바로 윗 단에 layer하나만 쌓아도 각 task에 맞게 적용 가능.

MNLI 등 : sentence pair를 classification. sentence 2개가 유사한지 아닌지 class label로 분류

binary classfication 등 : 단일 sentence를 분류하는 task

QA 등 : Question와 paragraph를 입력으로 주고 question에 해당하는 answer를 output으로 출력

NER 등 : 단일 sentence의 각 token에 대해 output을 출력하는(ex-각각의 형태소를 출력하는)


Experiment 1 : effect of Pre-training Tasks

- NSP를 사용하지 않을 때보다 NSP을 사용했을 때, 2개의 문장을 사용하는 Task에서 큰 성능 향상이 일어남.

 

Experiment 2 : Effect of Model size

- Hyperparamter가 많아질수록. 복잡해질수록 성능 향상이 일어남.

 

Experiment 3 : Feature-based Approach with BERT

- fine tuning하지 않고 마지막 4개의 hidden layer를 결합 혹은 연산했을 때, fine tuning했을 때와 비슷한 성능을 가짐.

728x90
반응형

'딥러닝 > 자연어처리' 카테고리의 다른 글

[NLP] GPT-2 논문리뷰  (0) 2023.01.16
[NLP] GPT 논문 리뷰  (0) 2023.01.13
[NLP] Transformer 논문 리뷰  (0) 2023.01.03
[NLP] seq2seq Learning  (0) 2023.01.03
자연어 처리  (0) 2021.07.12
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기