이 글은 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)
- 간단히 말하자면, 한 작업에서 학습한 지식을 다른 관련 작업으로 전달하는 것을 의미함.
- 굳이 초기 모델을 직접 만들 필요가 없다면, 기존 모델을 활용해서 학습에 필요한 데이터와 시간을 줄일 수 있음.
- 이미 학습된 모델의 일반적인 기능을 활용하여 새로운 작업에 대한 성능을 향상시킬 수 있음
- 일반적인 전이학습 과정
- 기존 모델 선택: 이미 학습된 모델을 선택
- 사전 학습된 가중치 로드: 이미 학습된 모델의 가중치를 로드. 선행학습으로 배운 지식을 불러오는 과정.
- 새로운 작업에 맞게 모델 수정: 기존 모델을 새로운 작업에 맞춰서 수정. 모델의 레이어를 추가하거나 제거하는 등의 과정을 거치게 됨.
- 새로운 작업에 대한 재학습: 앞서 수정한 모델을 새로운 작업에 맞게 재학습 시킴.
- 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를 활용한 파인튜닝 예제 코드를 공유해봤습니다.
꼭 파인튜닝이 필요하지 않을 수도 있지만 자신만의 챗봇을 만들거나 특정 작업에 적합한 모델을 구축하는 데 도움이 되면 좋을 것 같습니다. 감사합니다.
'[Python] 연습' 카테고리의 다른 글
[python] matplotlib 한글 폰트 적용하기 (0) | 2023.04.30 |
---|---|
[python] 한국어 띄어쓰기 처리 (0) | 2022.11.13 |
[python] 리스트 형태의 값을 분리하여 각 하나의 값으로 표현하기 (0) | 2022.11.12 |
[python] json 파일 data frame 으로 읽기 (0) | 2022.11.11 |
[python] 프로그래머스 신고결과받기 (0) | 2022.10.29 |