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

README·2023년 4월 10일
0

논문? 리뷰?

목록 보기
2/11
post-thumbnail

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

BERT는 2018년 구글에서 발표한 pre trained 언어 모델입니다. BERT라는 이름은 미국의 어린이 프로그램 Sesame Street에 등장하는 캐릭터의 이름입니다.(이 논문 이전에 발표된 ELMo라는 임베딩 모델도 Sesame Street의 등장인물인데 둘 간에 어떤 관계가 있는지는 저도 모르겠습니다.) BERT는 이름에서 보다시피 2017년 발표된 Attention Is All You Need라는 논문에서 발표한 Transformer를 활용한 모델로 현재 NLP 분야에서 최고 수준의 성능을 보여주고 있고 다양한 태스크에 활용되고 있습니다.

요약

BERT는 Bidirectional Encoder Representations from Transformers(Transformer를 활용한 양방향 인코더)라는 뜻으로 이전의 언어 모델들과 달리 모든 계층에서 문맥의 양쪽을 모두 활용해 학습을 하는 모델입니다. 그를 통해 사전학습된 BERT는 하나의 추가 output layer을 활용한 fine tuning만으로도 다양한 태스크에서 최고 수준의 성능을 보여줄 수 있습니다. BERT는 간단하지만 매우 강력하고 GLUE score를 포함한 7가지 nlp 태스크에서 최고의 결과를 보여줬습니다.

BERT 소개

사전 학습된 Language modeld은 많은 자연어처리 태스크에서 효과적이라는 것을 보여줬습니다. 사전 학습된 Language model을 활용하는 데는 두 가지 방식이 있는데 하나는 feature-based이고 하나는 fine-tuning입니다. Feature-based 방식의 예로는 Elmo가 있고 사전학습된 representation을 특정 태스크를 위한 아키텍처에 포함시키는 방식입니다. Fine-tuning 방식의 예로는 GPT가 있고 특정 태스크를 위한 파라미터를 최소화하고 사전학습된 파라미터를 태스크에 맞게 fine-tuning하는 방식입니다. 이 두 방식은 사전 학습에서 단방향 언어 모델을 사용합니다.
하지만 이 논문에서는 그런 방식이 사전 학습 모델의 성능을 제한시킨다고 이야기합니다. 가장 큰 제한사항은 주요 Language model들이 단방향 방식이라는 것이고 이것은 사전 학습에 사용할 아키텍처의 선택의 가짓수를 제한합니다. 만약 단방향 모델을 사용할 경우 모델의 self-attention layer에서는 이전의 token들만 attend할 수 있고 이런 제약은 질답 같이 앞뒤 문맥이 중요한 태스크에서 큰 문제가 될 수 있습니다.
이 논문에서는 앞서 언급된 단방향 모델의 문제를 masked laguage model을 통해 해결하는 BERT라는 모델을 제안합니다. Masked language model은 input 값의 token 중 일부를 랜덤하게 마스킹하고 문맥만을 이용해 그 자리에 어떤 어휘가 들어가야할 지 예측합니다. 단방향 모델의 사전 학습과 달리 MLM은 양쪽 문맥을 융합시켜 deep bidirectional Transformer를 학습할 수 있게 합니다. BERT는 MLM뿐만 아니라 text-pair representation도 함께 사전 학습하는 다음 문장 예측을 사용합니다.

Unsupervised Feature-based Approaches: 다양한 분야에 적용 가능한 representation을 학습하는 것은 그동안 활발하게 연구되었습니다. Word emeddings를 사전 학습하는 것은 현대 NLP에서 중요한 부분으로 단방향 언어 모델을 사용했었습니다. ELMO와 그 이전에서는 각 토큰의 문맥적 representation을 left-to-right representation과 right-to-left representation을 연결해서 만들었습니다. 태스크 특화 아키텍쳐와 문맥 word embedding을 결합할 때 ELMO는 여러 NLP 작업에서 최고의 성능을 보였습니다.
Unsupervised Fine-tunning Approaches: 처음에는 unlabeled text로 word embedding parameter만을 사전 학습한 모델을 사용했었습니다. 좀 더 최근에는 contextual token representation을 생성하는 인코더가 unlabeled data로 사전 학습된 후 supervised-data로 fine-tuning되어 사용되었습니다. 이러한 방식의 장점은 처음부터 학습시켜야 하는 파라미터의 개수가 줄어든다는 점입니다. 이러한 장점으로 OpenAI GPT는 GLUE 벤치마크에서 최고의 성능을 보였습니다.
Transfer Learning from Supervised Data: 전이학습은 Natural Language Inference나 machine translation 등 다른 부분에서도 좋은 성능을 보이고 CV 연구에서도 효과가 있음을 보였습니다.

BERT

BERT는 두 가지 단계로 이루어져있고 각각 pre-training과 fine-tuning입니다. 사전 학습에서는 여러 작업에 사용가능한 unlabeled data를 이용하고 fine-tuning 단계에서는 BERT가 pre-train된 parameter를 가진 채 initialize되고 모든 parameter들을 task에 맞는 labeled data로 학습을 합니다. 각각의 downstream task는 같은 사전 학습 parameter를 가지고 있었더라도 서로 다른 fine-tuned 모델이 됩니다. BERT의 특별한 특징 중 하나는 서로 다른 task에서 통일된 아키텍처를 가진다는 것으로 pre-trained 아키텍처와 downstream 아키텍처에는 미세한 차이만 존재합니다.

모델구조: BERT는 multi-layer bidirectional Transformer encoder를 기반으로 했습니다.(논문에서는 Transformer가 매우 흔하게 사용되고 BERT와 유사하므로 자세한 설명은 생략한다고 나와 있네요) 이 논문에서는 layer의 개수를 LL, hidden size를 HH 그리고 self-attention head의 개수를 AA로 나타냅니다. 논문에서는 두 가지 사이즈의 모델을 사용했고 자세한 사항은 아래와 같습니다.

ModelLLHHAATotalParametersTotal Parameters
BERTBASEBERT_{BASE}1276812110M
BERTLARGEBERT_{LARGE}24102416340M

BERTBASEBERT_{BASE} 모델은 비교를 위해 OpenAI GPT와 동일한 size로 설정했으며, BERT는 양방향 self-attention을 GPT는 한쪽 방향으로만 attend할 수 있는 self-attention을 사용한다는 차이가 있습니다.

Input/Output Representations: BERT가 다양한 downstream task를 수행할 수 있기 위해서는 input representation이 하나의 토큰 시퀀스에서 single-sentence와 pair of sentence를 모두 분명하게 represent할 수 있어야합니다. 이를 통해 하나의 "sentence"는 실제 언어적 문장이 아닌 임의의 연속된 텍스트 범위가 될 수 있습니다. 하나의 "sequence"는 BERT의 input token sequence를 나타내고 한 개의 문장 또는 2개의 합쳐진 문장으로 이루어질 수 있습니다.
BERT는 30,000 token vocabulary와 WordPiece embeddings를 이용했습니다. 각 시퀀스의 첫 번째 token은 특수 token인 [CLS]이고 이 토큰에 대응하는 마지막 hidden state는 분류 작업을 위한 aggregate sequence(집계 함수에 맞게 input sequence의 값들을 집계한 것?) representation으로 사용됩니다.
짝으로 지어진 문장은 하나의 sequence로 묶어서 사용합니다. BERT에서는 두 가지 방법을 이용해 짝지어진 문장을 구분합니다. 첫째는 [SEP] 토큰을 사용해 두 문장을 분할하는 것입니다. 두 번째는 어떤 토큰이 어떤 문장에 포함되는지 학습된 embedding을 사용하는 것입니다. 어떤 토큰에 대한 input representation은 대응하는 token, segment, position embedding의 합으로 결정됩니다.

BERT의 Input representation을 그림으로 나타낸 표입니다.

Pre-training BERT

BERT에서는 기존과 달리 단방향 모델을 사용하여 사전학습을 하지 않고 두 가지 unsupervised task를 이용해 사전학습을 진행했습니다. 학습에 사용된 두 가지 방법은 각 Masked LM과 Next Sentence Prediction(NSP)으로 논문에 설명되어 있습니다.
Masked LM: 양방향 학습에서는 단어가 간접적으로 자기 자신을 참조할 수도 있고 모델이 multi-layered context에서 target word를 사소한 것으로 예측할 수도 있다는 문제 때문에 그동안의 모델들은 단방향 학습을 사용했습니다. 하지만 깊은 양방향 모델이 단방향 학습보다 더 좋은 성능을 보여줄 수 있다는 것은 합리적으로 보입니다.
BERT에서는 deep bidirectional representation을 학습하기 위해 input token의 일부를 무작위로 선정해서 masking하고 masking된 token들을 예측하는 방법을 사용합니다. 논문에서는 이 과정을 masked LM(MLM)이라 부릅니다.
MLM 과정에서 단순히 [MASK] token을 통한 masking만을 이용하는 경우 fine-tuning과 pre-training 과정 사이의 mismatch가 생기므로 masking되는 token 중 80%는 [MASK] token으로, 10%는 무작위 token으로 변경하고 나머지 10%는 원래의 token을 변경하지 않고 사용합니다. 그 후 원래 token을 예측하는 방법으로 학습을 진행하고 loss 값은 cross entropy loss를 이용합니다.
Next Sentence Prediction (NSP): QA나 NLI 같은 태스크에서는 두 문장의 관계를 이해하는 게 중요한 요소입니다. BERT는 문장들 간의 관계를 이해하기 위해 next sentence prediction을 이용해 사전학습을 합니다. 이 과정에서는 두 문장의 짝을 이용하는데 그중 절반은 서로 이어지는 문장, 나머지 절반은 무작위로 생성한 문장들의 짝입니다.
Pre-trainig data: BERT의 사전 학습에는 BooksCorpus(8억 단어), English Wikipedia(25억 단어)가 사용되었고 Wikipedia는 text 구절만을 사용했습니다.

Fine-tuning BERT

Transformer의 self-attention mechanism을 통해서 BERT에서는 다양한 태스크를 쉽게 모델링 할 수 있기 때문에 fine-tuning 과정은 간단합니다. 문장 짝을 사용하는 application에서 주로 쓰이는 방법은 각 문장 짝을 각각 encode하고 biderectional cross attention을 수행하는 것입니다. 하지만 연결된 문장 짝을 self-attention을 이용해 encoding하는 것이 두 문장의 bidirectional cross attention을 효과적으로 포함하기 때문에 BERT에서는 self-attention mechanism을 통해 두 가지 단계를 하나로 통합합니다.
각각의 task를 수행하려 할 때는 BERT에 task-specific input과 output을 넣고 모든 파라미터들을 end-to-end로 fine-tune합니다. Input의 경우 예를 들면 패러프레이징에서는 문장 짝, 논리 확인에서는 가설과 전제, 질답에서는 질문과 답, 텍스트 분류나 sequence tagging에서는 degenerate-none pairs를 사용합니다. Output의 경우 token-level task에서는 token representation이 분류 작업에서는 [CLS] representation이 사용됩니다.

Experiments

BERT를 11가지 NLP task에 적용한 결과를 설명해놓았습니다. 각각 GLUE(언어 이해), SQuAD v1.1 & v2.0(질의응답), SWAG(주어진 문장에 이어지는 문장 찾기)에서 사용한 학습법과 학습 결과를 서술해고 각 task에서 BERT는 기존의 모델들을 뛰어넘는 성능을 보였습니다.

Ablation Studies

BERT에서 모델의 일부를 제거하고 실험한 결과를 설명해놓았고 이를 통해 요소들간의 관계적 중요성을 더 잘 이해할 수 있다고 하네요.

Effect of Pre-training Tasks

BERT에서 deep bidirectonal한 속성이 얼마나 중요한지 알아보기 위해 두 pre-training 과정을 평가해본 결과로 pre-training 과정을 제외한 모든 조건은 원래와 동일합니다.
NSP 제거: 사전학습에서 NSP를 사용하지 않고 MLM만 사용
LTR 사용 & NSP 제거: 사전학습에서 NSP를 사용하지 않고 MLM 대신 LTR(Left-to-Right)를 사용한 단방향 모델로 fine-tuning 과정에서도 단방향만 사용했습니다.

위의 표는 기본 모델과 모델 일부를 제거한 버전의 성능을 비교한 표입니다. 위의 표를 보면 NSP를 사용하지 않은 모델은 QNLI, MNLI, SQuAD 1.1에서 기본 모델에 비해 성능이 눈에 띄게 떨어지는 것을 볼 수 있습니다. LTR을 사용한 모델에서의 성능을 보면 bideriectional한 속성이 얼마나 성능에 영향을 끼치는지 알 수 있는데 LTR을 사용한 모델은 모든 task에서 MLM을 사용한 모델보다 성능이 떨어지는 것을 볼 수 있습니다.

Effect of Model Size

모델의 size가 fine-tuning에 어떤 영향을 끼치는지 알아보기 위해 레이어의 개수, hidden unit, attention head가 다른 여러 BERT 모델을 테스트해본 결과로 hyper parameter와 trainig 과정은 기존 모델과 동일합니다.

위의 표는 Size를 변경한 model들의 GLUE 성능 표입니다. 모델의 size가 커질수록 성능이 상승하는 것을 볼 수 있습니다. Large-scale task에서 모델의 size가 커질수록 성능이 향상되는 것은 기존에도 알려져 있었지만 small-scale task에서도 그렇다는 것을 보여준 첫 사례라고 논문에서는 이야기합니다. 기존에 feature-based model을 활용한 실험에서는 차원의 크기를 200에서 600까지 늘릴 때는 성능 향상에 도움이 되지만 1000 정도가 되면 성능 향상에 도움이 되지 않는다고 했었는데 그 결과를 뒤집은 것입니다. 이러한 차이가 생긴 이유는 task에 맞는 fine-tuning을 적용하는 방식과 사용하는 randomly initialized additional parameter의 개수가 매우 적은 것이 원인이라고 추측됩니다.

Feature-based Approach with BERT

BERT에 fine-tuning 방식과 feature based 방식을 적용하고 CoNLL-2003 Named Rntity Recognition을 수행한 결과를 통해 두 방식의 차이를 비교한 결과입니다. Feature based 방식을 이용하기위해 BERT의 어떤 parameter도 fine-tuning을 하지 않은 채로 layer에서 activation을 추출했습니다.

위의 표는 두 방식의 성능을 비교한 표입니다. Concat Last Four Hidden 방식은 fine-tuning과 성능을 비교하면 0.3 정도 밖에 차이가 나지 않는 것을 볼 수 있습니다. 이를 통해 BERT가 두 가지 방식 모두에서 효과적이라는 것을 알 수 있습니다.

Conclusion

언어 모델에서 unsupervised pre-training이 중요한 부분이라는 것은 많은 분이 아실 것 같습니다. BERT의 업적은 이것을 deep bidirectional architecture에도 적용할 수 있도록 한 것이고 그를 통해서 하나의 pre-trained model로도 다양한 NLP task에 사용할 수 있게 되었습니다.

후기

아직 Transformer도 제대로 모르는 상태(사실 Attention이 뭔지도 잘 모른다)에서 BERT를 보니 더 모르겠다... 논문을 읽으면서 내 나름 내용을 정리해봤는데 깔끔하게 정리한 것인지 모르겠다. 그래도 오늘은 이제 자러 가야겠다. 언젠가는 잘 읽고 잘 정리하겠지 뭐

profile
INTP 신입 개발자

0개의 댓글