소개
이번 포스팅은 최종 프로젝트를 진행하면서 캐릭터의 어투를 학습 하기 위한 파인 튜닝 과정에서 겪은 시행 착오를 작성해보려고 한다. 나는 지난 1주일간 7가지의 방식으로 파인튜닝을 진행했는데 그중 하나는 기록을 해두지 않아서 시도한 방법에 대해서만 작성하려고 한다. 이번 파인튜닝 시행착오에서는 루시우 데이터셋만을 활용해서 우리가 원하는 정도의 성능이 나오는지 확인하면서 진행했다. 또한 LORA를 사용한 파인 튜닝을 사용했다.
사용한 데이터셋
캐릭터의 성격을 잘 나타내는 데이터셋.json
0.19MB
캐릭터의 어투를 반영한 일상 대화 데이터셋.json
0.43MB
루시우 대사셋.json
27.9 kB
데이터셋 수집 방법
- 커뮤니티에 정리된 캐릭터의 대사
- 나무위키에 정리된 캐릭터 대사
- 유튜브 영상을 통한 캐릭터 대사
각 데이터 별 출처
- 로스트 아크
- 아만 : https://m.blog.naver.com/hu_na44/222914005594
- 실리안 : Youtube
- 니나브 : Youtube
- 리그 오브 레전드 : 바이/ 징크스 / 제이스 / 케이틀린
- 캐릭터 대사 : 롤 팬덤 커뮤니티
- 캐릭터 세계관 및 성격 : 롤 공식 홈페이지
- 오버워치 : 루시우 / 정크랫 /트레이서
- 나무위키
- 스타크래프트 : 아바투르 /제라툴 /알라라크
- Youtube
- 캐릭터 대사 : 스타크래프트 팬덤 커뮤니티
- 캐릭터 세계관 및 성격 : 스타크래프트 팬덤 커뮤니티
- 유튜버 : 잇썹 / 주연
- Youtube
데이터 수집 방법:
- 유튜브
- 직접 수집
- Python+라이브러리를 활용한 영상 데이터 수집 후 Clova Cloud를 활용한 스크립트 추
- 스타크래프트 팬덤 : 자동화 수집
- 나무 위키 : 직접 수집
- 롤 팬덤 커뮤니티 및 공식 홈페이지 : 직접 수집
수집된 데이터 양식
- List[Str]
첫번째 시도 (루시우 대사셋)
- model : LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct
- epoch : 3 ,learning-rate : 2e-4
- 캐릭터의 어투를 구사하나 짧은 응답만 가능하고 문장을 제대로 구사하지 못함.\
- 결과 데이터를 캡처하지 못했다... Runpod으로 돌렸는데 코드는 있지만 다시 구성하고 테스트 해봐야 하기 때문에 나중에 시간이 난다면 추가해보도록 하겠다!.
데이터 증강 및 전처리
- 기존의 일반적인 대사 데이터를 그대로 학습하는 방법은 대화의 맥락을 이해하지 못하기 때문에 맥락을 좀 더 잘 이해할 수 있도록 openai api를 사용하여 GPT-4를 사용하여 루시우 데이터와 프롬폼트 엔지니어링을 곁들여 루시우의 성격과 어투를 잘 나타낼수 있는 질문으로 QA쌍 데이터를 생성했다.
- 또한 위와 동일한 방식으로 일상 대화에서 루시우의 어투를 가진 QA쌍을 생성했다.
두번째 시도 (캐릭터의 성격을 잘 나타내는 데이터셋)
- openai api를 사용하여 GPT-4 모델을 통해 프롬포트 엔지니어링을 사용하여 루시우의 말투로 루시우의 성격을 가장 잘 나타낼수 있는 질문쌍 2000개 생성
- 결과 : 대부분의 질문에 맥락을 잃은 상태로 답변함. 캐릭터의 세계관에 너무 빠져 답변하게됨.
- model : LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct
- epoch : 3 ,learning-rate : 2e-4
- 중간의 오류는 런팟 환경의 문제로 일반적인 환경에서는 발생하지 않음.
세번째 시도 (캐릭터의 성격을 잘 나타내는 데이터셋)
- 엑사원 7.8B 모델에 기존의 데이터 2000쌍을 학습
네번째 시도 (캐릭터의 성격을 잘 나타내는 데이터셋)
- 데이터 쌍을 1000개로 줄여 학습
- learning-rate를 1e-4로 줄여 학습
- model : LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct
- epoch : 3 ,learning-rate : 1e-4
다섯번째 시도 (캐릭터의 어투를 반영한 일상 데이터셋)
- openai api를 사용하여 GPT-4 모델을 통해 프롬포트 엔지니어링을 사용하여 루시우의 말투로 일상 대화 QA쌍 2000개 수집 후 파인 튜닝
- 결과 : 일상 대화에 대해서 말투 및 어투로 잘 답변함. 하지만 전문적인 지식이나 과학적인 내용을 질문 했을때 캐릭터의 어투를 잃어버림. 즉 파인튜닝에 사용되지 않은 질문에 대해서는 어투가 학습 되지 않음.
여섯번째 시도 ( 일상 대화 데이터셋 + 캐릭터의 성격 데이터셋 30%)
- new_qa 데이터셋에 testset 데이터를 일부 추출하여 추가 후 파인튜닝
일곱번째 시도 (엑사온 모델을 통해 생성한 데이터셋)
- 엑사온 모델을 ChatGPT에 사용한 QA쌍 생성 프롬폼트를 동일하게 사용하여 파인튜닝에 사용할 QA쌍을 생성
- 이 방법은 파인튜닝 자체를 시도하지 않았는데 그 이유로는 엑사온 모델로 새로운 데이터셋을 만들기에는 2.4B모델의 한계로 어투를 제대로 반영하지 못한다는 문제점이 있었다.
추가로 해볼 시도
- 시스템 프롬프트 기반 파인 튜닝
- 대화형 데이터셋을 통한 대화형 파인튜닝
위와 같이 두가지 방법을 추가하려고 한다. 첫번째 방식은 기존 엑사원 모델의 사용 방식과 동일하기 때문에 시스템 프롬프트를 넣는 방식으로 파인 튜닝을 진행하고 두번째 방식은 엑사원 모델을 파인튜닝한 사례를 찾아 보았는데 Huggingface-crew에서 사용한 파인 튜닝 기법이고 결과물이 아직 다 나오지는 않았지만 충분히 멀티턴 대화가 가능한 모델을 만드는데 도움이 될거라고 생각해서 해당 방식으로 데이터셋을 새로 구성해서 파인 튜닝을 진행해보기로 했다.
'AI' 카테고리의 다른 글
Cluade MCP를 활용한 웹페이지 분석 및 크롤러 만들기 (0) | 2025.06.23 |
---|---|
Claude에 MCP 연동하기 With Mac (0) | 2025.06.23 |
Django Gemini ChatBot 연동 (1) | 2025.02.19 |