BERT.. 세상에 나온지도 벌써 몇 년이 지났지만 그 입지는 상당한 것 같습니다.
대부분의 NLP 관련 task에 이 녀석이 자리를 잡고 있으니 말입니다.
물론 지금은 트렌드가 많이 바뀌어서 Only Decoder 모델이 주름을 잡고 있지만, 그런 모델들은 사이즈가 너무 커서 fine-tuning 하기엔 무리가 있죠.
저처럼 딥러닝 햇병아리가 코랩 무료 버전의 환경에서 돌려볼 수 있는 모델은 아마 BERT류가 제일 퍼포먼스가 좋지 않나.. 🐣
결국 자그마한 대회에 하나 참여해서 공부를 하던 도중, 수없이 많은 BERT의 자손들을 만나게 되면서 BERT 이놈이 뭔지 다시 알아봐야겠다고 생각했습니다.
뭐든지 '그래 이거 끝나고 한꺼번에 정리해야지~'라고 한 것들은 항상 잊혀지기에 미루지 않고 '모델이 학습을 진행중인 바로 지금!' 내용을 정리해보고자 합니다 🚀
0. Abstract
뭐 어느 논문이나 똑같습니다!
자기 자랑하기 바쁘죠.
BERT 같은 경우엔 bidirectional representation을 unlabeled text로부터 구하여 모든 레이어의 좌-우, 우-좌 방향의 context를 결합시켜 사전학습했다, 고 합니다.
말이 굉장히 어렵지만, 간단히 표현하면 문장을 -> 이렇게도 보고, <- 이렇게도 봐서 context를 제대로 파악했다! 고 볼 수 있겠습니다.
심지어 복잡하게 fine-tuning 할 필요도 없습니다.
그냥 마지막에 layer 하나만 더 쌓아서 fine-tuning 하면? -> SOTA 달성!
그럼 무려 11개의 NLP 태스크에서 SOTA를 달성한 이 녀석을 자세히 알아보러 가보죠.
1. Introduction
이 당시에도 사전 학습된 언어 모델을 가져다 쓰는 것이 대세였다고 합니다.
크게는 feature-based / fine-tuning으로 구분되었다고 하네요.
전자는 사실 익숙치가 않은데 후자는 아주아주 익숙하군요?
단, 지금까지의 fine-tuning은 단방향 학습을 해왔기 때문에 이 문장 단위의 태스크에 부적합했을 것이라는게 저자의 주장입니다.
그럼 어떻게 양방향 학습이 가능했냐?
MLM(Maksed Language Model) 이라는 학습 목표(pre-training objective)를 새로 설정한 것이 유의미했다고 봅니다🔥
또한 NSP(Next Sentence Prediction) 이라는 사전 학습 방식을 취한 것도 text pair의 representation을 잘 학습할 수 있도록 했다고 보네요.
(이후 NSP는 구리다! 는 전문가들의 입장이 많았지만, MLM은 현재 멀티모달 분야에 응용될만큼 획기적인 방식입니다)
2. Related Work
2.1. Unsupervised Feature-base Approaches
NLP 분야에서 word embedding에 관한 연구는 지속적으로 이어져오고 있었습니다.
매번 적절한 word embedding을 형성하는 것은 곧 자원의 낭비이기 때문에 사전 학습된 word embedding을 이용하는 것이 관행이었죠.
BERT의 저자는 'bidirectional'의 아이디어를 ELMo와 같은 모델(저도 처음 봤네요)에서 context-sensitive feature를 추출하기 위해 ->, <- 두 개의 representation을 concat(합쳐)했음에서 착안했다고 합니다.
물론 기존까지의 연구들은 그렇게까지 깊은(deep) 양방향 이해까지 이어지지 못했다고 봅니다 🙁
2.2. Unsupervised Fine-tuning Approaches
여기서는 word / sentence / document encoder에 대한 설명이 나옵니다.
적은 파라미터로 학습이 가능하다는 장점을 가진 이 접근법은 GPT와 같은 left-to-right 언어 모델에 적합한 것으로 확인되었습니다.
2.3. Transfer Learning from Supervised Data
위 두 개와 다르게 정답이 주어진 상태에서 학습을 하는 방식도 존재하죠.
이러한 Transfer learning, 즉 fine-tuning 방식은 NLI (Natural Language Inference)나 Machine Translation(기계 번역) 등의 태스크에서 우수한 성능을 보임이 입증되었습니다 😄
(최근에는 GPT-4급 모델들의 등장으로 인해 또 다른 견해가 존재하긴 합니다만..)
3. BERT
두 개의 학습 방식으로 구성되어 있습니다.
pre-training과 fine-tuning입니다.
흥미로운 것은 fine-tuning 단계에서는 여러 종류의 task로 접목시킬 때 architecture를 크게 변화시키지 않고도 사용할 수 있다는 것입니다.
Model Architecture
multi-layer bidirectional Transformer encoder를 기본으로 삼고 있습니다.
BERT-base는 12개의 layer, 768 hidden size, 12개의 self-attention head를 가지고 있습니다. (110M)
BERT-large는 24개의 layer, 1024 hidden size, 16개의 self-attention head를 가지고 있습니다. (340M)
BERT가 bidirectional self-attention을 사용한 것과 달리 GPT는 constrained self-attention을 사용합니다.
즉, GPT의 경우 현재 토큰 이전의 정보만을 사용할 수 있는 것입니다.
Input/Output Representations
single sentence와 sentence pair가 input에 해당합니다.
모든 문장의 맨 앞에는 [CLS] 라는 special token을 사용합니다.
sentence pair의 경우, 두 문장의 사이에 [SEP] 토큰을 집어 넣고 두 문장을 구분하는 segment embedding을 추가합니다.
30,000개의 토큰이 담긴 vocab을 사용하고 WordPiece embedding을 사용했습니다.
이렇게 세 개의 임베딩을 갖습니다.
1. Token : 말 그대로 token을 embedding한 것입니다. token 단위로 분해한 것을 숫자로 치환한 것입니다!
2. Segment : [SEP] 토큰을 기준으로 앞 뒤를 나눕니다. 두 문장 중 어떤 것에 속하는지 구분하는 embedding 입니다.
3. Position : 전체 sequence 내에서 어느 위치에 해당하는지를 나타내는 embedding 입니다.
3.1. Pre-training BERT
두 개의 unsupervised task를 이용합니다.
Task #1 : Masked LM
기존의 모델들은 ->, <- 둘 중 한 방향으로만 학습을 해서 target word를 정확히 예측하는 것에 어려움을 겪었습니다.
이를 해결하기 위해 제시한, input의 일부를 무작위로 가리고(mask), 이 가려진 토큰이 무엇이었는지를 맞히는 태스크를 masked LM(MLM)이라고 부릅니다.
단, 이때 사용되는 [MASK] 토큰은 fine-tuning 단계에는 존재하지 않는 것이므로, 여기서 발생할 수 있는 괴리를 줄이기 위해 15%를 무작위로 마스킹하는 방식을 조정합니다.
1) 15%중 80%는 [MASK]로 대체합니다.
2) 나머지 10%는 [MASK] 토큰이 아닌 랜덤한 토큰으로 대체합니다.
3) 나머지 10%는 변경하지 않고 그대로 둡니다.
이런 방식으로 원래 토큰과의 cross entropy loss를 계산하여 학습이 진행됩니다.
Task #2 : Next Sentence Prediction (NSP)
두 문장의 관계를 학습할 수 있도록 하는 사전학습 방식입니다.
QA(Question Answering)나 NLI(Natural Language Inference)와 같은 태스크에서 좋은 성능을 내기 위한 방식이라고 볼 수 있습니다.
Pre-training data
BooksCorpus(800M words)와 English Wikipedia (2,500M words)로 구성되어 있습니다.
3.2. Fine-tunning BERT
기존에는 text pair를 따로 인코딩하고 bidirectional cross attention을 적용했습니다.
BERT에서는 text pair를 묶어서 함께 인코딩하는 방식을 취했습니다.
두 문장 A, B로 구성된 text pair는 다음과 같은 종류가 있습니다.
1) paraphrasing된 문장쌍
2) 가설-전제
3) question-passage
4) text-0(class or tag)
이런식으로 구성된 text pair의 맨 앞에 존재하는 [CLS] 토큰은 classification을 위한 output layer에 입력으로 주어지게 됩니다.
pre-training과 fine-tuning을 시각화한 것은 위와 같습니다.
실제로 fine-tuning 자체는 자원에 따라 다르지만 오랜 시간이 걸리지 않음에도 불구하고 논문 그대로 완벽히 재현이 가능합니다.
그러면서도 우수한 성능을 뽐낼 수 있다는 것이 대단하죠.
4. Experiments
4.1. GLUE
4.2. SQuAD v1.1
4.3. SQuAD v2.0
4.4. SWAG
사실 실험적인 부분은 논문 내용을 재현해보고 싶은 경우가 아니라면 굳이 자세히 기술할 필요가 없는 것 같습니다.
간단히 요약하면 '우리 모델이 최고야!'라는 거니까요.
그래도 위와 같은 권위 있는 태스크에 대해서 엄청난 퍼포먼스를 보여줬다는 것이 대단하죠.
심지어 여러 개의 태스크들을 처리하는 동안 [CLS] 토큰 이 놈 하나만을 가지고 요리해낸다는 것이 정말 놀랍습니다.
그래서 지금까지도 CLS 토큰이 문장 전체의 representation이 맞느냐 그렇지 않느냐 하는 논쟁이 존재하는 것이겠죠?
여기서 드는 생각은 애초에 저자들도 fine-tuning 하는 과정에서 sentence pair를 입력으로 주었는데 저도 지금 진행중인 대회에서 그렇게 해볼까 생각이 드네요.
굳이 single sentence로 쓰지 않고 Q&A 형태로 쓰는 등 시도를 해봐야겠습니다.
5. Ablation Studies
새로 적용한 기법들 중 일부를 제거하면서 유효했던 아이디어가 무엇인지 확인하는 연구입니다.
5.1. Effect of Pre-training Tasks
No NSP : next sentence prediction을 쓰지 않은 경우 QNLI, MNLI, SQuAD 1.1과 같은 태스크를 잘 풀지 못하게 되었다고 합니다.
LTR : Left to Right 모델들을 뜻하는데요, 결과론적으로 bidirectional 모델보다 못하다,를 보여주고 있습니다.
물론 LTR 혹은 RTL 모델들도 성능을 잘 발휘할 수 있겠지만 이를 위해서는 bidirectional 모델을 한 번 학습하는 것의 두 배 비용을 필요로 할 뿐 아니라, 그렇게 하더라도 이만큼 좋은 성능을 낼 수 있을지에 대해 의문을 제기했습니다.
5.2. Effect of Model Size
저자측 주장이긴 하지만 모델의 사이즈가 확실히 성능 향상에 이득이 된다! 를 증명한 첫 사례라나 뭐라나..
하여간 이 시기쯤부터 NLP 분야에서는 모델의 parameter 숫자가 일정량을 넘어서는 순간 획기적인 성능 향상을 보인다는 것이 거의 기정 사실화되었던 것 같습니다.
실제로 bert-base와 bert-large의 차이도 꽤 체감이 되니까 말입니다.
5.3. Feature-based Approach with BERT
기학습된 모델로부터 feature를 추출하는 태스크에서도 좋은 성능을 보입니다.
예를 들어 Named Entity Recognition(NER, 개채명 인식)과 같은 태스크에서도 BERT-large가 우수한 성능을 보였음이 기록되어 있습니다.
6. Conclusion
요약하면 다음과 같습니다.
1) unsupervised pre-training이 핵심적인 역할을 담당한다.
2) deep bidirectional architecture가 널리 활용되기 위한 포문을 열었다.
3) 적은 자원으로도 엄청난 성능을 낼 수 있는 모델을 개발했다.
개인적인 감상
다른 것보다도 single sentence 대신 text pair를 입력으로 줄 때의 성능 변화가 기대됩니다 🔥
보통 사전학습과 downstream task의 괴리가 큰 경우에도 그 성능이 제대로 발휘되지 않는 경우가 많다고 알고 있는데,
진행중인 대회에서는 어떤 변화를 가져올 수 있을지 궁금해졌습니다.
뭐 사방 천지를 둘러보아도 BERT 중심의 모델이 많아서 꼭 자세히 공부해봐야겠다 생각하고 논문 리뷰를 해보았습니다.
구체적인 자료나 수치를 확인하고 싶은 분들은 논문을 직접 찾아보셔서 확인하시길 추천드립니다!
출처 : https://arxiv.org/abs/1810.04805