GPT
GPT
- 버트는 임베딩 모델이다. gpt는 생성 모델이다.
- 버트는 인코더를 사용한다.
- gpt는 디코더를 사용한다.
- 단어가 나왔을 때 다음 단어가 어떤 단어가 나오는 것이 가장 적절할까? Aauto regressive 모델이다.
- 버트 보다 먼저 나왔음. 자연어 문장을 분류하는 모델로 먼저 나왔다. 버트 전에 SOTA 달성. pretrained의 새로운 지평. 뒷단에 classification 1개만 붙여서 다른 task에 사용. BERT의 밑거름.
- 한계점: classification에 대해서 labeled 데이터 필요. 그리고 supervised 해야 함. fine tuning 모델이 다른 task에서 못쓴다.
- 언어의 특성 상 비지도 함수와 지도함수의 목적 함수가 같다. fine tuning와 pretrained의 loss가 같다. 굳이 구분할 필요가 없다가 가정이었음.
- 사람은 새로운 정보 배울 때 새로운 데이터가 많이 필요하지 않음. few shot learning이 가능. 한 모델을 하나의 fine tuning으로 만드는 것도 좀 멍청해보인다. 배 보다 배꼽이 더 크다?
- 그래서 사람 처럼 zero shot, one shot, two shot을 제안.기존: 데이터들 넣어 가면서 gradient descent 하면서 업데이트.
- few, one, two shot은 gradient update가 존재하지 않는다. 힌트를 하나만 주냐 두개 주냐 안주냐의 차이.
- zero shot: 그냥 뭐 할것인지만 알려준다. “번역”. 그리고 그냥 치즈 말하면 번역해준다. 이미 pretrained에서 번역까지 pretrain해 뒀기 때문이다.
- one shot: 예시 1개만 준다.
- few shot: 여러 예시 준다.
- 이게 GPT2. 파라미터 10배. 데이터 11기가에서 40기가로.
- gpt1의 디코더에서 구조만 조금 다르게. 다음 단어 예측하는 방식으로 pretrain. 기계독해, 요약, 번역 등의 task에서 기존+fine tuning의 성능까지 올라옴.
- gpt3: 파라미터를 100배 늘렸다. 데이터도 40G에사 570G으로 늘렸다. 역시 트랜스포머 디코더를 사용. 조금 바꾸고 initialize 바꿈. 이걸로 뉴스 기사 생성하게 했음. 사람이 쓴 뉴스랑 gpt3가 쓴 뉴스를 사람이 비교할 수 있는지 평가했음. 반반 구분 함.
- open domain QA: 일반적인 QA와 다르게 passage가 안들어간다. 객관식. 그냥 질문만 던지면 상식 만으로 대답 함.
- 단점: 시기에 따라 바뀌는 질문에 답변 못함. 데이터로 못받은 질문 대답 못함. 실시간 데이터 업데이트 해야 함. 그리고 이렇게 크기만 키우느 것이 방법인가? 그리고 세상을 글로만 인식 함. 우린느 세상을 오감을 통해서 인식 함. 결국 multi-modal model으로 가야 한다.
GPT2 모델의 생성 옵션
sk에서 만든 koGPT2 직접 tokenizer와 모델 파일을 저장하고 tokenizer package형식에 맞게 불러온다.
Drive GPT example에 넣어놓았음.
- label
input = tokenize("...")
model(**input, labels = input['input_ids'])
ground truth와 input이 동일하다. 왜?
labels (torch.LongTensor of shape (batch_size, sequence_length), optional) – Labels for language modeling. Note that the labels are shifted inside the model
from https://huggingface.co/transformers/model_doc/gpt2.html
Comments