Data Collator란?Data Collator는 데이터 전처리의 한 단계로, 배치(batch)로 묶을 때 필요한 작업을 자동으로 처리해주는 데이터 수집기입니다. 주로 언어 모델 훈련 과정에서 샘플을 배치로 묶는 과정에서 사용됩니다.
[MASK]로 바꾸는 Masked Language Modeling(MLM)이 필요합니다.Dataset 객체로 로드합니다.DataCollatorWithPaddingfrom transformers import AutoTokenizer, DataCollatorWithPadding
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
collator = DataCollatorWithPadding(tokenizer=tokenizer)
# 예시 데이터
data = [
{"input_ids": tokenizer("Hello world!")["input_ids"]},
{"input_ids": tokenizer("Hi.")["input_ids"]}
]
# 패딩 처리된 배치 생성
batch = collator(data)
print(batch)
{
'input_ids': [[101, 7592, 2088, 102], [101, 7632, 102, 0]],
'attention_mask': [[1, 1, 1, 1], [1, 1, 1, 0]]
}attention_mask에서 패딩된 부분은 0으로 처리됩니다.DataCollatorForLanguageModelingfrom transformers import DataCollatorForLanguageModeling, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
collator = DataCollatorForLanguageModeling(
tokenizer=tokenizer, mlm=True, mlm_probability=0.15
)
# 예시 데이터
data = [
{"input_ids": tokenizer("I love NLP.")["input_ids"]},
{"input_ids": tokenizer("Transformers are amazing.")["input_ids"]}
]
# 마스킹된 배치 생성
batch = collator(data)
print(batch)
{
'input_ids': [[101, 1045, 2293, 103, 102], [101, 103, 2024, 6429, 102]],
'labels': [[-100, 1045, 2293, 10300, 102], [-100, 2006, 2024, 6429, 102]]
}labels에는 원래 정답 토큰이 저장됩니다. 이는 마스킹된 토큰을 예측하도록 모델을 학습시키는 데 사용됩니다.Hugging Face의 Trainer 클래스에 Data Collator를 전달하면 훈련 과정에서 자동으로 적용됩니다.
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir="./results",
per_device_train_batch_size=8,
num_train_epochs=3
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
data_collator=DataCollatorWithPadding(tokenizer=tokenizer)
)
# 훈련 시작
trainer.train()
Trainer 클래스에 전달하면 훈련 시 자동으로 배치 작업을 수행합니다.이제 Data Collator가 무엇이고, 언제 사용되는지 이해되셨나요? 추가 질문이 있다면 언제든지 말씀해 주세요!