7장. SFT 데이터 구성과 Chat Template
정리
- SFT 데이터는
(사용자 요청, 모범 답변)쌍의 모음입니다. SFT 는 말투, 출력 형식, 업무 절차처럼 "어떻게 답하는가"를 잘 가르치고, 사실 지식은 RAG 로 주는 편이 낫습니다. - 좋은 SFT 데이터의 조건은 정확성, 일관성, 다양성, 적정 길이, 깨끗하고 안전한 데이터입니다. 양보다 질이 중요해, 좁은 목표라면 깨끗한 예시 수백 개로도 효과를 봅니다.
- 같은 문답을 Instruction, messages, prompt-completion 형식으로 담을 수 있습니다. prompt-completion 으로 주면
SFTTrainer가 답(completion) 부분만 학습합니다. - 페르소나 데이터 327쌍은 빈값과 중복이 없고, 답변은 18~56자(13~47 토큰)입니다. 섞은 뒤 잘라 test 32, valid 32, train 263 으로 나눴습니다.
- 모델은 messages 를 직접 읽지 못합니다.
apply_chat_template이<|im_start|>역할 ... <|im_end|>대본 양식으로 바꾸고, system 을 안 주면 Qwen 기본 문구가 들어갑니다. - 학습 입력은 답변과
<|im_end|>까지, 추론 입력은add_generation_prompt=True로 assistant 머리표까지 넣습니다. 예시 문답은 질문 쪽 42 토큰 + 답 15 토큰 = 57 토큰이었습니다. labels는 질문 구간과 패딩을 -100 으로 가려 답변만 채점합니다. 패딩 자리는input_ids151643,attention_mask0,labels-100 이고, 학습은 오른쪽, 배치 생성은 왼쪽에 패딩합니다.