- Bidirectional Encoder Representations from Transformers
- 위키피디아, 책 데이터 학습
- 기본적으로 2개의 문장으로 학습. 더 확장 가능
- Bert 모델(Pre-training) + Fine-Tuning(다운스트림 태스크 작업)
-> Bert 모델에 자기 task에 맞게 내 데이터만 넣으면 된다..(?)
- 언어를 생성할 것이 아니면 무조건 Bert를 쓰면 됨
Pretrained Model 중 지존인 이유 (생성X)
1) 엄청나게 큰 학습 parameters 수
2) 양방향 학습
BERT 내부 동작 과정
Embedding
1) Token Embedding
Word Piece Embedding: 문자 단위로 임베딩, 단어가 어휘 사전에 있으면 토큰으로 없으면 개별 문자에 도달할 때까지 분할 반복 => 문법을 고려해 자세한 tokenizing 가능
2) Segment Embedding
토큰화된 단어들을 하나의 문장으로 만드는 작업
3) Position Embedding
토큰의 입력 위치 임베딩
Pre-Training
Language Models
- MLM (Masked Language Model)
- NSP (Next Sentence Prediction)
MLM (Masked Language Model)
: 입력 문장에서 무작위로 토큰의 15%를 가리고 그 토큰을 맞추는 방식으로 학습
- Bert의 자동 인코딩 언어 모델
- 양방향으로 문장을 읽음
- 입력 문장의 15%를 무작위로 마스킹하고 마스크된 단어를 예측하는 방식으로 학습
- 15% 중 80%는 토큰을 [MASK] 토큰으로 교체
- 10%는 토큰을 임의의 토큰으로 교체 (아무말)
- 10%는 토큰을 변경하지 않음 (그냥 정답 그대로 둔다)
- tokens = [[CLS], Paris, is, a, beautiful, [MASK], [SEP], I, love, Paris, [SEP]]
- 문장을 입력할 때 그대로 넣을 수 없으니 위의 임베딩을 해주고, 그 값을 BERT의 입력으로 사용함
- Bert-base 모델의 12개의 인코더 레이어는 transformer network의 인코더
- 모델의 결과로 각 단어들의 representation이 나오쥬
- 그걸 내 데이터에 활용하고 fine-tuning하여 쓰면 되지.
- 내 모델을 만들 필요가 없음
- 저 representation 결과를 FFNN+softmax에 학습시키면 빈칸에 올 각 단어들의 확률값을 얻을 수 있음.
NSP (Next Sentence Prediction)
: 두 문장이 주어졌을 때 두 문장의 순서를 예측하는 방식으로 두 문장의 연관을 맞추는 학습
question&answering 같은 tast는 NSP가 꼭 필요함. (Q와 A가 연관이 있어야 하니까)
- isNext
: 두 문장이 연관있는 경우의 label
-> 함께 입력되어야 의미가 있는 문장들
- NotNext
: 두 문장이 독립적인 경우의 label
- 문장 쌍에 위와 같은 label을 붙여서 학습.
- BERT 모델에 FFNN+softmax => isNext/NotNext에 대한 확률분포 나옴. (이진 분류)
- 다음 문장이 모델에 같이 입력되어야 하는지 아닌지 학습하는 단계가 pre-training에서 NSP.
+) 위의 임베딩, pretraining 과정을 통해 학습된 Bert 모델을 가져다가 Fine-Tuning해서 사용하면 됨.
가져다 쓸 때, BertForSequenceClassification/BertForQuestionAnswering 등 TASK에 맞게 가져다가 사용할 수 있음.
QnA는 항상 2개의 문장이 세트로 들어가기 때문에 NSP가 꼭 필요함.
마무리
언어 생성 외의 감성분석, 동시 출현 그래프 등..의 작업에는 Bert가 짱
언어 생성은 GPT-3가 짱