파인튜닝을 성공적으로 수행하기 위해서는 어떤 데이터를 어떻게 만들고, 어떻게 선별·정제할지가 매우 중요하다.
특히 사전에 학습된 언어 모델(LLM)에 원하는 기능이나 성능을 얹기 위해서는 고품질의 데이터를 충분히 확보해야 한다. 다음은 데이터 합성 및 관리 과정에서 고려해야 할 주요 사항이다.
Survey 참고: https://youngerjesus.tistory.com/281
어떤 데이터가 필요한가?
분야별 요구 사항 파악:
- 예:
- 수학: 논리·추론 능력
- 의학: 상담 능력
- 법률: 정확하고 격식 있는 표현
데이터의 목표:
- 다양성(Diversity): 하나의 상황이나 테스크에 국한되지 않고 폭넓은 경우를 다룸
- 고품질(Quality): 데이터가 실제 도움이 되고 올바른 내용을 담고 있음
- 충분한 양(Quantity): 일정 규모 이상의 데이터를 확보해야 통계적 학습이 가능
고품질 데이터 필터링
중복 및 유사 데이터 제거:
- 명확한 성공/실패 판단 지표가 있는 경우:
- 예) 코드 생성: 제대로 동작하는 코드 vs. 오류가 있는 코드
- 실패 데이터를 제거하거나, 실패와 성공을 구분해 데이터에 라벨을 다는 등 필터링이 가능
- Data Pruning 기법
- 클러스터링 + 차원 축소 + Pruning Metric으로 유사도가 높은 데이터(중복 데이터) 제거
- 합성 데이터 방식으로 수집 시, 비슷한 지시문·응답이 대량으로 생기는 경우가 많아 꼭 필요한 작업
- ex) HDBSCAN, KMeans, Agglomerative Clustering 등으로 군집화 후 유사 데이터 정리
- 클러스터링을 하는 이유 자체가 1:1 비교가 이제는 비효율적이기 때문임. 그러니 대규모 데이터에서 적합할 것.
- MinHashLSM + Jaccard 유사도 + Exact Deduplication
- NVIDIA 사례: 텍스트 중복을 빠르게 잡아내 제거
- 복붙, 어휘적인 겹침이 많은 경우 걸러낼 수 있음.
- 코사인 유사도 (임베딩 기반)
- 텍스트 임베딩(Transformer/BERT 등) 계산- 벡터 간 각도로 의미적 유사도 측정하는 방법
- 패러프레이징, 동의어, 유사한 문맥등을 걸러낼 수 있음.
- LLM 을 이용한 비교.
- LLM 을 이용해서 비교하는 방법.
- 요약을 해서 비교하는 방법 테크닉도 있다.
- 주로 데이터가 상대적으로 작고 품질을 높이고 싶을 때 적합
데이터 품질 평가 지표 수립:
- 보상 모델을 이용한 1차 평가 지표:
- 정확성(Correctness), 유용성(Helpfulness), 일관성(Coherence), 복잡성(Complexity), 표현 풍부도(Verbosity) 등
- 이는 데이터의 표면적인 측면을 평가하는 거임. 내재적인 측면을 필터링 하는건 아님. 그래서 이런 보상 모델의 평가 방법은 범용적으로 사용해볼만할 것.
- 다양한 연구 사례:
- ShareGPT4v: 캡션 길이(짧은 문장은 저품질로 간주)
- UltraChat: 대화 데이터에서 어휘적·주제적 다양성을 평가
- Genie: QA, 요약, 정보 추출 등 답변 형식 준수와 근거의 정확성, 자연스러움을 평가
- Self-Instruct: 지시문 유사도 검사, 지시문의 길이(너무 짧거나 긴 경우 제거), 명사-동사 구조 다변성, 샘플링을 통한 수작업 품질 검사
- What Makes Good Data for Alignment: 데이터의 복잡도(Complexity), 품질(Quality), 다양성(Diversity)으로 평가
- NVIDIA: Helpfulness, Correctness, Coherence, Complexity, Verbosity 등을 1차 필터링 지표로 삼음
- Alpagasus: 고성능 모델로 평가하여 점수(예: 5점 만점 중 4.5점 이상이면 통과)
- Rejection sampling Fine-Tuning (RFT): 수학적 추론 과정이 올바로 포함된 데이터를 남김
- ReST 기법: (수학·코딩처럼) 정답 여부가 명확히 판단되는 경우 유효한 데이터만 남길 때 성능 향상
데이터 양(스케일) 고려:
- LIMA 논문
- 모델의 능력은 사전학습으로 대체로 결정되며, 고품질 데이터 2,000개 정도만으로도 충분한 성능 향상을 얻을 수 있다고 주장 (사실 1000개 인데, 2000개면 더 학습의 안정성이 높아진다고)
- 데이터 양을 무조건 늘리는 것만으로는 한계가 있음
- ‘적은 양의 고품질 데이터’가 ‘많은 양의 저품질 데이터’보다 효과적일 수 있음
- 데이터 중복 제거와 스케일의 균형
- 대규모 데이터라도 중복 제거와 필터링 과정을 충분히 거쳐야 진짜 “의미 있는” 데이터만 남김
고품질 데이터 생성 기법
예시(시드 데이터) 제공을 통한 합성
- 예시 제공의 중요성
- Genie: 4개 예시
- Self-Instruct: 8개 예시 (6개 인간 작성, 2개 모델 생성)
- Synthetic Data Generation: “PubMed 저널 스타일” 등 특정 스타일 모사를 위해 예시 제시
- 시드 데이터 확보 경로
- ChatGPT 등 LLM을 직접 활용해 유형별로 시드 생성 (다만 이 방법은 중복 우려함)
- 인간이 직접 만든 시드
- 기존 데이터셋에서 추출
- 시드 데이터도 중복·편향이 없도록 다양하게 구성
- ex) UltraChat: 시, 수필, 스토리, 에세이 등 글쓰기 형태의 시드를 폭넓게 준비
- 클러스터링 알고리즘 or 텍스트 임베딩을 이용해서 데이터의 다양성을 평가할 수 있음.
외부 데이터 활용
- 원본 데이터 정제 후 활용
- Genie: 노이즈 제거(HTML 태그, 불필요 문구 등) → 구조화(Markdown 형식 등) → 합성
- OSS-INSTRUCT: 오픈소스 코드 스니펫 참조해 코드 관련 지시문 생성 (편향 최소화)
- 개인정보 보호
- 원본 데이터를 그대로 주지 않고 필요한 정보만 발췌해서 새로 생성하도록 유도
고성능 모델을 활용:
- 강력한 사전학습 모델 활용
- GPT 계열 등 범용성이 높은 모델을 활용해 합성
- 도메인 특화 모델에 파인튜닝해 세분화된 고품질 데이터 생성
Prompt 기법:
- CAMEL(Multi-Agent 상황극)을 이용해 사람이 실제 대화하듯 자연스러운 데이터를 생성
- Evol-Instruct처럼 기존 지시문을 바탕으로 더 복잡하고 다양한 지시문을 재생성
- Prompt Template 설계를 LLM에게 맡겨 자동화 가능(라운드 단위로 반복)
- 모델이 스스로 “Chain-of-Thought(CoT) + Self-consistency”로 자세한 풀이 과정을 작성 → 고품질 정답+추론 근거를 만들고, 이를 미세조정 데이터로 사용
- Reject Sampling Fine-Tuning(RFT): 모델이 여러 가지 추론 경로를 시도해보고, 가장 정확해 보이는 답변·해설만 골라 데이터셋화. 이후 그 고품질 추론 과정을 모델이 재학습함으로써, 추론 능력이 한 번에 개선
다양한 데이터 생성 기법:
- 다양한 시드 데이터를 활용:
- 모델에게 예시를 주고 “이런 스타일로 생성하라”는 형태의 프롬프트를 사용하면, 훨씬 구체적이고 일관성 있는 데이터를 얻을 수 있음.
- 하나의 시드 데이터를 다양한 테스크 용으로 만들 수도 있음.
- 고성능 LLM + Prompt 기법을 이용해서 생성
- 다양한 난이도, 형식, 주제 설정:
- 쉬운 질문부터 고난도 추론 문제까지
- 단답형 응답, 장문 서술, 표 형식, JSON 구조 등
- 범용성 있는 LLM을 목표로 한다면, 시사·문화·학술·과학·엔터테인먼트 등 다양한 분야를 포괄
- 도메인 특화 모델이라면 해당 분야 내에서도 여러 서브도메인을 아우르는 데이터를 준비
- Iterative Generation(반복적 생성)
- 한 번에 대량의 데이터를 생성하는 대신, 여러 라운드에 걸쳐 모델이 생성한 데이터를 평가·선별·개선하면서 재생성하는 방식
- 각 라운드마다 이전 단계에서 누락된 유형, 중복 제거, 품질 향상 등을 수행하여 점진적으로 데이터 풀을 강화
파인튜닝 전략과 데이터 구성
파인튜닝 범위 결정:
- Single Round vs. Iterative
- 한 번에 큰 규모의 합성 데이터를 만들어 파인튜닝할지, 여러 라운드에 걸쳐 데이터 품질을 점진적으로 개선해 나갈지 결정
- 테스크의 개수
- 모델 크기가 작다면 한 가지 테스크에 집중하는 편이 나을 수 있음(모델 용량 문제)
- 여러 테스크를 포함하면 일반화 능력이 좋아지는 장점도 있음
- Longpre 등(2023) 연구: 지시 튜닝 작업 종류가 많아질수록 배우지 않은 테스크에 대한 일반화가 향상
- PEFT(P-Tuning, LoRA 등)
- 1,000개 정도의 고품질 데이터로도 원하는 성능을 달성하는 경우가 보고됨
- 생성 데이터의 적정량
- Self-Instruct: 16K 데이터까지는 성능 향상이 뚜렷했으나 그 이후로는 정체
- Synthetic Data Generation: 35K 이상부터 성능 향상이 미미해지는 등 스케일링 한계 존재
NVIDIA NeMo Curator 데이터 파이프라인 예시
NVIDIA에서는 데이터 파이프라인을 크게 아래 네 단계로 구성했다.
- (1) Extract
- 원본 데이터를 수집·추출
- (2) Clean & Unify & Reformat
- 노이즈 제거, 통일된 형식으로 변환
- (4) Filter
- 품질 기준(Helpfulness, Correctness, 등)에 따라 1차 필터링
- 보상 모델·LLM 등을 활용한 추가 필터링(주관적·객관적 평가 모두 고려)
- (4) Deduplicate
- MinHashLSM, Jaccard 유사도, Exact Deduplication 등을 이용해 중복 제거
'Generative AI > Data' 카테고리의 다른 글
LLM Twin 프로젝트로 설명하는 데이터 수집 파이프라인 (0) | 2025.02.06 |
---|---|
NVIDIA: Curating Trillion-Token Datasets: Introducing NVIDIA NeMo Data Curator (0) | 2025.01.26 |
NVIDIA: Synthetic Data Generation (0) | 2025.01.25 |
What Makes Good Data For Alignment? A Comprehensive Study of Automatic Data Selection In Instruction Tuning (0) | 2025.01.25 |
Alpagasus: Traning A better Alpaca with Fewer Data (0) | 2025.01.23 |