LLM이 문학적 함축을 쓰게 만드는 4가지 방법 테스트: 5개 예시를 든 Few-shot이 파인튜닝과 DPO를 압도함
I tested 4 methods to make LLMs write literary subtext. Few-shot with 5 examples beat fine-tuning and DPO.
핵심 요약
LLM이 감정을 직접 언급하지 않고 문학적으로 묘사하게 하려면 파인튜닝보다 Few-shot 프롬프팅이 훨씬 효과적임.
- Few-shot 프롬프팅 — 5개의 예시를 시스템 프롬프트에 포함하는 방식이 파인튜닝보다 훨씬 뛰어난 성능을 보임.
- 파인튜닝의 한계 — 500개 정도의 적은 데이터셋으로는 모델이 스타일을 학습하기보다 단순히 데이터를 암기하는 경향이 강함.
- DPO의 부작용 — DPO 학습 시 모델이 운문 형식으로 글을 쓰거나 기존 학습 데이터를 그대로 뱉어내는 등 문체 왜곡이 발생함.
- 금지어 목록의 역효과 — 특정 단어를 쓰지 말라고 지시하면 오히려 모델이 그 단어를 더 의식하게 되어 결과물이 나빠짐.
LLM이 문학적 함축(욕망을 직접 말하지 않고 신체적 디테일을 통해 보여주는 것)을 쓰게 하려고 3개월 동안 매달렸음. GPT-4, Claude, Mistral 등 모든 모델이 로맨틱하거나 관능적인 장면을 요청하면 "심장이 갈비뼈를 두드렸다"거나 "방 건너편에서 눈이 마주쳤다" 같은 상투적인 표현만 내뱉음.
문제는 모델이 아니라 학습 데이터였음. 그래서 4가지 접근법을 시도해봄.
-
Instruction-tuning (Mistral-7B에 QLoRA 적용) — 534개의 문장, 3 에포크. 결과: 10번의 프롬프트당 13개의 노골적인 단어 사용. 베이스라인(11개)보다 나쁨. 모델이 스타일을 학습한 게 아니라 학습 데이터를 그냥 암기해버림.
-
DPO (시나리오 프롬프트 활용) — 534개의 선택/거부 쌍 사용. 결과: 9개의 노골적인 단어 사용. 해당 지표는 개선됐지만, 모델이 운문으로 글을 쓰거나 학습 데이터를 그대로 뱉어냄. 신체적 구체성은 37에서 8로 떨어짐.
-
Few-shot v1 (시스템 프롬프트에 5개 예시 포함) — 결과: 4개의 노골적인 단어 사용. 상투적인 문구는 23개에서 17개로 감소. 신체적 구체성은 36 유지. 암기 현상 없음.
-
Few-shot v2 (15개 예시 + 금지어 목록 + 시나리오 매칭) — 결과: v1보다 나쁨. 6개의 노골적인 단어 사용, 29개의 상투적인 문구. 금지어 목록을 넣으니 모델이 오히려 쓰지 말아야 할 단어를 더 의식하게 됨("흰 곰을 생각하지 마라"는 심리). 15개의 예시는 어텐션에 과부하를 줌.
결론: 500~600개 정도의 적은 데이터셋에서는 Few-shot 프롬프팅이 모든 중요한 지표에서 파인튜닝을 압도함. 모델은 가중치 수정이 필요한 게 아니라, 문맥 속에 좋은 예시가 필요함. 그리고 더 많은 예시보다는 적고 깔끔한 예시가 훨씬 효과적임.
방법론에 대해 궁금한 점 있으면 답변해드림. 작가들이 사용할 수 있도록 534개의 문장과 테스트한 프롬프트 템플릿도 정리해뒀음.

