※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. ※

오늘은 곰돌이 푸의 성격과 말투를 담은 페르소나 챗봇을 본격적으로 만들기 위해
지난 시간에 준비한 학습용 데이터를 가지고 파인튜닝을 진행해봤습니다.
세 가지 단계로 나눠서 정리해봤는데요.
데이터 전처리부터 학습, 그리고 테스트까지 대략적으로 정리해봤습니다.
캐릭터 페르소나 LLM 챗봇을 만들고 싶은 분께 작은 도움이라도 되면 좋겠네. 😊
📦 데이터 전처리
먼저 Hugging Face에 강사님께서 지난 시간 실습 결과로 업로드 해둔 'winnie-complete-chat-dataset'을 불러왔습니다.
그리고 곰돌이 푸가 어떤 캐릭터인지, 어떤 말투로 대답해야 하는지를 알려주는 system prompt를 구체적으로 작성했죠.
물론, 지난 시간에 학습용 데이터를 만들면서 작성했던 시스템 프롬프트에 비해서는 비교적 간단하게 작성했습니다.
너무 구체적인 시스템 프롬프트는 모델에 따라 성능을 약화시키는 요소가 되기도 한다더라구요. 🤔
system_prompt = """
당신의 이름은 이제 '푸'입니다.
성격: 느긋하고 단순하며 깊은 통찰을 지님
좋아하는 것: 꿀, 친구들과의 시간
말투: 단순하고 순수하게, 따뜻한 어조
"""
dataset = load_dataset("iamjoon/winnie-complete-chat-dataset", split="train")
이후, 각 샘플에 system prompt와 기존 대화를 합쳐 messages 형식으로 변환했습니다.
이 구조는 OpenAI Chat 형식과 동일하므로, 다양한 파인튜닝 프레임워크에서 바로 쓸 수 있는 형태이죠
def format_conversations(sample):
return {
"messages": [
{"role": "system", "content": system_prompt},
*sample["conversations"]
]
}
마지막으로 데이터셋을 학습용과 테스트용으로 나누고(train_test_split), 캐릭터 설정이 잘 반영됐는지 샘플을 눈으로 직접 확인했어요. 🐝
🛠️ 학습
모델은 "NCSOFT/Llama-VARCO-8B-Instruct"를 사용했고, LoRA를 적용했습니다.
이 방식은 모델 전체를 학습하지 않고 일부 가중치만 업데이트하는 방법이였죠!
속도와 효율을 모두 챙길 수 있겠습니다 :)
peft_config = LoraConfig(
lora_alpha=32, lora_dropout=0.1, r=8,
target_modules=["q_proj", "v_proj"],
task_type="CAUSAL_LM"
)
학습 데이터는 단순히 토큰화만 하는 게 아니라, 어시스턴트가 대답하는 부분만 정답으로 학습하도록했습니다.
강사님께서 제공한 collate_fn()이라는 함수를 활용했는데요.
이렇게 하면 모델이 질문 부분까지 예측하려고 낭비하는 일을 막을 수 있습니다.
이어서, 학습은 SFTTrainer로 실행했고, 완료 후에는 체크포인트를 저장했습니다.
trainer = SFTTrainer(
model=model,
args=args,
train_dataset=train_dataset,
data_collator=collate_fn,
peft_config=peft_config
)
trainer.train()
trainer.save_model()
🧪 테스트
파인튜닝된 모델을 불러와서 실제로 곰돌이 푸처럼 대답하는지 확인했습니다.
pipe = pipeline(
"text-generation",
model=AutoPeftModelForCausalLM.from_pretrained(peft_model_id),
tokenizer=tokenizer
)
싱글턴 테스트와 멀티턴 테스트로 나누어 진행해봤죠.
결과는 꽤나 만족스럽게 잘 나왔습니다.
아마 다음 수업에는 이렇게 파인튜닝한 모델을 평가하는 실습이 있겠는데요.
이 때 좀 더 성능 평가에 대해 다뤄보겠습니다 😏
🤔 배운 점과 고민 포인트
- 페르소나 챗봇은 아무래도 시스템 프롬프트 설계가 핵심이라는 걸 느꼈습니다. 아무리 좋은 데이터라도 캐릭터 설정이 허술하다면, 원하는 결과물을 얻을 수 없겠죠?
- 마스킹 처리를 통해 모델이 불필요한 부분을 학습하지 않도록 하는 것의 중요성을 깨달았습니다.
① 오늘자 날짜, 공부 시작, 종료 시각 포함 사진 각 1장


② 1개 클립 수강 인증 사진 1장 / 학습 인증 사진 1장


③ 챌린지 대상 강의 완강률 캡쳐 사진 1장

https://fastcampus.info/4n8ztzq
(~6/20) 50일의 기적 AI 환급반💫 | 패스트캠퍼스
초간단 미션! 하루 20분 공부하고 수강료 전액 환급에 AI 스킬 장착까지!
fastcampus.co.kr
'패스트캠퍼스환급챌린지' 카테고리의 다른 글
| 패스트캠퍼스 환급챌린지 50일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (5) | 2025.08.19 |
|---|---|
| 패스트캠퍼스 환급챌린지 49일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (4) | 2025.08.18 |
| 패스트캠퍼스 환급챌린지 42일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (3) | 2025.08.11 |
| 패스트캠퍼스 환급챌린지 41일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (7) | 2025.08.10 |
| 패스트캠퍼스 환급챌린지 40일차 : 파인튜닝과 RAG로 완성하는 맞춤형 LLM 서비스 개발 강의 후기 (5) | 2025.08.09 |