SFT의 본질: 지식 주입이 아닌 행동 교정
엔지니어는 파운데이션 모델의 기본 성능이 프로덕션 요구사항을 충족하지 못할 때, 지도 미세 조정(SFT)을 통해 모델의 행동을 교정한다. SFT는 모델에 새로운 지식을 주입하는 과정이 아니라, 모델이 이미 보유한 지식을 특정 형식과 어조로 출력하도록 행동을 최적화하는 과정이다. 이러한 작동 원리는 표면적 정렬 가설(Superficial Alignment Hypothesis)에 근거하며, 모델이 이미 학습한 지식을 사용자가 요구하는 방식으로 꺼내도록 유도한다. 따라서 모델이 특정 도메인의 용어나 개념을 전혀 모르는 상태라면, SFT 이전에 대량의 비정형 데이터를 학습시키는 지속적 사전 학습(CPT)을 선행해야 한다. Amazon Nova와 같이 방대한 코퍼스로 사전 학습된 모델은 SFT와 강화 학습 기반 미세 조정(RFT)의 조합만으로도 프로덕션 환경에 적합한 행동 패턴을 형성할 수 있다.
품질이 양을 압도하는 데이터셋 구성 전략
데이터 엔지니어는 LIMA 연구의 결과에 따라, 1,000개의 정제된 예시만으로도 대규모 데이터셋과 대등한 성능을 구현할 수 있다는 점을 인지해야 한다. AlpaGasus 연구는 전체 데이터셋 중 가장 정제된 20%의 예시만을 선별해 학습했을 때, 전체 데이터를 사용한 경우보다 학습 속도가 빠르고 더 높은 점수를 기록함을 입증했다. 모델은 학습 과정에서 새로운 사실을 습득하기보다 주어진 패턴을 모방하는 경향이 강하므로, 잘못된 예시를 포함하면 모델이 이를 정답으로 인식하여 지우기 어려운 나쁜 습관을 학습하게 된다. 따라서 데이터셋에 포함되는 모든 예시는 즉시 프로덕션 환경에 배포 가능한 수준의 골드 스탠다드(Gold Standard)를 유지해야 하며, 사람이 직접 작성한 데이터는 학습 데이터셋 반영 전 다단계 검토 과정을 거쳐야 한다.
데이터 다양성 확보와 클러스터링 기반 공백 식별
데이터 엔지니어는 임베딩 유사도 기반 클러스터링을 활용하여 데이터셋 내 공백을 식별하고 모델의 일반화 성능을 높인다. 데이터셋을 구성할 때는 사용자가 의도를 표현하는 다양한 방식, 즉 동일한 질문에 대한 여러 가지 표현 방식을 포함하여 모델의 범용성을 확보해야 한다. 예를 들어 고객 지원 데이터에서 환불 요청 범주가 클러스터링 결과에 나타나지 않는다면, 해당 영역은 모델이 학습 신호를 받지 못하는 데이터 공백으로 판단하고 추가 예시를 수집해야 한다. 또한, 데이터셋 구성 시 단순한 질문부터 복잡한 다단계 문제까지 실제 서비스 트래픽의 난이도 분포에 맞춰 가중치를 조정하고, 모호한 입력이나 서비스 범위를 벗어난 요청(Out-of-scope)에 대한 대응 예시를 명시적으로 포함해야 한다.
일관성 유지와 유해 콘텐츠 필터링
데이터 엔지니어는 데이터셋 내 동일한 의도를 가진 질문에 대해 불렛포인트와 문단형 응답이 혼재되지 않도록 일관성을 유지해야 한다. 학습 데이터의 형식이 파편화되어 있으면 모델은 추론 단계에서 어떤 구조로 답변을 구성해야 할지 판단하지 못하고 응답 품질이 저하된다. 또한, 여러 출처에서 수집된 데이터를 병합할 때 발생하는 의미적 중복(Deduplication)을 제거하여 특정 패턴에 대한 과적합을 방지해야 한다. 유해하거나 편향된 콘텐츠를 차단하기 위해서는 Llama Guard와 같은 자동화된 분류기를 도입하여 데이터셋을 스캔하고, 잠재적 위험 요소를 사전에 걸러내야 한다. 아래는 Llama Guard를 활용한 유해 데이터 필터링의 기본적인 접근 방식이다.
from transformers import AutoTokenizer, AutoModelForCausalLM
model_id = "meta-llama/Llama-Guard-3-1B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
def check_safety(prompt):
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs)
return tokenizer.decode(outputs[0])
시스템 프롬프트와 JSONL 포맷의 실무적 적용
엔지니어는 모델의 페르소나와 제약 조건을 정의하는 시스템 프롬프트를 학습 예제 구성 단계부터 포함하여 학습-추론 환경의 일치를 확인해야 한다. 학습 데이터 내 시스템 프롬프트를 생략한 채 추론 단계에서만 이를 적용하면 분포 불일치 현상이 발생하여 모델의 응답 일관성이 저해된다. 현대적인 SFT 파이프라인은 대화형 JSONL 형식을 표준으로 채택하며, Amazon Bedrock의 공식 가이드(https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-prepare.html)를 참조하여 데이터 구조를 정의해야 한다. 모델의 성능은 데이터의 양보다 학습 예제가 갖는 품질과 추론 환경과의 일관성에서 결정되므로, 엔지니어는 데이터셋 내 중복 제거 여부와 시스템 프롬프트의 학습-추론 환경 일치 여부를 체크리스트로 활용하여 최종 검증을 수행해야 한다.




