Bidirectional Encoder Representation Transformers의 약자로, 모든 레이어에서 양방향으로 unlabeled text로부터 deep bidirectional representation을 pre-train하도록 설계 되었다.
pre-train된 BERT에 ouput layer를 하나만 추가해 fine-tuning을 해도, 다양한 테스크에서 SOTA를 달성할 수 있다고 한다. (그만큼 deep bidirectional pre-train의 성능이 좋다는 뜻.)
Language model을 pre-training 시키는 것은 많은 자연어 처리 분야에서 효과적인 성능 향상을 불러왔다.
기존 연구들은 자연어 추론 (natural language inference), paraphrasing 등 문장들 간의 관계를 전체적으로 분석함으로써 표현을 예측하는데 초점이 맞춰져 있다. 또한 entitiy recognition, QA 등 토큰 레벨에서 세밀한 출력을 필요로 하는 token-level task도 포함된다.
위에서 말한 pre-trained language representation으로부터 down stream한 task를 수행하기 위한 방법은 2가지가 있다.
두 접근법은 pre-training 과정에서 같은 목적함수를 공유하는데, 일반적인 언어 표현을 학습하는데 단방향의 model 구조를 사용한 점이 공통점이다.
저자들은 지금까지의 기술들이 pre-trained representation의 힘을 제한하고 있다는 한계점을 이야기 한다.
이유는 모델이 단방향이라 pre-training 과정에 사용될 수 있는 모델 구조를 제한하기 때문이라고 한다.
예를 들어 GPT는 단방향이라, 왼쪽에서 오른쪽으로 진행되는 구조를 사용하며, transformer의 self-attention layer에서 masked self-attention을 사용하여 각 토큰이 이전 토큰에만 attention을 진행하게 된다.
이러한 제한 사항은 문장 단위 task에서 sub-optimal하며, 양방향에서 문맥을 통합하는 것이 중요한 QA같은 토큰 레벨의 task에서도 한계가 드러날 수 있다고 한다.
BERT는 MLM(masked language model)을 사용하여 앞서 언급한 한계점을 완화할 수 있다.
MLM은 인풋 과정에서 무작위로 일부 토큰을 무작위로 masking하고, 문맥을 기반으로 이 masked token 예측을 수행한다.
MLM은 좌우의 context를 통합할 수 있으며, 이때 deep bidirectional Tranformer를 사용하여 pre-training을 진행한다.
MLM과 더불어 BERT에서는 NSP(next sentence prediction)을 진행하는데, 이를 통해 text pair 표현을 같이 학습할 수 있다.
양방향 pre-trained language model 방법론은 BERT가 처음은 아니지만, 기존 연구보다 deep한 bidirecional 방법을 썼다는 게 저자들이 강조하는 바이다.
널리 적용 가능한 단어 표현을 학습하는 것은 활발하게 연구 되어 왔다.
pre-trained word embedding은 현대 자연어 처리 시스템에서 중요하며, 상당한 향상을 가져왔다.
단어 임베딩에서, 문장, 문단 임베딩으로 이어졌다.
문장 표현을 학습하기 위해, 이전 연구는 이전 문장의 표현(좌)에서 이후 문장(우)를 생성하거나, 다음 문장 후보를 rank하거나, denoising auto-encoder 등을 사용해 왔다.
ELMO는 좌-우 언어모델과 우-좌 언어모델을 사용해 context-sensitive feature를 추출한다.
각 언어 모델에서 추출된 토큰의 context feature는 concat되어 사용된다.
LSTM을 이용해 양방향으로 문맥적 표현을 학습하는 연구도 있었지만, ELMO처럼, feature-based이며 deeply bidirectional 하지 않다.
ELMO가 좌-우 언어모델과 우-좌 언어모델을 동시에 사용하기 때문에 양방향으로 착각할 수 있지만, 두 언어모델에서 추출한 feature를 concat해서 feature-based로 사용하고 deep 하지 않다.
이 점이 BERT와의 차이점이라고 볼 수 있겠다.
초기에는 unlabeled text에서 워드 임베딩 파라미터만 pre-train했었다.
최근에는 contextual한 토큰 표현을 생성하는 인코더를 사용해 pre-training하고 supervised downstream task에 fine-tuning을 하는 방법으로 발전했다.
이는 downstream task를 진행할 때 적은 수의 파라미터만을 학습시키면 된다는 장점을 가진다.
GPT가 이와 같은 방식이며, 다양한 task에서 좋은 성능을 보인다.
대량의 데이터셋을 사용한 supervised task에서 효과적인 transfer를 보이는 연구들도 존재했다.
ImageNet으로 사전훈련된 모델을 fine-tuning하여 사용하는 등 CV에서도 전이 학습의 중요성이 나타났다.
BERT는 두가지 단계로 이루어진 framework이다.
pre-training에서는 unlabeled text로부터 다양한 사전 훈련을 진행한다.
fine-tuning에서는 pre-trained된 파라미터를 초기값으로 사용하며 downstream task에 맞는 labeled data를 사용해 파라미터를 튜닝한다.
같은 파라미터로부터 초기값을 가지고 시작하지만, 각 task에 맞는 fine-tuned된 모델들은 개별적인 파라미터로 튜닝된다.
BERT의 모델 구조는 multi-layer bidirectional Transforemer Encoder이다.
레이어 수를 L, hidden size S, self-attention head A 일 때,
BERT BASE는 (L=12,H=768,A=12, total param = 110M)이며 BERT LARGE는 (L=24,H=1024,A=16, total param = 340M)이다.
BERT BASE는 GPT와의 비교를 위해 파라미터 개수를 동일하게 설정했다고 한다.
GPT는 Transforemer의 디코더 구조를 사용했고, masked self-attention을 사용하는 점에서 BERT와 다르다.
BERT를 다양한 downstream task에서 사용할 수 있도록, input representation은 하나의 토큰 시퀀스에서 single sentence와 pair sentence를 잘 표현하도록 했다.
3만개의 token vocabulary를 가진 WordPiece enbedding을 사용했다.
모든 sequence의 첫번째 토큰은 CLS 토큰이다.
CLS토큰에 대한 final hidden state는 Classification task에 대한 시퀀스 표현을 집계하는데 사용된다.
이에 대한 자세한 내용은 뒤에서 소개하는 NSP에서 얘기하겠다.
sentence pair는 하나의 single sequence로 묶인다.
이를 구분시 하기 위해 두 문장 사이에 SEP 토큰을 사용하고, 각 문장에 속하는 것을 나타내는 토큰 단위의 임베딩(segment embedding)을 추가했다.
Figure 1을 보면 알 수 있듯이 input embedding은 E, CLS token은 C, i번째 token에 대한 hidden vector는 T로 나타낸다.
주어진 토큰에 대한 input representation은 token, segment, position embedding의 합으로 구성된다.
Bidirectional model에서는, 각 단어가 "see itself"하게 만드는, cheating이 발생할 수 있다. 따라서 multi-layered context에서 타겟 단어 예측을 쉽게 만들 수 있다.
BERT에서는 deep bidirectional representation을 하기 위해 MLM이라는 개념을 사용해 일부 토큰을 무작위로 마스킹하고, 마스킹된 토큰을 예측하는 작업을 수행한다.
해당 masked token에 대한 hidden vector는 softmax를 통과해 단어를 예측하게 된다.
저자들은 전체 토큰의 15%를 무작위 마스킹을 진행했다.
denoising auto-encoder에서 전체 인풋을 재구성하는 방법과 달리 타겟 masked words만 예측한다고 한다.
MLM 방식은 fine-tuning 시에는 사용하지 않기 때문에 mismatch를 야기하게 된다.
이를 완화하기 위해, 항상 masked된 단어를 MASK 토큰으로 대체하지는 않는다.
무작위로 선정한 15%의 masking할 토큰 위치에서 80%는 MASK token으로, 10%는 random token으로, 10%는 원래 token으로 대체한다.
이후 Ti는 cross entropy loss를 사용해 원래 token을 예측하는데 사용된다.
QA, NLI같은 많은 downstream task에서는 두 문장 사이의 관계를 이해하는 것이 중요하다.
하지만 이는 language modeling에서 직접적으로 capture 되진 않는다.
두 문장사이의 관계를 학습하기 위해 어떤 monolingual corpus에서도 생성될 수 있는 binarized next sentence task를 pre-train에 사용한다.
pre-training example로 사용되는 A,B 문장을 선택할 때 B의 50%는 실제 A의 다음 문장(IsNext로 라벨링 된다.)을, 50%는 corpus에서 무작위로 추출한 문장(NotNext로 라벨링된다)을 사용한다.
위에서 언급한 CLS 토큰이 다음 문장 예측(NSP)에 사용된다.
BookCorpus, English Wikipedia 데이터를 사용했다.
긴 연속적인 시퀀스 특징 추출을 위해 document level corpus를 사용하는 것이 중요하다고 한다.
BERT는 text pair를 concat하여 인코딩함으로써 두 문장 간의 bidirectional한 cross attention을 수행한다.
각 downstream task에서, BERT는 task specific input과 output을 사용해 파라미터를 fine-tuning 한다.
pre-training에 사용되는 input sentence A와 B는
- paraphrasing에서의 sentence pair
- entailment에서 hypothesis-premise pair
- QA에서 question-passage pair
- classification이나 sequence tagging 에서 degenerate pair
로 구성된다.
output에서는 QA, sequence tagging같은 token level task 수행을 위한 token representation이 output layer로 전달된다.
entailment, sentiment analysis같은 classification을 위한 CLS representation 또한 output layer로 전달된다.
fine-tuning시에는 pre-training보다 상대적으로 적은 비용이 사용된다.
fine-tuning은 TPU 1시간, GPU에서 몇시간 소모 된다고 한다.