이전 글에 GPT 파인 튜닝 하는 방법을 작성했었습니다. 이번에는 파인 튜닝한 모델을 불러와서 데이터에 적용하고, 엑셀 결과물을 만들어내는 방법을 알아보겠습니다.
1. 기본 구성 이해하기
open ai 공식 문서에 따른 기본 구성은 아래와 같습니다.
먼저 모델을 적용할 데이터를 불러오고, 시스템 메시지와 유저 메시지를 보냅니다.
test_df = recipe_df.loc[201:300] # 모델 적용할 데이터 불러오기
test_row = test_df.iloc[0]
test_messages = []
# 시스템 메시지(역할) 보내기
test_messages.append({"role": "system", "content": system_message})
# 유저 메시지(요청 내용 = test_message) 보내기
user_message = create_user_message(test_row)
test_messages.append({"role": "user", "content": create_user_message(test_row)})
pprint(test_messages)
실제로 보내는 내용은 아래와 같습니다.(pprint 결과)
다음으로 GPT에 응답을 요청합니다. 요청할 때는 아래의 fine_tuned_model_id로 정의되어 있는 파인튜닝된 모델이 필요합니다.
# 답변 요청
response = client.chat.completions.create(
model=fine_tuned_model_id, messages=test_messages, temperature=0, max_tokens=500
)
print(response.choices[0].message.content)
요청을 보내면 아래와 같이 답변이 생성됩니다.
그럼 이제 코드 작성을 시작해보도록 하겠습니다.
2. 코드 작성
작성할 코드 흐름은 아래와 같습니다. csv로 된 파일을 불러와서 해당 파일의 title과 summary를 파인튜닝 모델에 던져서 답변해달라고 요청하겠습니다. 그리고 데이터 프레임으로 결과를 생성하고, 엑셀(xlsx)로 최종 산출물을 뽑아보겠습니다.
2-1. 데이터 불러오기 및 정보 입력
저는 불러올 파일의 컬럼을 title, summary로 구성했습니다. 본인 가지고 있는 API 키를 입력해주시면 되고, 파인튜닝 모델도 입력해주시면 됩니다.
import json
import openai
import os
import pandas as pd
from pprint import pprint
# 적용 파일 읽기(제목 = title, 내용 = summary으로 구성)
input_df = pd.read_csv("data/input_data.csv", encoding="utf-8-sig")
# api key 입력
client = openai.OpenAI(api_key=os.environ.get("OPENAI_API_KEY", "본인 API키를 여기 입력해주세요."))
# 파인 튜닝 모델 입력
fine_tuned_model_id = "파인튜닝 모델을 입력해주세요."
# input_df.head(1)
<파인튜닝 모델 찾는 법>
open ai api로 들어가셔서 fine tuning에 들어가보시면 생성한 모델이 있습니다. 클릭하시면 오른쪽에 빨간색으로 표시된 부분이 모델명이니 해당 부분 복사해서 fine_tuned_model_id에 입력해주시면 됩니다.
2-2. 프롬프트 구성
프롬프트 구성에 대해서는 전 글에서 설명드렸으니 참고해서 입력해주시면 됩니다. 위에서 말씀드린 것 처럼 저는 컬럼을 title, summary로 적용했습니다. 혹시 바꾸실 분들은 바꿔주세요.
# 프롬프트 구성
system_message = "You are an assistant who extracts breakdowns for iphone. Please keyword extract which breakdowns are in each data."
def create_user_message(row):
return f"""Title: {row['title']}\n\summary: {row['summary']}\n\nGeneric ingredients: """
def prepare_example_conversation(row):
messages = []
messages.append({"role": "system", "content": system_message})
user_message = create_user_message(row)
messages.append({"role": "user", "content": user_message})
return {"messages": messages}
2-3. 데이터 프레임에 대해 반복 적용
생성된 프롬프트를 반복문으로 파인튜닝 모델에 던지고 응답을 받아서, 새로운 결과물 데이터프레임을 생성하는 코드입니다. 그 후 결과물 데이터프레임을 엑셀로 저장하면 완료됩니다.
# 코드 초기화
output_data= []
input_messages = []
# 데이터프레임의 각 행에 대해 반복
for i in range(len(input_df)):
try:
# 시스템 메시지 생성
system_message = f"현재 행: {i+1}"
# 사용자 메시지 생성
user_message = create_user_message(input_df.iloc[i])
# 메시지 리스트를 초기화하여 새로운 메시지 리스트 생성
input_messages = []
# 시스템 메시지 추가
input_messages.append({"role": "system", "content": system_message})
# 사용자 메시지 추가
input_messages.append({"role": "user", "content": user_message})
# 답변 생성
response = client.chat.completions.create(
model=fine_tuned_model_id, messages=input_messages, temperature=0, max_tokens=500
)
# 답변을 리스트에 저장
output_data.append({
"index": i+1,
"title": input_df.iloc[i]['title'],
"summary": input_df.iloc[i]['summary'],
"response": response.choices[0].message.content
})
except Exception as e:
print(f"오류 발생: {e}")
# 리스트를 데이터프레임으로 변환
output_df = pd.DataFrame(output_data)
# 엑셀 파일로 저장
output_df.to_excel("data/output_data.xlsx", index=False)
이렇게 하면 index / title / summary / response(GPT가 준 응답) 4개의 컬럼으로 구성되어 있는 결과물이 생성됩니다.
함께 보면 좋은 글)
'테크' 카테고리의 다른 글
유럽 AI법(AI act)에 대한 핵심 내용 알아보기 (1) | 2024.03.29 |
---|---|
OpenAI, 샘 올트먼이 꿈꾸는 AGI (0) | 2024.02.13 |
[GPT] 파인튜닝(Fine tuning) 하는 방법, 파이썬 코드 (0) | 2024.02.05 |
[바드] 무료 이미지 생성 AI로 활용하기 (1) | 2024.02.05 |
갤럭시링 출시일, 디자인, 가격, 기능 알아보기 (0) | 2024.02.03 |