ChatGPT Finetuning 정리 (7/4)
ChatGPT의 시대가 열리면서, ChatGPT 를 어떻게 활용해야 되는지에 대해서 온갖 방법들이 생깁니다. ChatGPT 그 자체로도 훌륭하지만, 좀 더 Customize 하고 싶은 사람들이 많아지면서 Finetuning에 대한 방법이 나옵니다.
Finetuning을 하는 이유에 대해서 먼저 정리해 보자면,
Fine-tuning lets you get more out of the models available through the API by providing:
- Higher quality results than prompt design
- Ability to train on more examples than can fit in a prompt
- Token savings due to shorter prompts
- Lower latency requests
라고 합니다. 보기만 해도, 안할 수 없는 이유들입니다. 또한, Finetuning을 하려면 어떻게 해야될까요?
At a high level, fine-tuning involves the following steps:
- Prepare and upload training data
- Train a new fine-tuned model
- Use your fine-tuned model
라고 합니다. 결국 데이터가 중요하다는 말이겠네요. 또한, 현재 finetuning이 가능한 모델은 davinci, curie, babbage, ada 라고 합니다. 게다가 finetuning 한 모델을 다시한번 finetuning 하는것도 가능한다고 하네요.
Training Data 를 준비하는 법
Data 는 무조건 JSONL 파일의 형태여야 한다고 하고, openai 의 CLI data preparation tool 을 사용하면 편하다고 합니다. Data의 포맷은 이런식입니다.
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
...
Conditional Generation이란?
conditinoal generation이란, input이 주어졌을 때 그 input에 맞춰서 content가 generate 되게 하는 방법을 말하고, 구체적으로는 paraphrasing, summarizing, entity extraction, product description writing given specifications, chatbots and many others. 등이 있습니다.
Training Dataset 준비의 Best Practice (conditional generation)
- 갯수: 최소한 몇 백개의 예를 갖고 학습하는게 좋음. 만약 데이터셋을 늘리고 싶다면 보통 두배 씩 늘리면서 학습하는 것을 권장한다고 합니다. (최소 500개)
- 하나의 prompt마다 그 끝에 \n\n###\n\n 를 넣어주는게 좋다고 합니다.
- prompt 와 completion은 합쳐서 2048 token이 넘지 않도록 합니다. 1token이 4개 character 정도 되니, 8000 character 정도 되는거 같습니다.
- 1~2 epoch 정도면 충분하다고 합니다.