💡 BERT?
Bidirectional Encoder Representations from Transformers
BERT 논문의 원본은 여기에서 확인할 수 있다.
새로운 언어 모델 BERT에 대한 논문이다. 최근 언어 모델과 다르게, BERT는 unlabeled text로부터 양방향 표현을 pre-train한다. pre-trained BERT 모델은 단순히 하나의 output layer만을 추가하여 fine-tuning 할 수 있고, 다른 task-specific한 아키텍쳐 없이도 question answering이나 language inference와 같은 task에서 SOTA 모델을 생성할 수 있다.
pre-trained 언어 모델은 많은 NLP task의 성능을 향상시킬 수 있다: sentence-level, token-level.
이 모델을 downstream task에 적용하는 방법은 2가지가 있다: feature-based, fine-tuning. ELMo 같은 feature-based 방법은 task-specific한 아키텍처를 사용한다. (task에 따라 구조가 다른 것!) 이 구조에 pre-trained representation을 특성으로 추가해서 사용한다. GPT 같은 fine-tuning 방법은 task-specific한 파라미터는 최소화하고, 단순히 모든 pre-trained 파라미터를 fine-tuning한다. 두 방법 모두 pre-training하는 과정에서 같은 목적 함수를 사용하고, 단방향 언어 모델을 사용한다.
하지만 단방향 구조는 pre-trained 언어 모델의 성능을 제한한다. 예를 들어, GPT에서 사용되는 left-to-right 아키텍쳐는 각 토큰이 그 이전까지의 토큰들만 반영할 수 있다. 이러한 단방향성은 양방향의 문맥을 모두 이해해야하는 question answering과 같은 task에서 제약이 많다.
이 논문에서는, fine-tuning 방식을 개선한 BERT를 제안한다. BERT는 Masked Language Model (MLM) 을 통해 단방향 제약을 완화할 수 있다. MLM은 입력된 토큰 중 일부를 랜덤하게 mask 처리한 후, 이 mask 토큰의 원래 토큰을 예측한다. 이러한 방식을 통해 MLM은 단방향 언어 모델과는 다르게 양방향의 문맥을 모두 학습할 수 있다. 또한, MLM 외에도 Next Sentence Prediction (NSP) task를 통해 text-pair를 학습한다.
📢 요약!
BERT는 아래 2가지 태스크를 통해 기존의 단방향 언어 모델이 가지고 있는 제약을 개선하여 양방향 문맥의 학습을 가능하게 한다.
1) MLM (Masked Language Model)
2) NSP (Next Sentece Prediction)
BERT는 pre-training과 fine-tuning 과정으로 이루어져 있다. pre-training동안 모델은 unlabeled data를 학습하고, fine-tuning동안 downstream task에 해당하는 labeled data를 통해 fine-tuned 된다.
BERT 모델은 multi-layer bidirectional Transformer encoder 이다.
논문에서는 두 가지 크기의 모델이 사용되는데,
BERT_BASE: OpenAI GPT와 같은 모델 사이즈 (L=12, H=768, A=12, Total Params=110M)
BERT_LARGE: L=24, H=1024, A=16, Total Params=340M
(L: the number of layers, H: the hidden size, A: the number of self-attention heads)
BERT는 input이 하나의 문장이든 <Question, Answer>의 문장 pair든 모두 하나의 token sequence로 명확하게 표현한다. input representation은 위 그림처럼 token embbeddings, segment embeddings, position embeddings를 summation하여 만들어진다.
❓ WordPiece Embedding
Google이 BERT를 사전 학습하기 위해 개발한 토큰화 알고리즘
알고리즘은 개별 부분들의 빈도가 낮은 쌍의 병합에 높은 우선순위를 부여함
즉, element 각각은 자주 등장하지 않지만 쌍으로 빈번하게 출현하는 경우 더 빨리 병합되며, 병합된 쌍은 vocabulary에 추가됨
+++ WordPiece 글 추가하기 +++
input 토큰의 일부를 mask한 후, 그 토큰의 원래 토큰을 예측하는 방식으로 학습한다. 보통 15%를 mask한다. 이러한 학습의 단점은, pre-training과 fine-tuning 사이에 mismatch가 발생한다는 점이다. pre-training에 사용되는 [MASK] 토큰이 fine-tuning에는 사용되지 않기 때문이다. 논문에서는 이러한 mismatch를 약화하기 위해 선택된 15%의 토큰들을 전부 다 [MASK] 토큰으로 치환하지 않는다. 대신에, 80%의 확률로 [MASK] 토큰으로 치환, 10%의 확률로 다른 random한 토큰으로 치환, 10%의 확률로 원래 토큰 그대로 둔다.
Question Answering이나 Natural Language Inference와 같은 task들은 두 문장간의 관계를 이해하는 것이 중요하다. 이러한 관계를 학습하기 위해 binarized next sentence prediction을 활용한다. 예를 들어 A와 B의 문장을 선택했다고 할 때, 이 두 문장은 50%의 확률로 연결된 문장이며 (B가 A의 진짜 다음문장으로 IsNext로 라벨링), 50%의 확률로 랜덤한 문장 (B가 A의 진짜 다음문장이 아니며 NotNext로 라벨링)이다.
BERT 모델은 BooksCorpus (단어 800M개)와 English Wikipedia (단어 2,500M개)를 사용하여 사전학습되었다. English Wikipedia에서는 text만을 사용한다.
수행하고자하는 downstream task에 대해서, 그에 알맞는 task-specific한 input과 output을 BERT 모델에 넣어준 후 모든 파라미터를 end-to-end로 find-tuning한다. pre-training과 비교해서 fine-tuning은 비교적 연산량이 적다.