오답노트
[NLP] BERT 본문
BERT
BERT는 2018년에 구글에서 발표한 새로운 방식의 언어 학습 모델이다.
이는 NLP에서도 전이 학습이 가능하게 된 중요한 발전이된 모델인데, 논문 발표 이후 모델을 공개하여 누구나 사용 가능하도록 하였다.
전이학습은 미리 모델을 학습 시킨뒤 그 모델을 가져와 비슷한 다른 일을 하게하는 것이다.
- Pre - Training : 방대한 양의 텍스트로 부터 언어의 패턴을 학습하여 문법적, 의미적, 문장간의 관계성을 인코딩한다.
- Fine - Tuning : 다양한 일을 수행하기 위해 BERT의 pre-trained 모델 위에 Linear 레이어를 올린다.
BERT 구조
BERT는 Encoder 여러개가 쌓여있는 형태로 되어있다.
BERT는 크게 base 와 large 모델이 있다.
base 는 12개의 Encoder layer, hidden size는 768, Attention head는 12개이다.
large 는 24개의 Encoder layer, hidden size는 1024, Attention head는 16개이다.
이를 하이퍼 파라미터로 나타내면
L = Encoder layer의 수
H = hidden size
A = Attention head 의 수로
base 는 L=12,H=768,A=12
large 는 L=24,H=1024,A=16 로 나타낼 수 있다.
BERT는 Encoder 의 개수 만큼 학습을 진행한다.
Input
BERT의 입력은 임베딩 벡터이고 H 크기로 입력된다.
임베딩은 세가지인데
- Token Embedding : [CLS], [SEP] 그리고 단어가 있다.
- [CLS] : 모든 문장의 가장 첫 번째 토큰. 이 토큰은 Classification에서 사용되지만, 그렇지 않을 경우엔 무시한다.
- [SEP] : 첫 번째 문장과 두 번째 문장을 구별하는 토큰
- Segment Embedding : 0이면 A문장의 토큰, 1이면 B문장의 토큰이다.
- Position Embedding : 단어의 위치 정보를 제공한다.
최대 토큰 개수는 512개이다.
WordPiece
BERT는 단어보다 더 작은 단위로 쪼개는 서브워드 토크나이저를 사용한다. 기본적으로 자주 등장하는 단어는 그대로 단어 집합에 추가하지만, 자주 등장하지 않는 단어의 경우에는 더 작은 단위인 서브워드로 분리하여 서브워드들이 단어 집합에 추가된다.
해당 토큰의 첫번째 서브워드를 제외한 나머지 서브워드들은 앞에 "##"를 붙인다
Output
모델을 거쳐서 나온 Output은 H 크기의 벡터로 출력된다. 출력은 문장의 문맥을 반영한 contextual embedding이 된다. 이 출력이 FC를 통과하면 분류 문제를 예측할 수 있게 된다.
Training Method
- Masked Language Model : 문장에서 몇 개의 단어를 비워놓고 그 단어를 예측하도록 학습시킨다
- Next Sentence Prediction : 여러 개의 문장들 주어졌을 때, 문장간 관계가 올바른지 아닌지 학습시킨다.
Task-specific Models
- Sentence Pair Classification : 두 개의 문장 사이의 관계 예측
- Single Sentence Classification : 긍정 부정 분류, 감성 분석
- Question Answering
- Single Sentence Tagging
'Python > DL' 카테고리의 다른 글
[NLP] koBERT 실습 (1) | 2022.10.15 |
---|---|
[NLP] N-gram (0) | 2022.10.14 |
[NLP] Transformer (0) | 2022.10.07 |
[NLP] Sequence-to-Sequence (seq2seq) (1) | 2022.10.06 |
[NLP] Long Short-Term Memory (LSTM) (1) | 2022.10.06 |