본문 바로가기
C.W.K.
Stream
Lesson 04 of 08 · published

dataset.map(): 캐시되는 변환

~30 min · datasets, map

Level 0스카우트
0 XP0/50 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

map()이 전처리의 중심인 이유

ds.map(fn)은 각 행이나 배치에 함수를 적용하고 새 데이터셋을 돌려줘. pandas의 apply()와 닮았지만 함수 소스를 반영한 fingerprint로 결과를 캐시하고, num_proc=N으로 여러 프로세스를 쓸 수 있다는 차이가 있어.

무거운 변환은 배치로 묶어

기본값은 행 단위지만 tokenizer나 NLP 전처리는 대개 batched=True에서 훨씬 빨라. 함수는 열별 값 목록을 담은 dict를 받고 같은 구조로 결과를 돌려주며, 라이브러리가 배치를 나누는 일은 맡아 줘.

학습기에 넘길 열만 남겨

텍스트를 input_idsattention_mask로 바꾼 뒤 원본 문자열 열을 그대로 두면 Trainer가 예상하지 못한 값을 받아 실패할 수 있어. 변환이 끝난 열은 remove_columns=['text']처럼 명시적으로 제거해 입력 계약을 분명하게 만들어.

Code

Batched 토크나이즈·python
from datasets import load_dataset
from transformers import AutoTokenizer

tok = AutoTokenizer.from_pretrained("distilbert-base-uncased")
ds = load_dataset("stanfordnlp/imdb", split="train")

def tokenize(batch):
    return tok(batch["text"], padding="max_length", truncation=True, max_length=512)

tokenized = ds.map(
    tokenize,
    batched=True,
    batch_size=1000,
    num_proc=4,
    remove_columns=["text"],   # trainer 호환에 critical
)
print(tokenized)
print(tokenized[0].keys())  # input_ids, attention_mask, label
함수 바꿀 때 캐시 invalidation·python
# datasets 가 함수 source 로 캐시 키.
# 함수 살짝 tweak 하고 kwargs 안 바꾸면 결과 STILL stale.
# load_from_cache_file=False 로 강제 재실행:

tokenized = ds.map(tokenize, batched=True, load_from_cache_file=False)

# 또는 캐시 상태 inspect:
print(ds.cache_files)  # (filename, range) 튜플 리스트

External links

Exercise

stanfordnlp/imdb train split 을 batched=Falsebatched=True, batch_size=1000 둘 다로 토크나이즈. 시간 측정. 다시 돌려 캐시 hit 확인 (거의 instant 여야). 토크나이저 max_length 수정, 재실행, 캐시 invalidate 확인.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.