Transformers documentation

Veri toplayıcıları

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Veri toplayıcıları

Bir veri toplayıcı (data collator), model için bireysel veri seti örneklerini bir partiye (batch) dönüştürür. Ayrıca örnekleri her partideki en uzun dizine dinamik olarak doldurabilir (padding); bu, küresel bir maksimum uzunluğa doldurmaktan daha verimlidir.

Dataset[0] → {"input_ids": [101, 2003], "labels": 1}
Dataset[1] → {"input_ids": [101, 2003, 1996], "labels": 0}
Dataset[2] → {"input_ids": [101, 7592], "labels": 1}
         ↓  collator
{
  "input_ids": tensor([[101, 2003,    0],   # padded to longest
                        [101, 2003, 1996],
                        [101, 7592,    0]]),
  "labels":    tensor([1, 0, 1])
}

Transformers, çeşitli görevler için veri toplayıcıları (data collator) sağlar (mevcut tüm veri toplayıcılarını görüntüleyin). Özel bir veri toplayıcısı oluşturmak için:

  • Standart tokenizer tabanlı dolgu ve ek alanlara ihtiyacınız olduğunda DataCollatorWithPadding kullanın.
  • Özel dolgu mantığına, örnek başına birden fazla eşleşen girdiye veya tokenizer'ın kendi başına üretemediği bir batch yapısına ihtiyaç duyduğunuzda DataCollatorMixin kullanın.

DataCollatorWithPadding

Ek bir alan ekleme gibi basit kullanım senaryolarında DataCollatorWithPadding sınıfını alt sınıflandırın ve __call__ metodunu genişletin. Aşağıdaki örnek bir "score" alanı ekler.

  1. pad() bunu tanımadığı için özel alanı önce kaldırın.
  2. input_ids ve attention_mask ile ilgilenmek için üst sınıfı çağırın.
  3. Toplu işlemdeki "score" alanını geri ekleyin.
import torch
from dataclasses import dataclass
from transformers import DataCollatorWithPadding, PreTrainedTokenizerBase

@dataclass
class DataCollatorWithScore(DataCollatorWithPadding):
    tokenizer: PreTrainedTokenizerBase

    def __call__(self, features):
        scores = [f.pop("score") for f in features]

        batch = super().__call__(features)
        batch["score"] = torch.tensor(scores, dtype=torch.float)

        return batch

Özel veri toplayıcıyı, diğer herhangi bir veri toplayıcısı gibi Trainer'a iletin.

trainer = Trainer(
    ...,
    data_collator=DataCollatorWithScore(tokenizer=tokenizer),
)

DataCollatorMixin

Tam kontrol için DataCollatorMixin sınıfından türetin ve kendi __call__ yönteminizi uygulayın. Özel dolgu mantığı oluşturun, birden fazla giriş türünü işleyin veya tamamen yeni batch yapıları oluşturun. Aşağıdaki DataCollatorForPreference örneği, her eğitim örneğinin seçilen ve reddedilen bir yanıtı olması ve modelin her ikisini de görmesi gerektiği için DataCollatorMixin kullanır.

  1. pad düz listeler beklediği için chosen_ids ve rejected_ids değerlerini ayrı ayrı tutun.
  2. Girdi çiftini tek bir listede birleştirin.
  3. Collator ham token ID list'leriyle çalıştığı için attention_mask'ı tokenizer yerine torch.ones_like ile oluşturun.
  4. input_ids ve attention_mask değerlerini doldurun (pad).
import torch
from dataclasses import dataclass
from transformers.data.data_collator import DataCollatorMixin
from trl.trainer.utils import pad

@dataclass
class DataCollatorForPreference(DataCollatorMixin):
    pad_token_id: int
    pad_to_multiple_of: int | None = None

    def __call__(self, examples: list[dict]) -> dict:
        chosen_input_ids   = [torch.tensor(ex["chosen_ids"])   for ex in examples]
        rejected_input_ids = [torch.tensor(ex["rejected_ids"]) for ex in examples]

        input_ids      = chosen_input_ids + rejected_input_ids
        attention_mask = [torch.ones_like(ids) for ids in input_ids]

        output = {
            "input_ids": pad(
                input_ids,
                padding_value=self.pad_token_id,
                padding_side="right",
                pad_to_multiple_of=self.pad_to_multiple_of,
            ),
            "attention_mask": pad(
                attention_mask,
                padding_value=0,
                padding_side="right",
                pad_to_multiple_of=self.pad_to_multiple_of,
            ),
        }

        ...

        return output

Sonraki adımlar

  • Token sınıflandırması gibi yaygın görevler için kullanılabilen tüm data collatorları görüntüleyin.
Update on GitHub