AI 하는 유정
article thumbnail

파이썬으로 도메인 특화 챗봇 모델 만들기 - 3

 

저번에 이어서 Q&A 챗봇을 만들기 위해서 전체 프로세스를 한번 시도해보고 있다.

 

Fine-tune 프로세스

  1. 데이터 준비
  2. 파인튜닝 모델 만들기
  3. 파인튜닝 모델 사용하기

+ 비용 계산

 


데이터 준비

데이터는 아래 예시 처럼 JSONL 형태로 준비되면 된다. 나는 Q&A 모델을 만들꺼라 질문 답 형태로 구성할거다.

{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}

open ai에서 CSV, TSV, XLSX, JSON or JSONL 형식의 데이터를 open ai 파인튠에 적합한 데이터 셋 포맷으로 만들어주는 tool을 제공한다. 한줄이면 된다. 아주 간단!

pip install --upgrade openai

#open ai에서 파인튠과정은 cli 이용하라고 권장한다.
openai tools fine_tunes.prepare_data -f <LOCAL_FILE>

그래서 나는 이러한 질문 목록을 csv 로 몇개만 만들었다. 실행문으로 넣을건 prompt 열에, 생성문으로 넣을건 completion 열에 넣으면 된다. 열제목도 저렇게 넣어줘야됨!

csv 데이터 목록

 

작업이 끝나면, 파인튜닝 할때의 팁 안내사항들을 이것저것 친절하게 알려준다.

open ai에서 제공하는 데이터 생성

**프롬프트 끝에 데이터에 공통 구분 기호가 없습니다. 프롬프트 끝에 구분자 문자열을 추가하면 완료가 시작되어야 하는 미세 조정된 모델이 더 명확해집니다.**

**데이터에 완료 끝 부분의 공통 끝 부분이 없습니다. 완료의 끝에 공통 종료 문자열이 추가되면 완료가 종료되어야 하는 미세 조정된 모델이 더 명확해집니다.**

**완료는 공백 문자('')로 시작해야 합니다. 이것은 우리가 사용하는 토큰화로 인해 더 나은 결과를 생성하는 경향이 있다.**

해석하면 뭐 이런거다.

완료되면 요런 jsonl 파일이 두둥~! 완성된다

{"prompt":"올해 처음이라 안내 부탁 ->",
"completion":" 온라인 강좌 또는 활용 안내서가 있습니다.\n"}
{"prompt":"게시판에 사용자가 글을 쓸 때 사용자 아이디와 계정 테이블의 아이디를 코드 진단 해야하는지 문의 ->",
"completion":" 굳이 구분하자면 업무규칙에 해당할 수 있다고 안내\n"}

 

 

파인튜닝 모델 만들기

#open ai api key를 등록해놓으면 매번 안써도 되서 편하다.
#설정 안해놔도 상관은 없음
C:\Users>set OPENAI_API_KEY=<OPENAI_API_KEY>
# 파인튜닝 모델 만드는 공식 사용법
openai api fine_tunes.create -t <TRAIN_FILE_ID_OR_PATH> -m <BASE_MODEL>

#api설정 따로 안해줬으면 여기다가 이렇게 넣으면 된다.
openai --api-key <api-key> api fine_tunes.create -t sample_data_2_prepared.jsonl -m davinci--suffix "sample_model_2"
  • -m 모델 : 사용할 모델명기재
  • -- suffix "파인튜닝모델명" : 내가 쓰고싶은 이름으로 적으면됨

저 한줄이면 파인튜닝 모델 만들기 뚝-딱!

자세한 설명들은 아래 링크 참고.

파라미터 설명 : https://platform.openai.com/docs/api-reference/fine-tunes

파인튜닝 가이드 자세한 설명 : https://platform.openai.com/docs/guides/fine-tuning

 

파인튜닝 모델 사용

import openai
openai.api_key = "<api-key>"
respose=openai.Completion.create(
    model="davinci:ft-personal:sample-model-YYYY-MM-DD-HH-MM-SS",
    prompt="질문에 친절하게 대답을 합니다. Q:너는 이름이 뭐야 A:친절한 챗봇입니다~! Q: 너는 무엇을잘하니? A:",
    max_tokens=1000)

print(respose)

#응답만 확인하고 싶으면
print(response.choices[0].choices[0].text)

너무 간단하게 끄읕

 

비용계산 팁

비용계산 측정하며 알게된 사실…

파인튜닝을 할 때, epoch 설정할 수 있는데 에폭만큼 토큰이 배가 된다…

즉, 100토큰 언어를 파인튜닝하고, 에폭을4번 돌리면, 400토큰으로 계산(100*400=400)토큰되는거

염두해두시라….

자세한 내용은 : https://openai.com/pricing

profile

AI 하는 유정

@에하유

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!