
무엇이 좋은 SFT 샘플을 만드는가 (그리고 왜 대부분의 합성 데이터셋이 실패하는가)
요약
성공적인 SFT(Supervised Fine-tuning)를 위해 양질의 합성 데이터를 구축하는 방법론을 다룹니다. 단순히 데이터를 생성하는 것을 넘어, 모델의 성능 저하를 막기 위한 품질 필터링과 4가지 핵심 평가 요소를 설명합니다.
핵심 포인트
- 단순 생성 방식의 합성 데이터는 모델 성능을 오히려 저하시킬 수 있음
- 고품질 SFT를 위한 4대 요소: 관련성, 사실적 일관성, 형식 품질, 응답 유용성
- 품질 임계값 미달 샘플을 제거하기 위해 의도적으로 더 많은 데이터를 생성해야 함
- 모호한 답변 대신 구체적이고 유용한 학습 신호를 제공하는 것이 핵심
당신은 언어 모델을 미세 조정(Fine-tuning)하기로 결정했습니다. 수백 개의 샘플을 생성하고, 이를 Axolotl 또는 LLaMA-Factory에 로드한 뒤, 학습을 시작하고 기다립니다.
그런데 결과물이 나온 모델이... 더 나빠졌습니다. 혹은 이상할 정도로 반복적입니다. 아니면 문맥과 상관없이 모든 질문에 똑같은 방식으로 답변합니다.
문제는 대개 당신의 학습 설정(Training setup)이 아닙니다. 바로 데이터입니다.
합성 데이터셋(Synthetic Datasets)에 관한 불편한 진실
합성 SFT 데이터를 생성하는 것은 쉽습니다. 하지만 좋은 합성 SFT 데이터를 생성하는 것은 쉽지 않습니다.
대부분의 파이프라인(Pipeline)은 다음과 같이 작동합니다:
- 프롬프트(Prompt) 작성: "고객 지원 사례 500개를 생성해줘"
- LLM 호출
- 출력 저장
- 미세 조정(Fine-tune)
문제는 무엇일까요? 무엇이 잘못되었는지 잡아낼 메커니즘이 없다는 것입니다. 그리고 실제로 많은 것들이 잘못됩니다.
나쁜 샘플의 모습
품질 필터(Quality filter) 없이 생성된 실제 사례는 다음과 같습니다:
지시사항(Instruction): 환불 상태를 묻는 고객에게 응답하세요.
출력(Output): "문의해 주셔서 감사합니다. 환불이 처리 중입니다. 잠시만 기다려 주시면 곧 다시 연락드리겠습니다."
언뜻 보기에는 괜찮아 보입니다. 하지만 모델이 이로부터 무엇을 배우는지 생각해 보십시오:
- 누군가 환불에 대해 물으면, 모호하게 말할 것
- 타임라인(Timeline)을 제공하지 말 것
- 다음 단계(Next steps)를 제시하지 말 것
- 그저 인지하고 회피할 것
이런 샘플들을 충분히 학습시키면, 당신의 모델은 도움이 되지 않는 말을 하는 데 전문가가 됩니다.
이제 좋은 샘플이 어떤 모습인지 보겠습니다:
지시사항(Instruction): 환불 상태를 묻는 고객에게 응답하세요.
출력(Output): "환불은 14일에 승인되었으며 귀하의 은행으로 제출되었습니다. 대부분의 은행은 영업일 기준 3~5일 이내에 이를 처리하므로, 19일까지는 확인하실 수 있을 것입니다. 만약 그때까지 나타나지 않는다면, 여기에 답장을 주세요. 즉시 상위 단계로 에스컬레이션(Escalate)하겠습니다."
동일한 지시사항입니다. 하지만 완전히 다른 학습 신호(Training signal)를 제공합니다.
실제로 중요한 4가지 요소
제가 SFT 샘플을 평가할 때는 네 가지 차원을 살펴봅:
1. 관련성 (Relevance)
응답이 지시 사항을 직접적으로 다루고 있습니까? 주제에서 벗어나거나 부분적으로만 관련 있는 답변은 모델이 곁가지로 새도록(drift) 가르칩니다. 문법적으로 완벽한 응답이라 할지라도 질문에 답하지 않는다면 점수는 0점입니다.
2. 사실적 일관성 (Factual Consistency)
응답 내의 주장들이 타당하며 내부적으로 일관됩니까? 확인 과정을 거치지 않으면 환각(Hallucination)된 주문 번호, 불가능한 타임라인, 모순된 정책 등이 모두 포함될 수 있습니다. 당신의 모델도 똑같은 방식으로 환각하는 법을 배우게 될 것입니다.
3. 형식 품질 (Format Quality)
응답이 사용 중인 스키마 (Schema)에 맞게 올바르게 구조화되어 있습니까? 깨진 JSON 필드나 출력 형식을 무시하는 응답은 구조적 수준에서 학습 데이터를 오염시킵니다.
4. 응답 유용성 (Response Usefulness)
이 응답이 실제로 누군가에게 도움이 되겠습니까? 이는 자동화하여 잡아내기 가장 어려운 요소입니다. 응답이 관련성이 있고, 사실적으로 일관되며
품질 임계값 (quality threshold) 미만의 샘플은 제거됩니다. 필터링 과정에서 데이터가 부족해지는 것을 방지하기 위해, 의도적으로 필요한 양보다 더 많은 데이터를 생성합니다.
결과적으로: 학습 루프 (training loop)에 도달하는 모든 샘플은 단순히 생성된 것이 아니라, 독립적으로 평가를 거친 데이터가 됩니다.
전체 파이프라인 (The Full Pipeline)
실제 환경에서 판별 (judge) 단계는 더 큰 품질 프로세스의 한 부분입니다. 완성된 파이프라인은 다음과 같은 모습을 띱니다:
1단계 - 생성 (Generation)
도메인 특화 시스템 프롬프트 (domain-specific system prompt)를 사용하여 도메인 인지적 (domain-aware) 생성을 수행합니다. 순환적 컨텍스트 주입 (Rolling context injection)을 통해 배치 (batch) 간의 의미론적 드리프트 (semantic drift)를 방지합니다.
2단계 - 검증 및 중복 제거 (Validation & Deduplication)
스키마 검증 (Schema validation)을 통해 형식이 잘못된 행 (rows)을 거부합니다. 토큰 길이 필터링 (Token length filtering)을 통해 학습에 안전한 범위를 벗어난 샘플을 제거합니다. 중복 제거 (Deduplication, MinHash 또는 의미 기반 방식)를 통해 다양성을 더하지 않으면서 데이터셋 크기만 부풀리는 유사한 샘플들을 제거합니다.
3단계 - LLM-as-Judge 점수 산정 (LLM-as-Judge Scoring)
모든 샘플에 대해 위에서 언급한 네 가지 차원으로 점수를 매깁니다. 임계값 이상의 샘플만 다음 단계로 진행합니다.
4단계 - 인간 검토 (Human Review)
최종 분할 (split) 전, 품질 패턴을 확인하기 위해 출력물을 검토합니다. 반복적인 문제가 발견되면 임계값을 조정하고 영향을 받은 단계를 다시 실행합니다.
5단계 - 분할 및 내보내기 (Split & Export)
셔플링된 90/10 비율의 학습/검증 (train/validation) 분할을 수행합니다. Alpaca 또는 ShareGPT 형식의 프로덕션 준비 완료된 JSONL로 출력합니다.
실제 적용 사례
최근 진행한 500개 샘플 실행에서 필터 깔때기 (filter funnel)는 다음과 같았습니다:
- 생성됨: 600개 샘플
- 스키마 검증 후: 584개 (-16개 형식 오류 행)
- 토큰 길이 필터 적용 후: 572개 (-12개 너무 짧거나 너무 김)
- 중복 제거 후: 569개 (-3개 유사 중복)
- LLM 판별 후: 500개 (-69개 품질 임계값 미달)
판별 단계에서 약 11%의 샘플이 제거되었습니다. 중복 제거는 1% 미만으로 제거했습니다. 스키마 오류는 조기에 포착되었습니다.
판별기(judge)에 의해 제거된 69개의 샘플은 모델의 성능을 조용히 저하시켰을 샘플들입니다.
핵심 요약 (The Takeaway)
좋은 SFT (Supervised Fine-Tuning) 샘플은 단순히 정답처럼 보이는 샘플이 아니라, 모델에게 올바른 행동 양식을 가르치는 샘플입니다.
모호한 응답은 모호한 행동을 가르칩니다. 환각(Hallucination)이 포함된 세부 정보는 환각을 가르칩니다. 거의 중복된 샘플은 반복을 가르칩니다.
도메인 특화 LLM (Large Language Model)을 구축하고 있다면, 학습 데이터의 품질은 그 어떤 변수보다 중요합니다. 더 나은 베이스 모델(Base model)이라 할지라도 나쁜 데이터로부터 당신을 구해줄 수는 없습니다.
향후 계획 (What's Next)
저는 현재 이 파이프라인을 사용하여 공개된 SFT 데이터가 거의 없는 몇 안 되는 도메인 중 하나인 베트남 법률 Q&A 공개 데이터셋을 구축하고 있습니다. 준비가 되면 HuggingFace에 공유하겠습니다.
만약 파인튜닝 (Fine-tuning) 프로젝트를 진행 중이며 귀하의 도메인에 맞는 검증된 데이터셋이 필요하다면, 저는 Fiverr에서 서비스로 이를 구축해 드리고 있습니다. 링크는 댓글에 있습니다.
이 내용이 유익했다면, LLM 파인튜닝, 데이터셋 준비, 그리고 실무적인 ML (Machine Learning) 엔지니어링에 관한 더 많은 게시물을 위해 팔로우해 주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기