본문 바로가기

스타트업 투자/데이터 + 테크

패스트캠퍼스 환급챌린지 42일차 : 데이터 전처리

by Sungwook Choi 2025. 5. 12.

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

*_1. 학습 인증샷 4장 이상 포함
*_① 오늘자 날짜, 공부 시작 시각 포함 사진 1장

② 오늘자 날짜, 공부 종료 시각 포함 사진 1장

③ 1개 클립 수강 인증 사진 (강의장 목록 캡쳐, 강의 내용이 담긴 수강화면이 보이지 않도록) 1장

④ 학습 인증샷 1장 이상 (ex. 필기 촬영, 작업물, 등)

2. 학습 후기 700자 이상 (공백 제외)

  • 전처리 이해하기

input_ids와 labels는 어떻게 생성되는가?

LLM 학습에서 input_idslabels는 모델의 학습 목표에 따라 생성

예를 들어, 다음과 같은 대화 데이터를 모델이 학습해야 한다고 가정:

  • 시스템 프롬프트: 당신은 친절하고 도움이 되는 AI 어시스턴트입니다.
  • 사용자 메시지: 안녕하세요, 오늘 날씨는 어떤가요?
  • 어시스턴트 응답: 안녕하세요! 오늘 날씨는 맑고 화창합니다.

LLaMA 3에서는 다음과 같은 템플릿 구조를 사용(줄바꿈 포함):

<|begin_of_text|><|start_header_id|>system<|end_header_id|>
당신은 친절하고 도움이 되는 AI 어시스턴트입니다.<|eot_id|><|start_header_id|>user<|end_header_id|>
안녕하세요, 오늘 날씨는 어떤가요?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
안녕하세요! 오늘 날씨는 맑고 화창합니다.<|eot_id|>

이 전체 텍스트는 토크나이저에 의해 정수 시퀀스로 변환
(실제와 다르고 가정하여 정수를 맵핑하겠습니다.)

먼저 모든 특수 토큰들은 아래의 고유 ID를 가진다고 가정

  • <|begin_of_text|> = 토큰 ID 1
  • <|start_header_id|> = 토큰 ID 2
  • <|end_header_id|> = 토큰 ID 4
  • 줄바꿈 = 토큰 ID 5
  • <|eot_id|> = 토큰 ID 10

역할 토큰들은 아래의 고유 ID를 가진다고 가정해봅시다.

  • system = 토큰 ID 3
  • user = 토큰 ID 11
  • assistant = 토큰 ID 18

전체 통합된 input_ids는 다음과 같습니다:
input_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 11, 4, 5, 12, 13, 14, 15, 16, 17, 10, 2, 18, 4, 5, 19, 20, 21, 22, 23, 10]

각 부분을 분리하면:

  • 시스템 프롬프트 부분: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  • 사용자 메시지 부분: [2, 11, 4, 5, 12, 13, 14, 15, 16, 17, 10]
  • 어시스턴트 응답 부분: [2, 18, 4, 5, 19, 20, 21, 22, 23, 10]

모델이 예측해야 할 영역은 assistant의 응답 부분인 안녕하세요! 오늘 날씨는 맑고 화창합니다.에 해당하는 토큰들입니다. 따라서 labels는 다음과 같이 설정됩니다:

labels = [-100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, 19, 20, 21, 22, 23, 10]

여기서 주목할 점:

  1. 시스템 프롬프트와 사용자 메시지에 해당하는 모든 토큰(줄바꿈 포함)은 -100으로 마스킹됩니다.
  2. 어시스턴트 헤더와 첫 줄바꿈 토큰도 -100으로 마스킹됩니다.
  3. 실제 어시스턴트 응답 내용(19-23)과 마지막 종료 태그(10)만 원래 토큰 ID를 유지합니다.

이처럼 labels는 모델이 실제로 생성해야 할 출력 부분만을 포함하고, 나머지 부분은 -100으로 채워져 손실 계산에서 제외됩니다. 이를 통해 모델은 입력(시스템 프롬프트+사용자 질문)을 기반으로 적절한 응답을 생성하는 방법을 학습합니다.

학습 과정에서는:

  1. 모델에 input_ids 전체를 입력으로 제공
  2. 모델은 각 위치에서 다음 토큰을 예측
  3. 손실 계산 시 labels-100이 아닌 위치에서만 오차를 계산
  4. 이를 통해 모델은 주어진 맥락(시스템 프롬프트와 사용자 질문)에 대해 적절한 응답을 생성하는 방법을 학습

url : https://abit.ly/lisbva

댓글