안녕하세요! ‘대본 마스터’를 만들기 위해 좋은 대본들을 AI에게 학습시키고 싶으시군요. 정말 멋진 프로젝트입니다! 좋은 데이터를 학습시키면 AI가 그 대본의 스타일, 톤, 구조를 모방하여 훌륭한 창작 파트너가 될 수 있습니다.
AI 모델(예: GPT 시리즈)에 특정 데이터를 ‘학습’시키는 가장 대표적인 방법인 파인 튜닝(Fine-tuning) 과정을 통해 이를 구현하는 방법을 안내해 드릴게요.
1. 솔루션 개요: 파인 튜닝(Fine-tuning)
파인 튜닝은 이미 똑똑한 AI 모델(기본 모델)에게 특정 분야(여기서는 대본 작성)의 데이터를 집중적으로 공부시켜서 전문가로 만드는 과정입니다.
전체 프로세스:
-
데이터 준비: 가지고 계신 좋은 대본들을 AI가 이해할 수 있는 형식(JSONL)으로 변환합니다.
-
파일 업로드: 변환된 데이터를 OpenAI 서버(또는 사용하는 모델의 서버)에 업로드합니다.
-
학습 시작: 업로드한 파일로 모델을 훈련시킵니다.
-
사용: 학습이 완료된 ‘나만의 대본 마스터 모델’을 불러와서 사용합니다.
2. 데이터 준비 (가장 중요한 단계)
AI를 학습시키려면 **질문(User)**과 **이상적인 답변(Assistant)**의 쌍으로 데이터를 정리해야 합니다. OpenAI 모델을 기준으로 JSONL 형식을 사용합니다.
데이터 구조 예시 (training_data.jsonl):
이 형식은 대본의 ‘지문’, ‘대사’, ‘감정’ 등을 AI가 어떻게 출력해야 하는지 가르쳐 줍니다.
{"messages": [{"role": "system", "content": "당신은 세계 최고의 드라마 대본 작가입니다. 감동적이고 몰입감 있는 대본을 작성하세요."}, {"role": "user", "content": "이별을 앞둔 연인, 비 오는 버스 정류장 상황의 대본을 써줘."}, {"role": "assistant", "content": "S#1. 버스 정류장 (밤, 비)\n\n세찬 빗줄기가 정류장 지붕을 때린다. 민우(20대 후반), 우산도 없이 젖은 채 서 있다.\n\n민우\n(떨리는 목소리로)\n정말... 이게 최선이야?\n\n지수(20대 후반), 민우의 눈을 피하며 우산을 고쳐 쥔다.\n\n지수\n응. 우린 서로에게 너무 지쳤어.\n\n버스가 물보라를 일으키며 다가온다."}]}
{"messages": [{"role": "system", "content": "당신은 세계 최고의 드라마 대본 작가입니다."}, {"role": "user", "content": "주인공이 복권에 당첨된 사실을 확인하는 코믹한 씬."}, {"role": "assistant", "content": "S#5. 편의점 앞 (낮)\n\n철수(30대), 쭈쭈바를 입에 문 채 핸드폰과 영수증을 번갈아 본다.\n\n철수\n오, 오육... 칠... 십이...\n(눈이 왕방울만해지며)\n허! 흡! 컥!\n\n갑자기 사레가 들려 기침을 토해내는 철수. 지나가던 강아지가 짖는다."}]}
-
System: AI에게 부여할 역할입니다. (예: “당신은 대본 작가입니다.”)
-
User: 우리가 입력할 명령어입니다.
-
Assistant: 우리가 원하는 ‘좋은 대본’의 예시를 여기에 넣습니다.
3. 파인 튜닝 실행 코드 (Python)
이제 Python과 OpenAI API를 사용하여 실제로 학습을 시키는 코드입니다.
사전 준비:
-
터미널에서 라이브러리 설치:
pip install openai -
OpenAI API Key 발급 필요
1단계: 파일 업로드 및 학습 요청
from openai import OpenAI
import time
# 1. 클라이언트 설정 (API 키 입력)
client = OpenAI(api_key="여기에_당신의_API_KEY를_넣으세요")
# 2. 학습 데이터 파일 업로드
print("1. 파일을 업로드 중입니다...")
file_response = client.files.create(
file=open("training_data.jsonl", "rb"), # 준비한 데이터 파일명
purpose="fine-tune"
)
file_id = file_response.id
print(f"파일 업로드 완료! File ID: {file_id}")
# 3. 파인 튜닝 작업 생성 (학습 시작)
print("2. 학습 작업을 생성 중입니다...")
job_response = client.fine_tuning.jobs.create(
training_file=file_id,
model="gpt-3.5-turbo" # 비용 효율적인 모델 (gpt-4o 등도 가능)
)
job_id = job_response.id
print(f"학습이 시작되었습니다! Job ID: {job_id}")
print("학습은 데이터 양에 따라 수십 분에서 수 시간이 걸릴 수 있습니다.")
2단계: 학습 상태 확인 및 모델 사용
학습이 완료되었는지 확인하고, 완료된 모델을 사용하는 코드입니다.
# ... 위 코드에서 이어집니다 ...
# 4. 학습 상태 확인 (주기적으로 체크)
while True:
job_status = client.fine_tuning.jobs.retrieve(job_id)
status = job_status.status
print(f"현재 상태: {status}")
if status == "succeeded":
fine_tuned_model = job_status.fine_tuned_model
print(f"\n축하합니다! 학습이 완료되었습니다.")
print(f"나만의 모델 ID: {fine_tuned_model}")
break
elif status == "failed":
print("학습에 실패했습니다. 데이터를 확인해주세요.")
break
time.sleep(60) # 1분마다 확인
# 5. 내 모델로 대본 써보기 (테스트)
if status == "succeeded":
completion = client.chat.completions.create(
model=fine_tuned_model, # 여기서 학습된 모델을 사용합니다
messages=[
{"role": "system", "content": "당신은 세계 최고의 드라마 대본 작가입니다."},
{"role": "user", "content": "형사가 범인을 취조실에서 압박하는 장면 써줘."}
]
)
print("\n[생성된 대본]")
print(completion.choices[0].message.content)
4. 구현 지침 및 팁
-
데이터의 양보다는 질: 수천 개의 엉성한 대본보다, 정말 스타일을 잘 반영한 50~100개의 고품질 대본 데이터(JSONL)가 훨씬 효과적입니다.
-
데이터 포맷팅: 가지고 계신 대본 파일(Word, PDF, HWP)을 텍스트로 추출한 뒤, 위의 JSONL 포맷으로 변경하는 전처리 작업이 필요합니다. (이 과정도 파이썬으로 자동화할 수 있습니다.)
-
비용 관리: 파인 튜닝은 학습 시에도 비용이 들고, 학습된 모델을 사용할 때도 일반 모델보다 비용이 조금 더 높을 수 있으니 API 사용량을 체크하세요.
다음 단계로 무엇을 도와드릴까요?
-
가지고 계신 대본 텍스트 파일(예: txt)을 JSONL 학습 데이터 형식으로 변환해 주는 파이썬 코드를 작성해 드릴까요?
-
아니면 파인 튜닝 없이, 프롬프트 엔지니어링만으로 대본 스타일을 모방하는 방법을 먼저 시도해 보시겠어요?
답글 남기기