기존에 내가 학습 시키려고 사용한 프롬프트는 'A = B'와 같은 것들이었다.
뭔가 잘못 사용하는 게 맞다는 생각이 들어서 ChatGPT에게 직접 문의를 했다.
질
chatgpt 파인튜닝에 대해 알려줘
답
파인튜닝(Fine-tuning)은 이미 기본적인 지식과 구조를 가지고 있는 사전 훈련된(pre-trained) 모델을 특정 작업이나 도메인에 맞게 맞추기 위한 훈련 과정입니다. ChatGPT의 경우, GPT-4 아키텍처를 기반으로 하며 사전 훈련된 상태에서 시작됩니다.
파인튜닝을 통해 모델은 다음과 같은 이점을 얻을 수 있습니다:
데이터 효율성: 파인튜닝을 통해 모델은 작은 양의 훈련 데이터로도 빠르게 원하는 작업에 최적화할 수 있습니다.
작업 수행력 향상: 사전 훈련된 모델에 추가로 훈련 데이터를 제공함으로써, 특정 작업에 대한 성능을 향상시킬 수 있습니다.
도메인 특화: 도메인 특정 데이터를 사용하여 모델을 파인튜닝하면 해당 도메인에서의 성능을 높일 수 있습니다.
파인튜닝 과정은 다음과 같습니다:
훈련 데이터 준비: 특정 작업이나 도메인에 맞는 훈련 데이터를 수집하고 전처리합니다. 이 데이터는 대화, 질문-답변 쌍 등 다양한 형태가 될 수 있습니다.
하이퍼파라미터 설정: 훈련 시 사용할 하이퍼파라미터를 설정합니다. 이는 학습률(learning rate), 배치 크기(batch size), 에폭 수(epochs) 등이 포함됩니다.
모델 훈련: 사전 훈련된 모델을 특정 작업이나 도메인에 맞추기 위해 준비된 훈련 데이터로 훈련시킵니다.
모델 평가: 훈련된 모델을 검증 데이터셋(validation dataset)을 사용하여 평가하고, 성능이 만족스러운지 확인합니다. 만족스럽지 않은 경우, 하이퍼파라미터를 조절하거나 훈련 데이터를 개선하여 다시 훈련을 진행할 수 있습니다.
파인튜닝을 통해 ChatGPT는 사용자의 질문에 더 정확하고 유용한 답변을 제공하며, 특정 도메인에서 더 높은 성능을 발휘할 수 있게 됩니다.
질
'2022년 뚜르드프랑스 종합 우승자'가 '요나스 빙가르(Jonas Vingegaard)'라는 걸 파인튜닝 하려면 어떤 프롬프트를 사용하는 게 좋을까?
답
ChatGPT를 파인튜닝할 때, 이러한 종류의 정보를 모델에 학습시키려면, 관련된 프롬프트와 함께 대화 형식의 훈련 데이터를 제공하는 것이 좋습니다. 이 경우, 질문-답변 쌍을 사용하여 모델에 정보를 전달할 수 있습니다. 여러 가지 프롬프트를 사용해 데이터의 다양성을 높이는 것이 중요합니다.
예시 프롬프트는 다음과 같습니다:
질문: "2022년 뚜르드프랑스 종합 우승자는 누구인가요?"
답변: "2022년 뚜르드프랑스 종합 우승자는 요나스 빙가르(Jonas Vingegaard)입니다."
질문: "뚜르드프랑스 2022년 대회에서 가장 성공한 선수는 누구였나요?"
답변: "뚜르드프랑스 2022년 대회에서 가장 성공한 선수는 종합 우승자인 요나스 빙가르(Jonas Vingegaard)였습니다."
질문: "요나스 빙가르가 어떤 자전거 경주에서 우승을 차지했나요?"
답변: "요나스 빙가르(Jonas Vingegaard)는 2022년 뚜르드프랑스에서 종합 우승을 차지했습니다."
이렇게 다양한 프롬프트를 통해 모델은 '2022년 뚜르드프랑스 종합 우승자'와 '요나스 빙가르(Jonas Vingegaard)' 사이의 연관성을 학습할 수 있습니다. 훈련 데이터의 양과 질을 높이면 더욱 좋은 결과를 얻을 수 있습니다.
오...
그렇구나!
# openai tools fine_tunes.prepare_data -f foobar.json
Analyzing...
- Your JSON file appears to be in a JSONL format. Your file will be converted to JSONL format
- Your file contains 3 prompt-completion pairs. In general, we recommend having at least a few hundred examples. We've found that performance tends to linearly increase for every doubling of the number of examples
- All prompts end with suffix `요?`
- All completions end with suffix `니다.`
- The completion should start with a whitespace character (` `). This tends to produce better results due to the tokenization we use. See https://platform.openai.com/docs/guides/fine-tuning/preparing-your-dataset for more details
Based on the analysis we will perform the following actions:
- [Necessary] Your format `JSON` will be converted to `JSONL`
- [Recommended] Add a whitespace character to the beginning of the completion [Y/n]: Y
Your data will be written to a new JSONL file. Proceed [Y/n]: Y
Wrote modified file to `foobar_prepared.jsonl`
Feel free to take a look!
Now use that file when fine-tuning:
> openai api fine_tunes.create -t "foobar_prepared.jsonl"
After you’ve fine-tuned a model, remember that your prompt has to end with the indicator string `요?` for the model to start generating completions, rather than continuing with the prompt. Make sure to include `stop=["니다."]` so that the generated texts ends at the expected place.
Once your model starts training, it'll approximately take 2.48 minutes to train a `curie` model, and less for `ada` and `babbage`. Queue will approximately take half an hour per job ahead of you.
# openai --api-key {API_KEY} api fine_tunes.create -t foobar_prepared.jsonl -m davinci
Upload progress: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 659/659 [00:00<00:00, 253kit/s]
Uploaded file from foobar_prepared.jsonl: file-dYYkGQfK33hkg2HvPW0aZZ2v
Created fine-tune: ft-BES4sFIL0orHce2jtvVma7De
Streaming events until fine-tuning is complete...
(Ctrl-C will interrupt the stream, but not cancel the fine-tune)
[2023-04-12 10:48:53] Created fine-tune: ft-BES4sFIL0orHce2jtvVma7De
[2023-04-12 10:49:16] Fine-tune costs $0.06
[2023-04-12 10:49:17] Fine-tune enqueued. Queue number: 0
[2023-04-12 10:49:18] Fine-tune started
아... 예... ㅎㅎ........ 심지어 2019년도 우승자는 에간 베르날인데, 그리고 알렉산더 카스트란스는 누구...
알렉산더 카스트란스가 누구냐고 물어봄.
질
알렉산더 카스트란스가 누구니
답
알렉산더 카스트란스(Alexander Kristoff)는 노르웨이의 프로 자전거 선수로, 주로 스프린트 스테이지에서 강력한 경쟁력을 발휘합니다. 그는 여러 자전거 경주에서 승리를 거두었으며, 그 중 대표적인 것으로는 2014년 밀라노-산레모, 2015년 투르 오브 라면디, 그리고 2019년 젠토프(London to Yorkshire)가 있습니다. 또한, 그는 2012년 런던 올림픽과 2016년 리우 올림픽에서 각각 도로 경기에서 은메달과 동메달을 획득했습니다. 알렉산더 카스트란스는 투르 드 프랑스에서도 여러 스테이지 우승을 거둔 바 있습니다.
알렉산더 크리스토프를 말하는 거였다. 다시 질문
질
알렉산더 크리스토프를 아니
답
죄송합니다. 알렉산더 크리스토프(Alexander Kristoff)에 대해 설명드리겠습니다.
알렉산더 크리스토프는 노르웨이의 프로 자전거 선수로, 주로 스프린트 스테이지에서 두각을 나타냅니다. 그는 여러 자전거 경주에서 우승을 차지한 바 있으며, 그 중 몇 가지 대표적인 우승 경력은 다음과 같습니다:
밀라노-산레모(Milan-San Remo) 2014년 우승
투르 오브 플랜더스(Tour of Flanders) 2015년 우승
또한, 그는 2012년 런던 올림픽과 2016년 리우 올림픽에서 도로 경기에서 각각 은메달과 동메달을 획득했습니다. 알렉산더 크리스토프는 투르 드 프랑스와 브웰타 아 에스파냐(Vuelta a España)에서 여러 스테이지 우승을 거둔 바 있습니다.
일단 잘못 답한 건 죄송하다고 하는데, 알렉산더 크리스토프는 2019년에 뚜르드프랑스에서 스테이즈 우승도 못 했다. 2020년에 스테이지1 우승을 해서 마요존느 입긴 했는데... 음;
반응형