데이터 큐레이션

  • (1) 데이터 품질
    • 적은 양의 고품질 데이터가 많은 양의 노이즈가 있는 데이터보다 더 좋은 성능을 낼 수 있음
    • 고품질 데이터의 특성
      • 관련성 (내용적으로)
      • 작업 요구사항과의 alignment e.g. 창의적인 답변을 요구하는가, 간결함을 요구하는가, 점수와 근거를 모두 요구하는가 등등
      • 일관성: 예시들 간, 주석자들 간 일관적이어야 (좋은 주석 가이드라인이 필요)
      • 올바른 형식: 모델이 기대하는 형식을 따라야 하고 불필요한 형식 토큰은 제거해야 함
      • 충분한 고유성: 중복은 편향을 만들고 데이터 오염을 일으킬 수 있음
      • 규정 준수
  • (2) 데이터 커버리지
    • 애플리케이션마다 필요한 다양성의 종류는 다를 수 있음 - 지시의 길이, 오타 포함 여부, 언어(다국어/프로그래밍 언어), 말투 등
    • 얼마나 다양한 도메인의 조합으로 데이터를 쓸 것인지는 모델마다, 학습 단계(사전학습/지도 파인튜닝/선호도 파인튜닝)마다 달라질 수 있음
      • 여기서 도메인이란 일반 상식(영어), 수학과 추론, 코딩, 다국어 등
      • 일반적으로 수학/코드가 자연어 텍스트보다 모델의 추론 능력을 키우는데 효과적이라고 하고 라마3 연구자들도 소량의 코드/수학 데이터로 모델을 annealing하는 게 모델 성능 향상의 효과적이라고 보고
      • 적절한 데이터의 조합은 실제 어플리케이션의 사용 패턴에 맞춰 선택하거나 실험을 통해 최적값을 찾는 것도 가능함
  • (3) 데이터 양
    • 품질과 커버리지 외에도 필요한 데이터 양을 결정할 수 있는 요소들
      • 파인튜닝 기법: (지시,응답) 쌍이 수만개 이상이라면 전체 파인튜닝이 가능하고 수백~수천 개라면 PEFT가 효과적
      • 과제 복잡성: 간단한 과제일수록 적은 데이터로 충분
      • 기본 모델의 성능: 원하는 성능에 가까울수록 필요한 예시가 적을 것
    • 데이터가 적을 때는 고급 모델이 더 좋고, 많을 때는 모델 간 차이가 없어진다 = 즉 데이터가 적다면 고급 모델 + PEFT, 많다면 작은 모델 + 전체 파인튜닝
    • 품질이 낮거나 비교적 관련성이 떨어지는 데이터로 파인튜닝 한 후 고품질 데이터로 파인튜닝할 수도 있음
      • 자기지도학습 지도학습, 저관련 데이터 관련 데이터, 합성 데이터 실제 데이터
    • 대규모 데이터셋 구축 전에 잘 만들어진 소규모 데이터셋(50개 정도)으로 시작해서 파인튜닝이 모델을 개선할 수 있는지 확인
      • 데이터셋 크기에 따른 성능 증가폭을 보면서 데이터셋을 더 키울지 말지를 결정 (대부분의 경우 일정 이상으로 키우면 성능 증가폭이 평평해진다)
  • 데이터 수집과 주석
    • 자체 애플리케이션에서 사용자가 만든 데이터가 가장 완벽하게 관련성이 있고 과제와 일치
    • 공개 데이터셋 리소스 확인
    • 주석 가이드라인은 전체 AI엔지니어링 파이프라인에서 가장 까다로운 부분일 수 있음

데이터 합성과 증강

  • 합성 데이터가 필요한 이유
    • 데이터 양/커버리지를 늘리기 위해 (특히 기존 데이터가 부족한 부분을 채우는 맞춤형 데이터를 만들어내기)
    • 데이터 품질 향상 (일부 케이스에서는 합성 데이터가 사람이 만든 데이터보다 품질이 좋음 e.g. 도구 사용, 복잡한 수학 문제, 선호도 데이터)
    • 프라이버시 문제 해결
    • 모델 증류
  • AI 기반 데이터 합성
    • 보통 사전학습에서보다 사후학습에서 더 자주 쓰임 (의도적으로는)
    • 지시 데이터 합성
      • 각 예시는 지시와 응답을 포함 (둘 다 AI/사람이 만들거나 지시는 AI가 만들고 사람이 응답하거나 그 반대도 가능)
      • reverse instruction - 스토리, 책, 위키 등 긴 고품질 컨텐츠를 가져와서 AI로 그런 콘텐츠를 유도할 수 있는 프롬프트 생성 (긴 고품질 응답을 만들 때 발생하는 환각 이슈를 회피)한 뒤 이를 가지고 파인튜닝
      • back-translation : A 문장을 B 언어로 번역한 뒤 다시 원래 A 언어 문장으로 만든 뒤 비교하는 방식
      • 라마3의 경우 코딩 지시 데이터를 합성할 때 AI로 문제 생성 해결책 생성 파서/린터로 분석, 유닛테스트로 런타임 실행 오류 잡기 모델에 코드 수정 프롬프트 반복
    • 데이터 검증
      • AI Verifier (범용 AI 평가자거나 특화된 채점기)
      • 어떤 부분을 검증하냐에 따라서 - 사실적 일관성이거나 아니면 실제 데이터랑 얼마나 비슷한지, 아니면 특정 주제와 관련되기를 바라는지
    • 한계
      • 품질 관리 (garbage in, garbage out)
      • 피상적 모방 (실질적 문제 해결 능력은 없으면서 정답처럼 보이는 답만 만들어낼 수 있음 - 환각)
      • 모델 성능 저하
        • AI 생성 데이터를 반복적으로 학습에 사용하는 것은 model collapse을 유발
        • 합성 데이터를 실제 데이터와 섞으면 피할 수 있다는 주장도 있음
      • 불분명한 데이터 계보로 인한 이슈 (선행 모델의 저작권 위반 또는 데이터 리키지 등)

데이터 처리

    • 데이터셋의 세부 사항을 공개한 모델 논문을 참고하기
    • 효율적으로 진행하자 - 시간과 컴퓨팅 자원을 절약할 수 있는 순서대로
    • 원본 사본은 항상 보관하기
  • 검사
    • 토큰 분포, 입력 길이, 응답 길이 등의 통계
      • 데이터 출처/시간/주석자 등으로 나눠서 확인했을 때 이상치나 특정 패턴이 있는지
    • 탐색 도구의 도움도 받을 수 있지만 일정 시간 이상 투자해서 직접 들여다보는 게 중요
      • 예시들이 말이 되는지, 주석이 신뢰할 만한지, 얼마나 고유한지 등
  • 중복 제거
    • 여러 연구가 학습데이터 중복은 성능에 악영향을 준다는 사실을 보여줌
      • e.g. 데이터의 0.1%를 100번 반복하면 나머지 90% 학습 토큰이 고유해도 8억 파라미터 모델 성능이 4억 파라미터 수준으로 떨어짐 src
    • 중복의 유형: 전체 문서 중복 / 문서 내 중복 / 문서 간 중복 어떤 걸 중복으로 볼 건지
    • 중복 제거 방법: pair-wise하게 유사도 점수 계산(큰 데이터셋에서는 비용이 많이 듦), 해싱(버킷 내에서만 확인), 차원 축소 후 pair-wise
    • 라이브러리: dupeGuru, Dedupe, datasketch, TextDistance, TheFuzz, deduplicate-text-datasets
  • 정리 및 필터링
    • 불필요한 형식 토큰 없애기(e.g. HTML 태그)
    • 민감한 데이터, 저작권이 있는 데이터, 유해한 데이터 등은 제거
    • 데이터가 너무 많을 때(컴퓨팅 자원에 비해) 중요도 샘플링이나 능동 학습 기법을 사용해서 일부를 선별할 수 있음 - 좋은 데이터 가지치기 지표를 찾으면 자원 비용을 크게 줄일 수 있음 src
  • 형식 맞추기
    • 파인튜닝할 때 특정 템플릿에 맞추고, 이때 토큰 비용을 줄이는 방식으로
    • 사용할 때도 프롬프트가 파인튜닝 데이터 형식과 일치하도록