data collator

boooookreeeed·2024년 10월 30일

Data Collator란?

Data Collator데이터 전처리의 한 단계로, 배치(batch)로 묶을 때 필요한 작업을 자동으로 처리해주는 데이터 수집기입니다. 주로 언어 모델 훈련 과정에서 샘플을 배치로 묶는 과정에서 사용됩니다.


1. Data Collator의 역할

왜 필요한가?

  1. 서로 다른 길이의 텍스트를 한 배치로 묶을 때, 모든 문장의 길이를 맞춰야 합니다.
    • 예를 들어, 배치에 포함된 문장의 길이가 각각 다르다면, 패딩(padding)을 통해 같은 길이로 맞춰야 합니다.
  2. 토큰 마스킹(masking):
    • 일부 모델(예: BERT)에서는 학습 중 일부 토큰을 [MASK]로 바꾸는 Masked Language Modeling(MLM)이 필요합니다.
  3. 효율적인 배치 처리:
    • 훈련 중 매번 배치를 수동으로 전처리하기 번거롭기 때문에, Data Collator가 이 작업을 자동화합니다.

2. Data Collator가 사용되는 단계

언어 모델 훈련 과정:

  1. 데이터 로드: 데이터를 Dataset 객체로 로드합니다.
  2. 토큰화(Tokenization): 텍스트 데이터를 토큰으로 변환합니다.
  3. Data Collator 적용: 배치로 묶을 때 길이 맞추기, 패딩, 마스킹 등 전처리 작업을 수행합니다.
  4. 모델 훈련: 전처리된 배치를 모델에 전달하여 학습을 진행합니다.

3. 주요 Data Collator 종류와 예시

3.1 DataCollatorWithPadding

  • 역할: 서로 다른 길이의 텍스트를 배치로 묶을 때 패딩(padding)을 추가합니다.

예제 코드:

from 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]]
    }
  • 설명:
    • 각 문장의 토큰 ID를 같은 길이로 맞추기 위해 패딩이 추가됩니다.
    • attention_mask에서 패딩된 부분은 0으로 처리됩니다.

3.2 DataCollatorForLanguageModeling

  • 역할: Masked Language Modeling (MLM)을 수행할 때, 일부 토큰을 [MASK]로 바꿉니다.

예제 코드:

from 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]]
    }
  • 설명:
    • 일부 토큰이 [MASK]로 대체됩니다.
    • labels에는 원래 정답 토큰이 저장됩니다. 이는 마스킹된 토큰을 예측하도록 모델을 학습시키는 데 사용됩니다.

3.3 Data Collator for Causal Language Modeling (CLM)

  • 역할: GPT와 같은 Causal Language Model에서 사용되며, 입력 텍스트와 정답이 같은 시퀀스에 포함됩니다.

4. Data Collator를 Trainer와 함께 사용

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()

5. 정리

  • Data Collator배치로 묶을 때 필요한 전처리 작업(패딩, 마스킹 등)을 수행합니다.
  • 훈련 시간 동안 매번 배치를 수동으로 처리하는 대신, 자동으로 배치 전처리를 해줍니다.
  • 주로 패딩을 추가하거나, Masked Language Modeling(MLM) 작업을 수행할 때 사용됩니다.

주요 사용 시점:

  • 모델 훈련 시 배치로 데이터를 묶을 때 사용됩니다.
  • Trainer 클래스에 전달하면 훈련 시 자동으로 배치 작업을 수행합니다.

이제 Data Collator가 무엇이고, 언제 사용되는지 이해되셨나요? 추가 질문이 있다면 언제든지 말씀해 주세요!

profile
you can do

0개의 댓글