1. Problems of Vocab
•
기존의 방법론에서는 어느정도 큰 규모의 Vocab이 존재한다고 가정
◦
Word2Vec과 같은 것을 학습시켜 Fixed Vocab을 만들었다. → Pretrained Embedding
▪
Embedding 과정 설명
1.
문자열 입력
2.
학습된 토크나이저를 통해 토큰화
3.
각 토큰별 학습된 임베딩 벡터 변환
▪
학습 데이터에 존재하지 않는 단어는?
•
모두 UNK으로 토큰화, 서로 다른 토큰들이 모두 동일 벡터로 변환됨
•
변형문자, 오탈자, 신조어 등에 대응하지 못한다!
•
하지만 이러한 방법은 여러가지 문제점이 존재
◦
학습 데이터 부족
◦
Out-Of-Vocabulary 문제 발생
◦
다른 문장에도 동일한 임베딩 사용
•
그래서 등장한 해결 방법?
1.
Subword Token
a.
단어 이하의 단위에서 언어 구조를 추론
b.
Byte-Pair-Encoding(BPE)
c.
문법/의미/활용 포착
2.
Byte-Pair-Encoding(BPE)
a.
단어를 문자 단위로 분해
b.
전체 Corpus에서 가장 자주 등장하는 연속된 두 문자열 병합
c.
병합된 토큰을 기반으로 분해 결과 조합
d.
종료 조건(병합 횟수, 토큰 개수 등)을 만족할 때까지 1~3 반복
•
기존의 방법론(Word2Vec)과 다르게 신조어, 오타에 대응이 가능해짐
•
Out-Of-Vocabulary 문제에서 비교적 자유로워짐
2. Pretrain(사전학습)
•
Pretrain
◦
Input의 일부를 훼손
◦
모델이 input을 복원
◦
의미적/문법적 구조 학습
•
Downstream Task
◦
실제 수행하고자 하는 Task
◦
사전학습된 모델의 weight를 inital weight로 삼아 학습(fine-tuning) 진행
◦
QA / Sentiment Analysis / NLI…etc
2-1. Pretrain Task : 문장의 일부를 변형하고, 해당 부분의 단어를 예측
1.
단편적 사실 예측
2.
문법 정보 예측
3.
상호 참조 예측
4.
감성 예측
5.
추론
6.
단순 계산
2-2. Pretrain Whole Model
•
Encoder와 Decoder가 수행하는 역할이 다르다!
1.
Encoder : input이 연속적으로 레이어 통과
a.
Output : Contextual Embedding(batch, sequence length, embed dim)
b.
입력 문장에서 맥락/의미/문법 구조 등을 파악
2.
Decoder : input과 encoder output이 연속적으로 레이어 통과
a.
Output : 조건부 문장 생성(batch, sequence length, vocab dim)
b.
입력 문장과 이전 생성 문장을 바탕으로 문장 생성
2-3. Pretrain objective functions
•
Language Modeling
◦
별도의 label이 없어도 된다.
◦
LM은 그 자체로 언어구조/문법 및 의미적 정보 파악을 가능케 한다.
•
SGD with Pretrain/Finetune
◦
Random initailizing 𝜃에 비해 𝜃(햇)Rk global optimum에 가까울 수 있다. (이해 부족…)
▪
적은 데이터로도 잘 학습되며, 쉽게 수렴된다.
2-4. Pretrain Model 종류
•
Decoder
◦
일반적인 Language Model
◦
이전 시점의 토큰을 조건으로 하는 생성모델
•
Encoder
◦
양방향 토큰 정보를 활용할 수 있다.
◦
이전에 배운 Language Model로 pretrain 불가능하다.
•
Encoder-Decoder
◦
인코더가 양방향 정보를 종합
◦
디코더가 생성에 집중
2-5. 그 외 용어 정리
•
Pretrain task : Pretraining시 수행하는 pretrain을 위한 태스크
•
Downstream task : 실제 수행할 구체적인 태스크
•
Head : pretrain된 모델에 붙어 다운스트림 태스크에 맞춘 레이어
◦
Finetuning 이전에 학습이 전혀 되어있지 않은 상태
•
Pretrained model : pretrain task를 수행한 레이어
◦
Finetuning 이전에 이미 어느정도 학습된 상태
3. GPT-1
3-1. GPT-1 Pretrain
•
트랜스포머 디코더만 사용하는 모델
•
단방향 모델이다.
•
일반적인 LM을 통해 pretrain 한다.
•
Teacher Forcing을 이용한다.
◦
target word(ground truth)를 decoder의 다음 입력으로 넣어주는 기법
•
LM은 레이블이 필요없기 때문에 대량의 데이터를 확보 가능하다.
•
Transformer와 비교
3-2. GPT-1 Finetuning
•
4가지 finetuning 방법론 실험
◦
Classification : 긍/부정, 문법 오류 여부
◦
Entailment : 주어진 문장들의 관계 분류
◦
Similarity : 두 문장 간 의미적 유사도 파악
◦
Multiple Choice : 주어진 문제에 대한 보기 중 정답 고르기
•
문장 종료 토큰 : <Extract>
•
문장 마지막에 <Extract>을 생성하도록 한다.
•
Teaching Forcing을 이용하여 학습
•
<Extract> 위치의 출력값을 head에 입력
4. BERT
4-1. BERT Pretrain
•
BERT는 2가지 pretrain task가 존재한다.(MLM, NSP)
•
트랜스포머 인코더만 사용(GPT-1와는 정반대)
•
양방향 모델이다
•
MLM과 NSP를 통해 학습한다.
4-2. Masked Language Modeling (MLM)
•
양방향 모델 - 양방향 토큰의 정보를 활용한다.
◦
Language Model 목적함수 사용 불가(이해 못함…)
•
입력 토큰의 15%를 변형하고, 이를 예측하는 과정을 수행한다.
◦
80% : [MASK]
◦
10% : 랜덤한 다른 토큰
◦
10% : 원본 토큰
•
모델이 언어 구조를 학습한다.
4-3. Next Sentence Prediction (NSP)
•
많은 다운스트림 태스크에서 문장 간 관계를 다룬다.
•
이를 반영한 pretrain task가 필요하다.
•
두 문장을 입력하는 과정을 수행한다.
◦
50% : 학습 데이터에서 연속된 문장
◦
50% : 서로 다른 문서에서 사용된 문장
•
연속된 문장 여부를 판단한다(IsNext)
•
모델이 문장간 관계를 학습한다.
4-4. MLM & NSP
4-5. BERT input
•
BERT는 Token, Segment, Position 3가지의 임베딩 벡터를 더하여 입력 임베딩을 생성한다.
◦
Token Embedding :Wordpiece 기반 토큰 단위 임베딩
◦
Segment Embedding : 트랜스포머의 positional encoding
◦
Position Embedding : 두 문장을 구분하기 위한 임베딩
4-6. 다른 모델들과 비교
4-7. RoBERTa
•
BERT의 구조는 그대로 가져오되, NSP를 제외하고 추가적인 하이퍼파라미터 튜닝 진행
•
BERT의 성능을 더 높일 수 있었다.
•
Pretrain시 추가적인 데이터셋과 epoch로 더 높은 성능을 달성할 수 있었다.
5. T5
•
트랜스포머 구조를 가져오되 데이터셋과 모델을 키우고 Pretrain 과정을 정교화 한다.
•
매우 다양한 다운스트림 태스크에 대한 성능 평가를 진행한다.
•
Pretrain task로 span corruption을 사용
5-1. T5의 Pretrain task
•
인코더의 입력으로 MASK 사용
•
디코더의 출력으로 MASK ID와 해당하는 문장 생성
•
인코더는 MLM을 디코더는 LM을 수행하는 pretrain task
•
GPT보다 생성을 잘하고, BERT보다 파악을 잘하는 모델 구성!
5-2. BERT와 T5의 차이점
•
T5는 전체 토큰 중 15%를 25개의 MASK로 MASKING
•
BERT는 모델이 하나의 토큰을 복원하지만, T5는 마스킹된 부분을 생성해야한다.
5-3. 그 외
•
T5의 task
◦
Open domain question & Answering task : 질문과 정답이 포함된 문장이 입력되면 모델이 정답을 생성한다.
•
다른 모델들과 비교