천 개의 SOP, 3년 치 일탈 보고서, 그리고 감사관(auditor)이 보면 감격할 만한 CAPA 데이터베이스를 보유하고 있다고 가정해 보겠습니다. 자연스러운 본능은 이 모든 것을 JSONL로 스크래핑한 뒤 파인튜닝(fine-tuning) 스크립트를 돌려, 모델이 삼투 작용처럼 품질 시스템을 자연스레 흡수하기를 기대하는 것입니다.

하지만 그렇게 되지 않습니다. 모델은 품질 시스템을 작동시키는 인지적 사고 과정을 이해하지 못한 채, 문서의 표면적인 어투만 흉내 내는 앵무새가 될 뿐입니다. 겉보기에는 그럴듯하지만 환각(hallucination)에 기반한 근본 원인을 담은 CAPA 보고서를 생성하고, 버전 간에 어떤 부분이 변경되었는지 지적하지도 못한 채 SOP를 요약하며, 자신이 답변할 수 없는 일탈 질문에도 당당하게 확신을 갖고 답변할 것입니다.

문제는 데이터의 양이 아닙니다. 문제는 아키텍처에 있습니다. 파인튜닝은 사실(fact)이 아니라 행동(behavior)을 가르치는 과정입니다. 그리고 생명과학 품질 관리에서 가르쳐야 할 행동은 매우 구체적이며, 계층화되어 있고, 상호의존적입니다.

첫 번째 실수: 문서 유형별로 구성하기 (The First Mistake: Organizing by Document Type)

가장 흔히 볼 수 있는 접근 방식은 다음과 같습니다:

datasets/
├── SOPs/
├── Work_Instructions/
├── Deviations/
├── CAPAs/
├── Change_Controls/
└── Training_Records/

이 방식은 RAG(검색 증강 생성)에는 탁월합니다. 하지만 SFT(지도 미세조정)에는 최악입니다.

RAG는 사실을 가르칩니다 — “SOP-00123에 명시된 갱의 절차는 무엇인가?” 파인튜닝은 행동을 가르칩니다 — “작업자가 잘못된 SOP를 사용한 일탈을 어떻게 조사해야 하는가?” 이 둘은 근본적으로 서로 다른 문제이며, 완전히 다른 데이터 아키텍처를 요구합니다.

올바른 구성 원칙은 문서 유형이 아니라 **행동 역량(behavioral skill)**입니다. 모델이 어떤 인지적 작업을 학습해야 합니까?

  • 감사관의 검토를 통과할 수 있는 절차서 작성
  • 구조화된 근본 원인 분석(RCA)을 통한 일탈 조사
  • 단순한 증상이 아닌 시스템적 결함을 해결하는 CAPA 계획 수립
  • 올바른 규제적 근거를 바탕으로 심각도 등급 분류
  • 결론을 내리기 전에 (환각을 일으키는 대신) 명확화 질문(clarifying questions) 던지기
  • 데이터가 불충분할 때 품질 기록의 날조(fabrication) 거부
  • 모든 규제 준수 권고사항에서 구체적인 규정 조항 인용

이 각각이 하나의 데이터셋이어야 합니다. 단순한 문서 폴더가 아니라, 특정한 사고 패턴을 가르치는 엄선된 학습 예제 모음이어야 합니다.

4단계 계층 아키텍처 (The Four-Layer Architecture)

실무 환경(Production)에서 신뢰할 수 있는 생명과학 파인튜닝 모델은 반드시 4개의 고유한 데이터셋 계층을 갖추어야 합니다. 이 중 어느 하나라도 누락되면 모델은 예측 가능한 특정한 실패 모드(failure mode)를 보이게 됩니다.

계층 (Layer) 포맷 (Format) 학습 유형 (Training Type) 가르치는 내용 (What It Teaches) 누락 시 실패 모드 (Failure Mode If Missing)
1. 도메인 말뭉치 (Domain Corpus) 원시 텍스트 ({"text": "..."}) 지속적 사전학습 (CPT) GxP 어휘, 규제 언어, 문서 작성 관례 규격 준수 용어 대신 일반적인 일상 영어/한국어를 사용함
2. 인스트럭션 태스크 (Instruction Tasks) Alpaca (instruction/input/output) 지도 미세조정 (SFT) 단일 턴 구조화 작업: 분류, 추출, 요약, 초안 작성 구조화된 산출물을 생성하지 못하거나 작업 지시를 따르지 못함
3. 대화형 QA (Conversational QA) ChatML (messages 배열) 지도 미세조정 (SFT) 다중 턴 조사, 반복적 초안 작성, 후속 질의 심층 조사 대화 대신 단답형 일회성 답변만 내놓음
4. 선호도 정렬 (Preference Alignment) DPO 쌍 (chosen/rejected) 강화학습 (RL) 올바른 GxP 판단 vs 부적절한 판단, 거절 행동 규정을 위반하는 권고사항을 당당하게 확신을 갖고 생성함

이 4가지를 모두 구축하여 순서대로 학습시킨 뒤 최종적으로 결합합니다. Unsloth 에코시스템은 ShareGPT 변환을 위한 standardize_sharegpt, ChatML 정렬을 위한 get_chat_template, PDF/CSV 수집을 위한 Data Recipes 시각적 워크플로우를 통해 각 형식을 네이티브로 지원합니다.

계층 1: 지속적 사전학습을 위한 도메인 말뭉치 (Layer 1: Domain Corpus for Continued Pretraining)

목적: 모델에게 언어로 무언가를 수행하도록 가르치기 전에, 먼저 GxP의 언어로 말하는 법을 가르칩니다.

이 계층은 순수한 어휘 적응(vocabulary adaptation) 단계입니다. 모델은 ALCOA+ 원칙, 21 CFR Part 11 용어, 2자 검증(second-person verification) 문구, ICH 가이드라인 구조, 그리고 조직 고유의 약어 및 제품 코드를 내재화해야 합니다.

포맷: "text" 필드 외에 다른 구조가 없는 원시 텍스트(Raw text).

{
  "text": "SOP-00123 v4.0 - Aseptic Gowning Procedure\n1.0 Purpose: To define requirements for gowning in Grade B cleanroom...\n2.0 Scope: Applies to all personnel entering Grade B...\n5.2 Procedure: 5.2.1 Wash hands per SOP-00098... 5.2.2 Don sterile hood..."
}

규칙:

  • 경계를 넘나드는 문맥을 보존하기 위해 10% 중복(overlap)을 두고 512~2048 토큰 단위로 청킹(chunk)합니다.
  • 모든 청크 앞에 헤더 메타데이터(문서 유형, 섹션 번호)를 추가합니다. 이는 모델에게 단순한 내용뿐만 아니라 문서 구조를 학습시킵니다.
  • 식별 정보 제거(De-identification): 이름은 [REDACTED]로, 배치 번호는 가상의 플레이스홀더로, 서명은 [SIGNATURE REMOVED]로 대체합니다.
  • 내부 문서와 함께 공개 규제 텍스트를 포함합니다: 21 CFR Parts 210/211/Part 11, EU GMP 부록(Annexes), ICH Q7/Q9/Q10, USP(미국약전) 챕터 등.
  • FDA 경고 서한(Warning Letter) 및 Form 483 지적 사항을 포함합니다. 이는 규정을 준수하는 방법을 아는 것 못지않게 중요한 ’비준수(non-compliance)가 어떤 모습인지’를 모델에게 가르쳐 줍니다.

데이터 규모: 수집할 수 있는 만큼 최대한 확보합니다. 수천 건의 문서가 이상적입니다. 이것이 다른 모든 계층이 구축되는 기반이 됩니다.

데이터 소스:

  • 익명화된 내부 SOP, WI(작업 지침서), 일탈 보고서, CAPA, 변경 관리 문서
  • 공개 약전 챕터 (USP, EP)
  • 규제 지침 문서 (FDA, EMA, PIC/S)
  • ICH 가이드라인 전문
  • 과거 감사 지적 사항 (익명화 처리)

계층 2: 지도 미세조정을 위한 인스트럭션 태스크 (Layer 2: Instruction Tasks for Supervised Fine-Tuning)

목적: 일상적인 품질 운영의 핵심인 단일 턴(single-turn) 구조화 작업을 학습시킵니다.

이는 Alpaca 포맷(instruction, input, output)을 따릅니다. 태스크 유형당 하나의 인스트럭션 템플릿을 구축한 다음, 각각에 대해 수백 개의 예제를 생성합니다.

SOP / 작업 지침서 태스크 (SOP / Work Instruction Tasks)

{
  "instruction": "Extract prerequisites and materials from the SOP section.",
  "input": "SOP-00123 Section 5.2 Aseptic Gowning: Before entry, ensure Grade B gowning pack is available, sterile gloves size verified, and hand washing completed per SOP-00098.",
  "output": "{\"prerequisites\": [\"Hand washing per SOP-00098 completed\"], \"materials\": [\"Grade B gowning pack\", \"Sterile gloves (size verified)\"]}"
}

생성해야 할 기타 SOP 태스크:

  • 교육 목적으로 SOP를 5개 항목의 불릿 요약문으로 변환
  • 작업 지침서(WI)를 체크리스트 형태로 변환
  • SOP v3와 v4를 비교하고 모든 변경 사항 나열
  • 질의 답변: “WI-0045에 따라 이 행위가 허용되는가?”
  • 초안 SOP 검토: 누락된 섹션, 수동태 표현, ALCOA+ 위반 사항 식별

일탈 태스크 (Deviation Tasks)

{
  "instruction": "Classify the deviation and assess GMP impact.",
  "input": "Deviation DEV-2024-0142: Operator used non-calibrated pipette P-88 (calibration expired 2024-11-01) to add buffer on 2024-11-15. Product lot AB-123 affected.",
  "output": "Classification: Minor to Major, documentation and equipment control. Impact: Potential inaccurate buffer concentration. Requires assessment of pipette as-found data and product impact assessment. Immediate action: Quarantine lot AB-123 per SOP-00456."
}

CAPA 태스크 (CAPA Tasks)

{
  "instruction": "Generate a CAPA plan with root cause, corrective and preventive actions.",
  "input": "Root Cause: Calibration tracking spreadsheet not linked to LIMS, manual entry missed. Trending: 3 similar events in 6 months.",
  "output": "Root Cause: System failure in calibration status communication. Corrective Action: Calibrate P-88, reassess lots tested since 2024-11-01. Preventive Action: Implement automated LIMS block for expired equipment IDs. Effectiveness Check: Review zero incidents of expired equipment use for 3 months. Owner: QA Systems, Due: 30 days."
}

Unsloth의 [[]] 구문을 활용한 결측 데이터 처리 (Handling Missing Data with Unsloth’s [[]] Syntax)

품질 데이터베이스는 깔끔하지 않습니다. 새로 등록된 일탈 건에는 아직 근본 원인이 기록되지 않았을 수 있습니다. CAPA에는 유효성 평가(effectiveness check) 결과가 누락되어 있을 수 있습니다. 빈 필드가 포함된 레코드로 모델을 학습시키면, 모델은 “해당 없음(N/A)“을 출력하거나 임의의 값을 환각해 내는 법을 배우게 됩니다.

Unsloth의 선택적 텍스트 대괄호(optional text brackets)를 사용한 컬럼 병합 기능이 이를 해결합니다:

Instruction: Investigate deviation for {product}
[[Product {product} lot {lot_number} affected by {deviation_description}.]]
[[Equipment {equipment_id} calibration expired on {calibration_due_date}.]]
Output: {investigation_summary}

lot_number 값이 존재하면 대괄호 블록 전체가 프롬프트에 나타납니다. 비어 있으면 대괄호와 그 내부 콘텐츠가 완전히 사라집니다. 따라서 모델은 손상되거나 불완전한 데이터 구조를 전혀 보지 않게 됩니다.

QMS 연동을 위한 구조화된 출력 강제 (Force Structured Output for QMS Integration)

CAPA 및 일탈의 경우, 학습 데이터에서 JSON 출력을 강제하십시오. 이렇게 하면 다운스트림 애플리케이션(Veeva, MasterControl 또는 사내 구축 QMS 등)에서 사람이 수작업으로 재가공할 필요 없이 모델의 출력을 데이터베이스 필드로 안정적으로 파싱할 수 있습니다.

{
  "instruction": "Generate a CAPA plan in JSON format matching the QMS CAPA form schema.",
  "input": "Deviation: 2 batches failed dissolution testing due to incorrect granulation temperature setpoint. Root cause: sensor out of calibration, operators not trained on updated range.",
  "output": "{\"capa_id\": \"CAPA-2024-112\", \"corrective_actions\": [{\"action\": \"Retrain operators\", \"owner\": \"Manufacturing Training Lead\", \"due_date\": \"2024-08-15\"}], \"preventive_actions\": [{\"action\": \"Install automated temperature alarms\", \"owner\": \"Engineering\", \"due_date\": \"2024-10-30\"}], \"effectiveness_check\": {\"metric\": \"Temperature deviation rate\", \"target\": \"<1/month\", \"review_period\": \"6 months\"}}"
}

계층 3: 멀티턴 SFT를 위한 대화형 QA (Layer 3: Conversational QA for Multi-Turn SFT)

목적: 일회성 질문에 답하는 데 그치지 않고, 상호작용 방식의 심층 조사를 수행하도록 모델을 훈련시킵니다.

품질 업무는 결코 단 한 번의 질문으로 끝나지 않습니다. 일탈 조사는 대화의 연속입니다. 모델은 명확화 질문을 던지고, 불완전한 정보에 대해 추가 확인을 요청하며, 새로운 데이터가 유입되어 상황이 달라지면 이를 에스컬레이션할 수 있어야 합니다.

이는 messages 배열을 사용하는 ChatML 포맷입니다. 소스 데이터가 ShareGPT의 from/value 형식이라면 standardize_sharegpt를 사용하십시오.

조사 대화 예시 (The Investigation Conversation)

{
  "messages": [
    {
      "role": "system",
      "content": "You are a GxP compliance assistant. Only provide information stated in approved SOPs and regulatory guidelines. Always reference source document ID, revision, and section. If information is unavailable, direct the user to the Quality Unit."
    },
    {
      "role": "user",
      "content": "We had a 4-hour temperature excursion to 10°C for a batch of insulin stored per SOP-STOR-007 Rev 2.0. Is this a reportable deviation?"
    },
    {
      "role": "assistant",
      "content": "Per the Deviation Classification Matrix Rev 3.1 and Section 6.2 of SOP-STOR-007 Rev 2.0, this is a Level 2 Major reportable deviation. Immediate next steps: 1. Quarantine the affected batch, 2. Notify the Quality Unit within 2 hours, 3. Complete Deviation Report Form DEV-001 within 24 hours, 4. Conduct a risk assessment per RA-012."
    },
    {
      "role": "user",
      "content": "What information do I need in the deviation report form?"
    },
    {
      "role": "assistant",
      "content": "Per Form DEV-001 Rev 1.0, the deviation report must include: 1. Deviation ID and date of discovery, 2. Affected product name, batch number, and quantity, 3. Description including temperature log data, 4. Immediate corrective actions taken, 5. Name of discoverer and supervisor."
    }
  ]
}

구축해야 할 5가지 대화 패턴 (Five Conversation Patterns to Build)

  1. SOP 탐색: “SOP-00123에 따른 Grade B 갱의 절차는 어떻게 됩니까?” 및 특정 세부 단계에 대한 후속 질의
  2. 일탈 분류(Triage): 사용자가 발생 상황을 설명하면 모델이 분류를 확정하기 전에 명확화 질문을 던짐
  3. CAPA 적절성 검토: 사용자가 작성한 CAPA를 제시하면 모델이 완전성을 평가하고 개선안을 제안함
  4. 감사 시뮬레이션: 모델이 실사관(inspector) 역할을 맡아 특정 일탈에 대해 집요한 심층 질문을 제기함
  5. 문서 간 교차 추론: “이 일탈은 SOP-00123 및 CAPA-2024-0088과 연계되어 있는데, 해당 CAPA가 SOP의 갭을 적절히 해소하고 있는가?”

생각의 사슬(Chain-of-Thought) 추가

계층 2와 계층 3에서는 복잡한 조사 작업을 위해 명시적인 추론 사슬(reasoning chains)을 추가하십시오. 단순한 결론뿐만 아니라 근본 원인 분석 단계 → 결론 형태로 출력이 구조화되어야 합니다. 이것이 바로 단순히 CAPA 템플릿만 읊조리는 모델과 실제로 조사를 보조할 수 있는 모델을 가르는 핵심 차이입니다.

{
  "instruction": "Perform root cause analysis using 5-Why methodology.",
  "input": "Deviation: Repeated pH failures across 3 consecutive batches.",
  "output": "Why 1: pH meter reading drifted between calibrations. Why 2: Calibration frequency was weekly, insufficient for high-throughput testing. Why 3: Calibration schedule was set 5 years ago when volume was lower. Why 4: No periodic review of calibration frequency against current workload. Root Cause: Static calibration schedule not aligned with current operational demands. CAPA: Implement risk-based dynamic calibration frequency review quarterly."
}

계층 4: 선호도 정렬 (Layer 4: Preference Alignment - DPO / RLHF)

목적: 규제 준수 판단력(compliance judgment), 즉 올바른 답변과 위험한 답변의 차이를 학습시킵니다.

이 계층은 대다수 팀이 건너뛰는 영역이지만, 규제 환경에서 가장 중요한 계층입니다. 수많은 품질 시나리오에는 표면적으로 그럴듯해 보이는 여러 가지 답변이 존재할 수 있습니다. 숙련된 QA 실무 관행, 규제 당국의 기대치, 조직의 정책을 올바르게 반영하는 답변이 무엇인지를 모델이 학습해야 합니다.

선택/기각 패턴 (The Chosen/Rejected Pattern)

{
  "prompt": "Can I backdate the logbook entry for DEV-2024-0142 to yesterday?",
  "chosen": "You must not backdate. Create a late entry with current date/time, initial, and note 'Late entry for activity performed on 2024-11-15, reason for delay documented' per SOP-00012 on Good Documentation Practices. Per ALCOA+ and data integrity principles, backdating constitutes data falsification.",
  "rejected": "Yes, you can backdate it to yesterday as long as you remember what happened and note it was an oversight."
}

GxP를 위한 핵심 선호도 쌍 (Critical Preference Pairs for GxP)

다음 카테고리를 포괄하는 선호도 쌍을 최소 200~400개 구축하십시오:

카테고리 (Category) 선택된 행동 (Chosen Behavior) 기각된 행동 (Rejected Behavior)
데이터 무결성 (Data Integrity) 실제 일자를 기록하고 지연 기재(late entry) 표기 기록 일자를 소급 기재(backdate)함
배치 출하 판정 (Batch Disposition) 조사가 완료될 때까지 격리 보관(Quarantine) 유지 경계선상(borderline)의 결과임에도 출하 승인
규격 일탈 (OOS Results) FDA 가이드라인에 따른 철저한 1/2단계(Phase I/II) 조사 적합 판정이 나올 때까지 재시험하고 초기 결과 폐기
정보 부족 (Missing Information) 정보 불충분 상태를 명시하고 품질 부서(QA Unit) 안내 규제 답변을 임의로 날조(hallucination)함
기밀 데이터 (Confidential Data) 거부 의사를 밝히고 데이터 분류 기준 설명 공정 파라미터(process parameters) 누설
감사 지적 사항 (Audit Findings) 지적 사항을 인정하고 시정 조치 제안 지적 사항의 중요성을 축소하거나 묵살

의사결정 데이터셋: 표준 RLHF를 넘어서 (Decision Datasets: Beyond Standard RLHF)

표준 선호도 프레임워크에 추가할 수 있는 매우 강력한 요소 하나는, 단순히 무엇을 작성할지가 아니라 전문가가 선택을 내리는 사고방식을 가르치는 **의사결정 데이터셋(decision datasets)**입니다.

{
  "scenario": "Filter integrity test failed during aseptic filling of Batch F-2025-0034.",
  "options": {
    "A": "Release batch based on other passing tests",
    "B": "Reject batch immediately",
    "C": "Investigate before disposition"
  },
  "correct": "C",
  "reasoning": "A failed integrity test may indicate compromised sterility assurance. Per 21 CFR 211, batch disposition requires completion of an investigation and documented QA assessment before release. Option A is non-compliant. Option B is premature without investigation data."
}

이와 같이 정선된 수천 건의 의사결정 예제는 규제 산업용 어시스턴트에서 가장 가치 있는 역량인 **규제 준수 판단력(compliance judgment)**을 훈련시킵니다.

합성 데이터 부트스트랩 (The Synthetic Data Bootstrap)

실제 품질 데이터는 극비 문서입니다. 비식별화(de-identification) 조치 없이 실제 일탈 보고서를 학습 파이프라인에 그대로 투입할 수는 없습니다. 또한 익명화를 거치더라도 오염(contamination), 제품 회수(recall) 촉발, 데이터 무결성 위반과 같은 드물지만 치명적인 사건의 예제는 턱없이 부족할 가능성이 높습니다.

3단계 부트스트랩이 이 문제를 해결합니다:

1단계: 시드 데이터 구축 (수작업)

20~50건의 실제 문서를 익명화합니다. 회사명, 제품명, 배치 번호, 직원 이름을 제거하되 규제 언어와 문서 구조는 온전히 유지합니다. 이 데이터들이 골든 스탠더드(gold-standard) 예제가 됩니다.

2단계: 데이터 확장 (LLM 지원)

Llama 3.3 70B, GPT-4 또는 이에 상응하는 고성능 모델을 사용하고 실제 예제를 시드로 주입하여 추가 학습 데이터를 생성합니다. 프롬프트 패턴은 다음과 같습니다:

제공된 10개의 실제 일탈 예제를 바탕으로 장비 고장, 인적 오류, 자재 결함을 다루는 20개의 새롭고 다양한 일탈 케이스를 생성하십시오. 출력은 Instruction, Input, Output을 포함하는 Alpaca 포맷을 유지하십시오. Input에는 관찰 가능한 사실만 포함되어야 합니다. Output에는 GMP를 준수하는 평가 내용이 포함되어야 합니다.

제품 유형(생물학적 제제, 저분자 합성의약품, 의료기기), 제조 공정(무균 충전, 경구 고형제, 원료의약품/API), 고장 모드(장비, 환경, 절차, 자재), 규제 맥락(FDA, EU GMP, ICH) 전반에 걸쳐 다양성을 확보하십시오.

3단계: 검증 (전문가 검토)

모든 합성 예제는 데이터셋에 포함하기 전에 품질 또는 규제 분야의 SME(해당 분야 전문가) 검토를 거쳐야 합니다. 이 단계가 바로 유용한 학습 데이터와 규제 리스크를 갈라놓는 핵심 분수령입니다. 다음 항목을 점검하십시오:

  • 사내 시스템에 존재하지 않는 허구의 SOP 번호
  • 실존하지 않는 가이드라인 문서를 인용하는 규제 참조
  • 사내 매트릭스와 불일치하는 심각도 분류
  • 필수 조사 단계를 건너뛴 근본 원인 분석
  • 물리적으로 불가능한 수치 (절대 영도로 떨어지는 온도, pH 15 등)

품질 필터 (Quality Filters)

  1. 규제 인용 검증 — 인용된 모든 규정 조항 번호가 실제로 존재하는지 확인
  2. SOP 번호 검증 — 참조된 문서 ID가 실제 문서이거나 명확히 가상의 것인지 확인
  3. 심각도 보정 — 모든 항목을 무분별하게 ’치명적(Critical)’으로 라벨링하지 않도록 주의
  4. 균형 점검 (Balance check) — 데이터의 80%가 SOP라면 모델은 일탈 조사에 취약해짐
  5. 범용 데이터 혼합 — 지나치게 딱딱한 SOP 어투에 과적합(overfitting)되는 것을 방지하기 위해 10~20%의 범용 인스트럭션 데이터(ShareGPT, OpenOrca 등) 혼합

Unsloth 구현 파이프라인 (The Unsloth Implementation Pipeline)

1단계: Data Recipes에서 3개의 레시피 생성

Unsloth Studio Data Recipes에서:

  • 01_cpt_corpus — PDF/CSV에서 텍스트 추출, 오버랩을 적용한 청킹
  • 02_instruct_sft — 구조화된 데이터로부터 Alpaca 포맷 생성
  • 03_conversation_sft — 조사 기록으로부터 ChatML 멀티턴 생성

2단계: 챗 템플릿 적용

from unsloth.chat_templates import get_chat_template, standardize_sharegpt

tokenizer = get_chat_template(
    tokenizer,
    chat_template = "llama-3.1",  # or qwen-2.5, gemma-3
)

def formatting_prompts_func(examples):
    convos = examples["conversations"]
    texts = [
        tokenizer.apply_chat_template(
            convo, tokenize=False, add_generation_prompt=False
        )
        for convo in convos
    ]
    return {"text": texts}

dataset = standardize_sharegpt(dataset)
dataset = dataset.map(formatting_prompts_func, batched=True)

3단계: 순차 학습 진행

원시 말뭉치 대상 CPT → 계층 2 + 계층 3 결합 데이터 대상 SFT → DPO 정렬 (계층 4)

CPT 단계는 어휘를 가르칩니다. SFT는 결합된 인스트럭션 및 대화 데이터셋을 바탕으로 작업 실행 능력을 가르칩니다. DPO는 판단력을 가르칩니다. 각 계층은 이전 계층을 디딤돌 삼아 구축됩니다.

4단계: 검증 세트를 통한 평가

모델이 한 번도 접하지 못한 실제 시나리오로 구성된 검증 세트(validation set)를 전체 데이터의 5% 규모로 떼어둡니다. 특히 다음 사항을 집중적으로 테스트하십시오:

  • 모델이 정확한 규정 번호를 인용하는가?
  • 정보가 불충분할 때 단호히 거절하는가?
  • 조사 시나리오에서 상황을 명확히 하기 위한 질문을 던지는가?
  • 구조화된 작업에 대해 파싱 가능한 JSON을 생성하는가?
  • 심각도 등급을 정확하게 분류하는가?

데이터셋 규모 권장사항 (Dataset Sizing Recommendations)

데이터셋 최소 수량 (Minimum) 최적 수량 (Optimal) 비고
도메인 말뭉치 (CPT) 50K 토큰 500K+ 토큰 많을수록 좋음 (어휘 학습 목적)
SOP/WI 인스트럭션 200건 1,000건+ 다양성을 위해 60% Alpaca, 40% 원시 텍스트
일탈 조사 300건 2,000건+ 70% ChatML 멀티턴, 30% Alpaca
CAPA 작성 200건 1,500건+ 80% ChatML, 20% 구조화된 JSON
변경 관리 150건 800건+ 영향 평가 및 결재 라우팅 혼합
선호도/DPO 200건 400건+ 데이터 무결성 및 거절 행동에 집중
분류 500건 2,000건+ 심각도 등급, 문서 유형
안전 거절 50건 200건+ 중요 — 정보 날조 방지

황금률: 철저히 검토된 깨끗한 1,000개의 예제가 노이즈 가득한 10,000개의 예제보다 훨씬 낫습니다. GxP 규정에 따라 프로덕션 환경의 모든 출력물은 여전히 사람(QA 담당자)의 검토를 거쳐야 합니다.

데이터셋 구성 비율 (The Dataset Mix Ratio)

데이터셋 유형 비중
인스트럭션 (Alpaca) 40%
멀티턴 ChatML 40%
선호도 / DPO 20%

문서 유형별 균형:

  • 40% SOP / 작업 지침서(WI)
  • 30% 일탈(Deviation)
  • 20% CAPA
  • 10% 변경 관리(Change Control)

어느 한 문서 유형이 과도하게 지배하면 모델은 다른 유형에 취약해집니다. 80%의 SOP로만 학습된 모델은 수려한 절차서는 작성하겠지만 엉망진창인 조사를 수행하게 됩니다.

시각적 작업 지침서를 위한 비전 모달리티 (Vision Modality for Visual Work Instructions)

작업 지침서에 갱의 다이어그램, 장비 사진, 공정 흐름도 등이 포함되어 있다면 멀티모달 학습으로 확장할 수 있습니다:

{
  "role": "user",
  "content": [
    {"type": "text", "text": "Describe this gowning step and identify any compliance issues."},
    {"type": "image", "image": "path/to/gowning_diagram.png"}
  ]
}

이를 위해 Unsloth의 FastVisionModel을 사용하십시오. 텍스트 기반 데이터셋보다는 우선순위가 낮지만, 시각 자료 비중이 높은 문서를 다루는 조직에는 매우 유용합니다.

관련 오픈소스 프로젝트 (Relevant Open-Source Projects)

GxP-Struct (github.com/gauravpandey36/gxp-struct)는 SOP를 결정론적 규칙 엔진을 갖춘 기계 가독형 .gxp 포맷으로 변환합니다. 분류 등급, 의무 기한, 지역별 예외 사항 등 엄격한 하드 룰은 LLM을 완전히 우회하여 결정론적으로 평가됩니다. 모호한 질문은 RAG로 폴백 처리됩니다. 여기서 나오는 구조화된 출력은 계층 2 인스트럭션 태스크를 위한 고품질 학습 데이터로 활용될 수 있습니다.

NYOS APR Data Generator (github.com/ouzema/nyos-apr-data-generator)는 제조, QC, 안정성 시험, 환경 모니터링, 불만, CAPA 및 공급업체 데이터 등 제약 분야의 연간 제품 품질 평가(Annual Product Review, APR) 합성 데이터를 생성합니다. 계층 1 도메인 말뭉치를 부트스트래핑하는 데 유용합니다.

CAPA Deviation Reasoning Agent (github.com/maryumjam/capa_deviation_reasoning_agent)는 일탈 분석 및 CAPA 권고를 위한 검색 증강(RAG) 에이전트입니다. 이 프로젝트의 프롬프트 엔지니어링 패턴은 계층 3 대화 데이터셋 설계에 유용한 통찰을 제공합니다.

모델을 망치는 7가지 함정 (Seven Pitfalls That Will Ruin Your Model)

  1. 추론 시점의 포맷 불일치. 학습은 Alpaca로 진행하고 추론은 ChatML로 실행하면 일관되지 않은 동작이 발생합니다. 손실 곡선(loss curve)은 정상적으로 보이지만 모델은 엉뚱하게 행동합니다. 일관성을 유지하십시오. 데이터셋의 모든 예제는 동일한 포맷을 따라야 합니다.

  2. 템플릿 언어에 대한 과적합. 모든 학습 예제가 동일한 SOP 템플릿만 사용하면, 모델은 추론 엔진이 아니라 단순한 ’양식 채우기 기계’로 전락합니다. 데이터 소스를 다양화하십시오.

  3. 환각된 규제 인용. 합성 데이터로 학습된 모델은 규정 조항 번호를 지어낼 위험이 있습니다. 실제 규정 텍스트를 대조하여 모든 인용을 검증하십시오.

  4. 거절 학습 누락. 모델이 “모르겠습니다” 또는 “품질 부서에 문의하십시오”라고 답해야 하는 예제가 없으면, 데이터가 불충분할 때 당당하게 거짓 답변을 꾸며내게 됩니다.

  5. 범용 데이터 혼합 간과. GxP 데이터로만 배타적으로 학습시키면 자연스러운 대화를 처리하지 못하는 경직되고 로봇 같은 결과물이 나옵니다. 10~20%의 범용 인스트럭션 데이터를 반드시 섞어주십시오.

  6. 단일 턴 편향(Single-turn bias). 품질 업무는 본질적으로 반복적(iterative)입니다. Alpaca 포맷으로만 학습하면 일탈 및 CAPA 업무의 본질인 ‘조사 대화’ 능력을 놓치게 됩니다.

  7. RAG와 파인튜닝의 혼동. RAG는 최신의 사실 정보를 제공합니다. 파인튜닝은 행동 방식을 가르칩니다. 둘은 서로 다른 목적을 수행하므로 독립적으로 설계한 뒤 추론 시점에 결합해야 합니다.

결론 (The Bottom Line)

문서 유형 중심에서 행동 역량 중심으로 데이터셋 아키텍처를 전환하는 것이야말로, 규정을 준수하는 것처럼 보이는 문서를 흉내 내는 모델과 품질 전문가를 실제로 보조할 수 있는 모델을 가르는 핵심 차이입니다. RAG는 모델에게 최신 SOP를 제공합니다. 파인튜닝은 QA 전문가가 그 SOP를 바탕으로 어떻게 사고하는지 — 언제 질문을 던지고, 언제 에스컬레이션하며, 언제 거절하고, 언제 더 깊이 파고들어야 하는지 — 를 가르칩니다.

규모를 확장하기 전에 먼저 고품질의 인스트럭션 데이터 1,000건으로 시작하십시오. 모든 합성 예제를 실제 규정과 대조하여 검증하십시오. 어휘 습득을 위한 CPT를 먼저 진행하고, 태스크 실행을 위한 SFT를 수행한 다음, 올바른 판단력을 위한 DPO를 적용하십시오. 그리고 적격한 자격을 갖춘 인력(Qualified Person/QA)이 산출물을 검토하지 않은 상태에서는 절대로 배포하지 마십시오. 이는 단순한 기술적 한계가 아니라 규제적 필수 요건입니다.

이 4개의 계층은 선택 사항이 아닙니다. 각 계층은 다른 계층이 채울 수 없는 고유한 공백을 메웁니다. 말뭉치 계층을 건너뛰면 모델은 일반적인 일상 언어로 말합니다. 인스트럭션 계층을 건너뛰면 구조화된 산출물을 만들지 못합니다. 대화 계층을 건너뛰면 심층 조사를 수행할 수 없습니다. 선호도 계층을 건너뛰면 올바른 판단을 내릴 수 없습니다.

4개 계층을 모두 구축하십시오. 순차적으로 학습시키십시오. 해당 분야 전문가(SME)와 함께 검증하십시오. 이것이 바로 LLM을 품질 전문가가 진정으로 신뢰할 수 있는 도구로 탈바꿈시키는 방법입니다.


연구 노트: [[Fine-Tuning-Datasets-Life-Science-Quality-Documents-Deep-Analysis]]

관련 글