Data Recipes로 문서를 데이터셋으로 바꾸기
문서는 그대로 학습 데이터가 아니다
Unsloth Data Recipes는 PDF, CSV, JSON 같은 문서를 학습에 쓸 수 있는 데이터셋으로 바꾸는 흐름을 제공한다. 공식 설명에서는 문서 업로드, 그래프-노드 방식의 편집, 검증, 미리보기, 전체 실행 같은 절차를 안내한다12. 다만 실제 품질은 화면 기능보다 "어떤 입력을 어떤 정답 예시로 바꿀 것인가"에서 결정된다.
먼저 목표를 정해야 한다. 지식 챗봇을 만들려면 질문답변형이 좋다. 문서를 짧게 정리하는 모델이 필요하면 요약형이 맞다. 문의를 부서로 보내는 모델이라면 분류형이 적합하다. API 호출을 만들 모델이라면 도구 호출형 JSON을 출력하게 해야 한다.
AI 생성 이미지
PDF와 매뉴얼: 구조를 보존하며 쪼개기
PDF, 제품 매뉴얼, 사내 규정집은 비정형 문서다. 이런 문서는 먼저 텍스트를 추출한 뒤 제목, 절 번호, 표, 목록을 가능한 한 보존해야 한다. 문단만 길게 이어 붙이면 모델은 어느 내용이 어떤 주제에 속하는지 배우기 어렵다.
권장 흐름은 단순하다. 첫째, 문서를 제목과 절 단위로 나눈다. 둘째, 너무 긴 절은 의미가 끊기지 않는 선에서 청크로 나눈다. 셋째, 각 청크에 문서명, 페이지, 절 제목, 날짜 같은 메타데이터를 붙인다. 넷째, 청크마다 사용자가 실제로 물을 법한 질문과 근거 기반 답변을 만든다.
예를 들어 환불 정책 문서라면 다음과 같은 형태가 된다.
{"instruction":"다음 정책 문서를 근거로 고객 질문에 답하세요.","input":"질문: 개봉한 상품도 환불되나요?n근거: 환불 정책 3.2절 ...","output":"개봉한 상품은 원칙적으로 환불이 제한됩니다. 다만 제품 하자나 오배송이 확인되면 예외적으로 환불이 가능합니다."}중요한 점은 답변에 원문에 없는 내용을 넣지 않는 것이다. 학습 데이터에서 근거 없는 친절한 추측이 반복되면 모델도 운영 중에 그럴듯한 환각 답변을 만들 가능성이 커진다.
CSV와 JSON: 필드 의미를 먼저 정리하기
CSV와 JSON은 이미 구조가 있지만, 바로 학습에 넣기에는 부족하다. 열 이름이 모호하거나 결측값이 많거나 같은 레코드가 중복되어 있으면 모델이 잘못된 패턴을 배운다.
CSV는 먼저 각 열의 의미를 정의한다. 예를 들어 category, question, answer, priority가 있다면 어떤 열을 입력으로 쓰고 어떤 열을 정답으로 쓸지 정해야 한다. 문의 분류 모델이라면 question을 입력으로, category를 출력으로 만든다. 답변 생성 모델이라면 question과 관련 속성을 입력으로, 검수된 answer를 출력으로 만든다.
JSON은 중첩 구조를 주의해야 한다. 필요한 키만 남기고 이름을 일정하게 바꾼다. 날짜, ID, 상태값처럼 규칙이 있는 필드는 정규화한다. 도구 호출형 학습에서는 자연어 요청을 정해진 JSON 출력으로 연결한다.
{"instruction":"사용자 요청을 주문 조회 API 호출 JSON으로 바꾸세요.","input":"지난주에 주문한 무선 키보드 배송 상태를 확인해줘.","output":"{\"tool\":\"get_order_status\",\"arguments\":{\"period\":\"last_week\",\"item\":\"무선 키보드\"}}"}자동 생성 데이터의 품질 게이트
Data Recipes나 다른 자동화 도구로 만든 데이터는 반드시 검수해야 한다. 최소한 30~100개를 샘플링해 원문과 대조한다. 질문이 원문으로 답할 수 있는지, 답변이 근거를 벗어나지 않는지, 같은 질문이 반복되지 않는지 확인한다.
개인정보와 민감정보도 제거해야 한다. 이름, 전화번호, 이메일, 고객 ID, 계약 금액, 내부 시스템 주소는 마스킹하거나 학습에서 제외한다. 특히 사내 문서는 "모델이 알아도 되는 정보"와 "검색 권한이 있을 때만 보여 줄 정보"를 구분해야 한다.
검수 기준은 짧게라도 문서화한다. 예를 들어 "원문에 없는 정책 설명은 삭제", "답변은 5문장 이하", "모르는 내용은 확인 불가라고 답변", "JSON 출력은 파싱 가능해야 함"처럼 합격 기준을 정한다.
Unsloth 학습 템플릿에 맞춰 저장하기
최종 데이터는 학습 코드가 기대하는 형식과 맞아야 한다. 단일 지시문 학습은 instruction, input, output 형식이 다루기 쉽다. 대화 흐름과 역할이 중요하면 messages 형식을 쓴다. 어느 쪽이든 학습 때 사용할 채팅 템플릿과 평가 때 사용할 템플릿이 같아야 한다.
전체 데이터를 바로 학습하지 말고 먼저 50~100개로 짧은 테스트를 돌린다. 이 단계에서 JSONL 파싱 오류, 빈 output, 너무 긴 샘플, 종료 토큰 문제, 답변 형식 흔들림을 잡는다. 작은 데이터로 문제가 보이면 대규모 학습에서는 더 크게 드러난다.
좋은 데이터 변환의 목표는 많은 샘플이 아니다. 모델이 따라야 할 입력과 출력의 관계를 일관되게 보여 주는 것이다.
참고
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.