Notice
Recent Posts
Recent Comments
Link
관리 메뉴

one by one ◼◻◼◻

[NLP 논문리뷰] BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding 본문

논문리뷰

[NLP 논문리뷰] BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding

JihyunLee 2021. 12. 31. 16:52

제목 : BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

저자 : Jacob Devlin Ming-Wei Chang Kenton Lee Kristina Toutanova

링크 : https://arxiv.org/pdf/1810.04805.pdf

 

아직 뚝딱석사 1학기긴 하지만(이제 곧 2학기).. 그래도 제가 생각하기에 NLP가 최근 사람들에게 핫 해지고, 한단계 성장을 이루게 된 것은 BERT의 영향이 크다고 생각합니다. 한국에서도 BERT와 관련된 좋은 책들이 많이 나오고 있구요!

 

그래서 이번에는 제가 이해한 BERT논문을 정리하고, 요약해 보았습니다. 논문을 읽어보니, 유튜브에서 설명 들었던것, 각종 블로그에서 공부를 했던 내용이 깔끔하게 정리되는 기분이었습니다. 그럼 리뷰 시작해 보도록 하겠습니다!

 

BERT

Abstract

BERT는 Bidirectional Encoder Rpresentations from Transformers의 약자입니다. 즉, 양방향(Biderectional)이면서 트랜스포머의 인코더(Encoder)를 가지고 있다는 것입니다. 이는 GPT가 트랜스포머의 디코더(Decoder) 구조만 가지고 있다는것, 그리고 ELMO와 GPT는 단방향의 구조라는 점에서 이전의 language model(= GPT, ELMO) 과 차이가 있습니다. 그리고 간단한 구조를 가지고 있으면서도(fine tuning시에 하나의 레이어만 더 만들면 됨),  논문이 나올 당시 많은 task에서 state of the art를 찍었습니다.

 

1.Introduction

Pre-trainned 된 language model을 사용하는것은 task의 성능에 도움이 된다고 알려져 있습니다. Pre-trainned된 모델을 사용하는것에는  feature-based방식과 fine-tuning방식 두가지가 있습니다. ELMO와 같은 feature-based방식은 task마다 특정한 model 구조를 만든 뒤, pre-trained된 representation을 추가적인 feature로 사용하는 방식입니다. GPT와 같은 fine-tuning방식은 language model 을 최대한 task에 범용적으로 사용할 수 있게 만든뒤, task specific하게 약간의 수정을 거쳐서 전체 parameter를 fine-tuning시키는 방식입니다.


지금까지 ELMO와 GPT는 모두 단방향의 정보만 사용하였습니다. 그러나 BERT 연구자들은, 단방향의 정보로 모델의 학습시킬때의 단점이 있다고 말하며, MLM(masked language model) 방법으로 language model을 학습시키는 방법을 제안하고 있습니다. 또한 next sentence prediction 또한 학습시켜서, text pair사이의 정보또한 학습할 수 있도록 하였습니다.

 

2. Related Work

패스!

 

3. BERT

 

 

  Bert는 pre-training과 -fine-tuning이라는 두가지 framework로 구성되어 있습니다. Pre-training동안에는, 라벨링이 되지 않은 데이터셋으로 pre training task들을 수행합니다. Fine tuning 단계에서는, pre-training된 parameter와 라벨링이 된 데이터로 fine tuning task를 수행합니다. Bert는 fine tunnign단계에서 pre training의 모델 구조와 parameter를 전부 활용하고, 약간의 레이어 추가만으로 fine tuning task를 수행한다는 점에서 장점을 가지고 있습니다.

 

Model Architeuctrue

Bert는 multi-layer 의 bidirectional Transformer encoder의 구조를 가지고 있습니다. 이 encoder 구조는 transformer와 거의 동일한 구조를 사용하고 있습니다.(혹시 트랜스포머가 뭐지..? 하신다면

2021.12.16 - [논문리뷰] - [NLP 논문리뷰] Attention Is All You Need(1) 여기서 트랜스포머에 대한 설명 먼저 읽고오시는 것을 추천드립니다!)

트랜스포머의 구조, BERT는 왼쪽의 Encder와 동일한 구조를 가지고 있습니다. 

Bert는 Bert base와 Bert large 두개의 모델 선택지를 가지고 있습니다. Bert base는 open AI의 GPT와 파라미터 크기가 비슷하나, GPT단방향, BERT는 양방향이라는 차이점을 가지고 있습니다.

 

Input/Output Representation

input의 구조

연구자들은 다양한 task에 Bert를 적용하기 위해 BERT가 하나의 sentence와 두개의 sentence를 모두 input으로 받을 수 있도록 하였습니다. 그리고 WordPiece 임베딩을 사용하여 문장을 표현하였습니다. 가장 첫번째 토큰은 [CLS]라는 special token을 두었고, 첫번재와 두번째 문장을 구별하기 위해서는 [SEP]토큰을 두었습니다. [CLS]토큰은 input전체의  구조와 내용을 요약할 수 있는 토큰입니다.

 

3.1 Pre-training BERT

이전의 langueg model(ELMO, GPT)은 left-to-rigth 나 right-to-left방식으로 langue model을 학습했습니다(language model 자체가 '다음에 올 단어를 예측하는 모델'이기 때문에 가장 자연스러운 방식이죠!). 그러나 BERT는 양방향 language model의 구조를 가지고 있습니다. 

조금 더 설명을 덧붙이자만, left-to-right의 pre-training방법의 경우 "나는 오늘 김밥을 먹었다" 라는 데이터가 있을때, "나는 __", 나는 오늘 __", 나는 오늘 김밥을 ___". 등을 학습합니다. right-to-left는 반대로 "먹었다 김밥을 오늘 ___" 와 같은 방법을 학습합니다. 이 방식이 GPT와 ELMo에서 사용한 방법입니다. 

BERT는 "나는 __ 김밥을 먹었다" 처럼 __ 를 예측하기 위해, __ 의 앞인 "나는" 과, "김밥을 먹었다" 를 모두 활용합니다. 이것이  양방향 학습입니다.

 

Task #1: Masked LM

Masked LM의 예시

BERT는 양방향 모델을 학습하기 위해서, 15%의 단어를 랜덤으로 선택하고 이중, 80%는 [MASK]토큰으로, 10% 는 랜덤한 단어로, 그리고 나머지 10%는 그대로 두어 [MASK] 를 맞추게 하는 task를 진행하였습니다. BERT는 80%의 [MASK] 토큰에 대해서는 [MASK] 토큰에 들어갈 단어를 예측하게 되고, 나머지 20%의 경우에는 원래 단어를 예측하는 task를(바뀌지 않은 상태라고 하더라도) 진행하게 됩니다.

 

Task #2: Next Sentence Prediction(NSP)

Next Sentence Prediction의 예시

두번째 task는 QA와 NLI(Natural Language Inference, 두 문장의 관계가 Entailment, Contradiction, Neutral중에 어떤것인지 파악하는 문제) 등에 활용하기 위해 두 문장 함께 학습하는 task입니다. Next Sentece Prediction은 이어지는 두 문장과, 이어지지 않는 두 문장을 같은 비율로 하여 dataset을 만든 뒤, 이어지는 문장이라면 IsNext를 아니라면 NotNext로 라벨링 하여 이를 맞추는 task입니다. 

 

Pre-training data

Pre-training에 사용한 데이터는 BookCorpus dataset과 Wikipedia dataset을 활용하였습니다.

 

3.2 Fine-tuning BERT

열심히 학습된 BERT를 그래서 어떻게 사용할 수 있을까요? BERT는 쉽게 개별적인 task에 적용이 가능한 구조를 가집니다.

이 이미지는 "그래서 BERT를 어떻게 사용하는건데?!" 라는 의문을 가진 분들께 도움이 될 만한 그림입니다. (a)는 NLI(두 문장사이관계 추론), STS-2(두 문장사이 유사성 추론)같이 문장이 두개가 들어가야 하는 경우의 예시입니다. 두 문장을 [CLS] sentence1 [SEP] sentence2 로 넣으면 BERT의 [CLS] 토큰이 문장간의 관계를 학습하게 되고, 1xHidden Size 를 가지는  [CLS] 토큰을 1xClass_Num으로 바꿔주는 layer를 통과시켜 가장 확률이 높게 예측되는 label로 prediction 하도록 하는 방식입니다.

(b)는 하나의 문장만 들어면 되는 경우로 문장의 감정이 어떤지 분류하는 경우에 해당하는 구조입니다.

(c)는 두개의 문장이 들어가는 경우로 QA같이 Question과 paragrah가 있는 경우입니다. 이 경우, 모델의 output에 start span을 예측하는 레이어 하나, end span을 예측하는 레이어를 두어 가장 확률이 높은 token을 각각 start token, end token으로 하는 모델입니다.

(d)는 문장 성분 같은 task를 수행 하는 모델 구조입니다. 모든 output을 활용하여, 문장성분 정보를 학습하도록 합니다.

 

4.Experiments

언어 모델을 평가하기 위해 GLUE라는 TASK가 있고 그 안에는 MNLI, QQP QNLI SST-2, CoLA, STS-B, MRPC, RTE task가 포함되어있습니다. BERT Large 모델은 여기서 모두 최고 성능을 달성하였습니다. (이 파트는 제가 크게 관심을 가진 파트가 아니라서 패스하겠습니다.)

 

5. Ablation Studies

Ablation Studies 에서는 5.1 Pretraing Task가 얼마나 Effect가 있는지, Model Size가 얼마나 Effect가 있는지, BERT의 pretraining 결과를 feature 의 일부로 사용하는 방식에 대해 연구를 진행했습니다. (이 파트는 제가 크게 관심을 가진 파트가 아니라서 패스하겠습니다.)

 

 

 

후기

논문에 GPT와 ELMo를 비교한 다양한 설명과 사용방법에 대한 설명까지 있어 친절한 논문이라는 생각이 들었습니다.

중간중간 뛰어넘은 부분이 많아서 그 부분이 궁금하시다면 읽어보신는 것을 추천드립니다🎉

링크 : https://arxiv.org/pdf/1810.04805.pdf

Comments