[Python] 연습

[Python] ChatGPT 파인튜닝 예제

Simon Yoon 2024. 1. 31. 00:37

이 글은 ChatGPT 간단한 파인튜닝 예제를 공유하는 포스팅입니다.

  •  ChatGPT 의 한계
    • 최신의 데이터를 포함하고 있지 않아서 답변이 예전 버전의 답변이거나 부정확한 답변을 줄 때가 있음(ChatGPT sometimes give you some answers that may not reflect the most up-to-date information, or that it can even give you incorrect answers).
    • 어떤 특정 분야에 특화되어있는 모델이 아니라 일반적으로 쓸 수 있는 모델.

 

  • 전이학습(Transfer Learning)
    • 간단히 말하자면, 한 작업에서 학습한 지식을 다른 관련 작업으로 전달하는 것을 의미함.
    • 굳이 초기 모델을 직접 만들 필요가 없다면, 기존 모델을 활용해서 학습에 필요한 데이터와 시간을 줄일 수 있음.
    • 이미 학습된 모델의 일반적인 기능을 활용하여 새로운 작업에 대한 성능을 향상시킬 수 있음

 

  • 일반적인 전이학습 과정
    1. 기존 모델 선택: 이미 학습된 모델을 선택
    2. 사전 학습된 가중치 로드: 이미 학습된 모델의 가중치를 로드. 선행학습으로 배운 지식을 불러오는 과정.
    3. 새로운 작업에 맞게 모델 수정: 기존 모델을 새로운 작업에 맞춰서 수정. 모델의 레이어를 추가하거나 제거하는 등의 과정을 거치게 됨.
    4. 새로운 작업에 대한 재학습: 앞서 수정한 모델을 새로운 작업에 맞게 재학습 시킴.

 

  • ChatGPT 와 전이학습 과정
    • ChatGPT 기본 모델을 fine-tuning 을 통해서 원하는 작업을 수행하거나 특정 도메인에 맞게 활용하도록 할 수 있음.
    • 예시에서는 데이터를 몇 개 사용하지 않지만, 사실 당연히 많으면 많을수록 좋다.
    • OpenAI recommend first attempting to get good results with prompt engineering, prompt chaining (breaking complex tasks into multiple prompts), and function calling.
      • fine-tuning 을 하기 전에 꼭 파인튜닝을 해야하나? 라는 질문을 던져보기
      • 사실 프롬프트 엔지니어링으로도 충분히 품질을 좋게 만들 수 있음.

 

파인튜닝 예제

  • 환경설정
    • python 3.10 버전
    • 새로운 아나콘다 가상환경을 생성하고 conda install openai 명령을 통해 필요한 패키지를 설치해줌(openai == 1.3.6).
    • 설치 후 파이썬 코드 실행
    • import os from dotenv import load_dotenv import openai # load .env load_dotenv() openai.api_key = os.environ.get('OPENAI_API_KEY') client = openai.OpenAI()

 

  • 데이터 준비
    • 데이터는 jsonl 파일 형태로 준비함
  • davinci-002 데이터 예시
    • {“prompt”: “<프롬프트>”, “completion”: “<GPT 답변>”}

      • gpt-3.5-turbo 데이터 예시
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}

 

  • 준비한 데이터 파일 업로드 하기
    • 파이썬 코드
client.files.create(
	file=open("./sample.jsonl", "rb"),
	purpose="fine-tune"
)

 

 

  • 업로드 된 파일 확인
    • openai platform 화면에서 업로드된 파일을 확인할 수 있습니다.

 

  • 파인튜닝 하기
    • 업로드한 파일로 원하는 언어 모델을 선택해서 파인튜닝
    • 파이썬 코드
client.fine_tuning.jobs.create(
  training_file="file-xxxyyyzzz", 
  model="gpt-3.5-turbo-1106"
)
  • 파인튜닝 결과도 동일하게 플랫폼에서 확인할 수 있음

 

 

  • 파인튜닝한 모델 사용하기
    • 파인튜닝이 완료되면 모델 이름을 가지고 와서 해당 모델로 사용해 볼 수 있다.
    • 파이썬 예제 코드
    response = client.chat.completions.create(
      model="ft:gpt-3.5-turbo-1106:personal::8mibCxVE",
      messages=[
        {"role": "system", "content": "You are a helpful Tableau Engineer."},
        {"role": "user", "content": "TSM 명령어를 이용해서 태블로 서버에 완성된 대시보드를 어떻게 업로드 할 수 있어?"}
      ]
    )
    print(response.choices[0].message)
    

 

 

마무리

오늘은 간단하지만 ChatGPT를 활용한 파인튜닝 예제 코드를 공유해봤습니다.

꼭 파인튜닝이 필요하지 않을 수도 있지만 자신만의 챗봇을 만들거나 특정 작업에 적합한 모델을 구축하는 데 도움이 되면 좋을 것 같습니다. 감사합니다.