티스토리 뷰

728x90
반응형

Chat GPT로 서비스를 기획한다면 Fine-Tuning 은 꼭 넘어야 할 산입니다. 

OpenAI의 Fine-Tuning 기능을 활용하면 특정 도메인이나 니즈에 맞춘 AI 모델을 학습시킬 수 있습니다. 이 글에서는 **엑셀 파일(.xlsx)**을 OpenAI Fine-Tuning에 사용할 수 있는 JSONL 형식으로 변환하는 Python 코드를 소개합니다.


1. 엑셀 데이터 구조

Fine-Tuning을 위한 엑셀 파일은 다음과 같은 구조를 가져야 합니다:

system (선택) user 질문 (필수) assistant 답변 (필수)
"You are a helpful assistant." "안녕하세요, 오늘 날씨는?" "오늘 서울의 날씨는 맑고 따뜻합니다."
"You are an IT support assistant." "Wi-Fi가 연결되지 않아요." "Wi-Fi 문제를 해결하려면 공유기를 재부팅하세요."
  • system 열(선택): AI의 역할을 정의합니다. (기본값: "You are a helpful assistant.")
  • user 질문 열(필수): 사용자의 질문 또는 입력입니다.
  • assistant 답변 열(필수): AI가 제공할 응답입니다.

엑셀 시트 이름: fine_tuning_data (시트명을 직접 지정할 수 있지만, 바꾸시면 아래의 python 에서도 바꿔야 합니다.)


2. Python 코드 (엑셀 → JSONL 변환)

아래 코드는 엑셀 파일을 읽어 Chat Model 학습을 위한 JSONL 형식으로 변환합니다.

import json
import pandas as pd

def escape_quotes(text):
    """데이터 내에 쌍따옴표가 있을 경우 이스케이프 처리"""
    if isinstance(text, str):
        return text.replace('"', '\\"')
    return text

def convert_excel_to_jsonl(input_excel, sheet_name, output_jsonl):
    # 엑셀 파일 읽기
    df = pd.read_excel(input_excel, sheet_name=sheet_name)
    
    # ✅ JSONL 변환 데이터 저장 리스트
    training_samples = []
    
    for _, row in df.iterrows():
        # "system" 메시지가 비어 있으면 기본값 설정
        system_message = escape_quotes(row["System"]) if pd.notna(row.get("System")) else "You are a helpful assistant."
        
        # "user 질문"과 "assistant 답변"은 필수
        if pd.isna(row["user 질문"]) or pd.isna(row["assistant 답변"]):
            print(f"🚨 경고: 데이터 누락 (User 또는 Assistant 값 없음) - 건너뜀")
            continue
        
        chat_messages = [
            {"role": "system", "content": system_message},
            {"role": "user", "content": escape_quotes(row["user 질문"])},
            {"role": "assistant", "content": escape_quotes(row["assistant 답변"])}
        ]
        
        training_samples.append({"messages": chat_messages})
    
    # ✅ JSONL 파일 저장
    with open(output_jsonl, "w", encoding="utf-8") as f:
        for sample in training_samples:
            f.write(json.dumps(sample, ensure_ascii=False) + "\n")
    
    print(f"✅ JSONL 변환 완료: {output_jsonl}")



# 실행 예제
convert_excel_to_jsonl("training_data.xlsx", "fine_tuning_data", "training_data.jsonl")​

 


3. JSONL 변환 예제 (출력 결과)

엑셀에서 변환된 JSONL 파일은 다음과 같이 저장됩니다.

 

{"messages": [{"role": "system", "content": "You are a helpful AI assistant."}, {"role": "user", "content": "안녕하세요, 오늘 날씨는?"}, {"role": "assistant", "content": "오늘 서울의 날씨는 맑고 따뜻합니다."}]}
{"messages": [{"role": "system", "content": "You are an IT support assistant."}, {"role": "user", "content": "Wi-Fi가 연결되지 않아요."}, {"role": "assistant", "content": "Wi-Fi 문제를 해결하려면 공유기를 재부팅하세요."}]}

이제 변환된 JSONL 파일을 OpenAI Fine-Tuning에 사용할 수 있습니다!


4. JSONL 파일을 OpenAI에 업로드하고 Fine-Tuning 수행하기

1️⃣ 변환된 JSONL 파일 업로드

openai api files.create -f training_data.jsonl -p fine-tune

✔ 업로드 후 반환된 "id" 값을 확인하세요.

2️⃣ Fine-Tuning 실행

import openai
openai.api_key = "your_openai_api_key"

fine_tune_response = openai.fine_tuning.jobs.create(
    training_file="file-NEW_FILE_ID",  # 업로드된 파일 ID 입력
    model="gpt-4o-mini-2024-07-18"
)
print(f"Fine-tuning Job ID: {fine_tune_response['id']}")

🎯 결론

엑셀 데이터를 OpenAI Fine-Tuning JSONL로 변환 가능
Chat Model (gpt-4o)에 맞게 messages 형식으로 변환
누락된 데이터 자동 검출 및 기본값 적용
변환된 JSONL을 OpenAI API를 통해 Fine-Tuning에 활용 가능! 🚀

이제 엑셀 데이터로 Fine-tuned 모델을 직접 학습해보세요! 🎉

728x90
반응형