https://www.youtube.com/watch?v=30SvdoA6ApE
GPT-1
- 2018년 OpenAI에서 transformer의 decoder구조를 사용해서 만든 NLP 모델.
- generative training of LM - 문장내의 단어를 하나씩 읽어가면서 다음 단어 예측
- Unsupervised learning - 별도의 labeling 필요없음 - 문장 하나로 여러 학습 데이터 만들 수 있음
- 문맥의 양방향을 보고 transformer의 encoder를 통해 encoding을 진행해준다.
- GPT-1은 문장을 처리하는데 부족함이 있을 수 있다 -> 왼쪽에서 오른쪽으로 읽어나가면 문맥이해능력이 떨어질 수 있다.
- 따라서 bidirectional한 encoder를 이용한 BERT 제시
Pre-training
- 가려진 단어(mask token)을 예측하는 방식으로 학습을 진행
- 사람이 data를 labeling할 필요가 없고, 문자의 단어만 가려주고 맞추도록 학습하면 된다.
- token 간의 상관관계뿐 아니라 문장간의 상관관계도 학습함
- CLS token - classification task에 사용되는 토큰으로 문장 전체가 하나의 벡터로 표현된 스페셜 토큰임을 의미
- SEP token - 두 문장으로 구성된 입력의 경우 각 문장을 구별함
Embeddings
- Token Embedding
- WordPiece embedding을 사용하여 문장을 tokenize한다.
- WordPiece embedding은 단순 띄어쓰기로 단어를 구분하는 것 보다 효과적으로 token을 분류함 ex) playing -> play + ##ing
- 이렇게 구분할 경우 play와 #ing가 각각 명확한 뜻을 갖고 있으므로 model에게 두가지 의미를 명확하게 학습시킬 수 있고 신조어 또는 오탈자가 있는 입력값에도 예측이 상향될 수 있다. ex) googling - google + #ing
- Segment Embedding
- 두개의 문장이 입력될 경우 각 문장에 다른 숫자를 더해줌
- 모델에게 문장의 구분능력을 높여주기 위함.
- Positional Embedding
- token의 상대적 위치를 알려줌
- sin cos 함수를 사용
- sin cos의 출력값은 입력값에 따라 달라짐 따라서 입력값의 상대적인 위치를 알 수 있게 한다.
- sin cos의 출력값은 규칙적으로 증가 감소하므로 모델이 규칙을 사용하여 입력값의 상대적 위치를 쉽게 계산할 수 있다
- 무한대 길이의 입력값도 상대적인 위치를 출력할 수 있다.
Fine-tuning
- 두 문장의 관계 예측 task
- SEP 토큰으로 구별된 두 문장을 입력값으로 받고 출력값의 첫번째 CLS 토큰을 두 문자의 관계를 나타내도록 학습 시킴
- 문장을 분류하는 task
- 문장을 입력으로 받고 출력값의 CLS 토큰이 분류값중 하나가 되도록 학습을 시킴
- Q&A task
- 질문과 정답을 SEP 토큰으로 분류해서 입력으로 줌 출력값의 마지막 토큰들이 정답의 시작 index와 마지막 index를 출력하도록 학습시킴
- 문장속 단어 tagging task
- 각 입력 token에 대한 출력값이 원하는 tagging으로 출력되도록 학습을 시킴.
BERT vs GPT
- bidirectional / left to right
- fine-tuning 필요 / fine-tuning 필요x
- 모델의 크기가 작음 / 모델의 크기가 큼
- task마다 다르게 fine-tuning이 이뤄져야 함 / fine-tuning없이 여러가지 task 처리 가능
- 시간과 돈이 적게 듦(단 fine-tuning에도 돈과 시간이 듦) / 시간과 돈이 많이 듦