Datasets documentation
Ön işleme
Ön işleme
Veri kümelerini yüklemenin yanı sıra, 🤗 Datasets'in diğer ana hedefi, veri kümesini makine öğrenimi çerçevenizle eğitim için uygun bir formata getirmek üzere çeşitli ön işleme işlevleri sunmaktır.
Bir veri setini ön işlemeye hazırlamanın birçok olası yolu vardır ve tümü, özel veri setinize bağlıdır. Bazen bir sütunu yeniden adlandırmanız, bazen de iç içe geçmiş alanları düzleştirmeniz gerekebilir. 🤗 Datasets, bu işlemlerin çoğunu yapmanın bir yolunu sunar. Ancak veri setinizin modalitesine bağlı olarak, neredeyse tüm ön işleme senaryolarında şunları yapmanız gerekecektir:
- Bir metin veri setini belirteçleştirin.
- Bir ses veri setini yeniden örnekleyin.
- Bir görüntü veri setine dönüştürme uygulamaları uygulayın.
Son ön işleme adımı, veri seti biçiminizi makine öğrenimi çerçevenizin beklediği girdi biçimiyle uyumlu hale getirmektir.
Bu öğreticide, 🤗 Transformers kütüphanesini de yüklemeniz gerekecektir:
pip install transformers
İstediğiniz bir veri setini alın ve adım adım ilerleyin!
Metni belirteçlere ayır
Modeller ham metni işleyemez, bu nedenle metni sayılara dönüştürmeniz gerekir. token adı verilen bireysel kelimelere bölerek bunu yapmanın bir yolunu sağlar. Tokenlar sonunda sayılara dönüştürülür.
Tokenizasyon ve farklı tokenizasyon algoritmaları hakkında daha fazla bilgi edinmek için Hugging Face kursunun 2. bölümündeki Tokenizers bölümüne göz atın.
1. rotten_tomatoes veri setini ve önceden eğitilmiş bir BERT modeline karşılık gelen tokenizer'ı yükleyerek başlayın. Metnin aynı şekilde bölündüğünden emin olmak istediğiniz için, önceden eğitilmiş modelle aynı tokenizer'ı kullanmak önemlidir.
>>> from transformers import AutoTokenizer
>>> from datasets import load_dataset
>>> tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
>>> dataset = load_dataset("cornell-movie-review-data/rotten_tomatoes", split="train")2. Veri setindeki text sütununun ilk satırında tokenizer'ınızı çağırın:
>>> tokenizer(dataset[0]["text"])
{'input_ids': [101, 1103, 2067, 1110, 17348, 1106, 1129, 1103, 6880, 1432, 112, 188, 1207, 107, 14255, 1389, 107, 1105, 1115, 1119, 112, 188, 1280, 1106, 1294, 170, 24194, 1256, 3407, 1190, 170, 11791, 5253, 188, 1732, 7200, 10947, 12606, 2895, 117, 179, 7766, 118, 172, 15554, 1181, 3498, 6961, 3263, 1137, 188, 1566, 7912, 14516, 6997, 119, 102],
'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}Tokenizör üç öğe içeren bir sözlük döndürür:
input_ids: metindeki token'ları temsil eden sayılar.token_type_ids: birden fazla dizi varsa, bir token'ın hangi dizeye ait olduğunu belirtir.attention_mask: bir token'ın maskelenip maskelenmeyeceğini belirtir.
Bu değerler aslında model girdileridir.
3. Veri setinizin tamamını en hızlı şekilde belirteçlemenin yolu map() işlevini kullanmaktır. Bu işlev, belirteçleyiciyi tekil örnekler yerine örnek gruplarına uygulayarak belirteçlemeyi hızlandırır. batched parametresini True olarak ayarlayın:
>>> def tokenization(example):
... return tokenizer(example["text"])
>>> dataset = dataset.map(tokenization, batched=True)4. Veri setinizin biçimini, makine öğrenimi çerçevenizle uyumlu olacak şekilde ayarlayın:
PyTorch ile uyumlu olacak şekilde veri seti biçimini ayarlamak için set_format() fonksiyonunu kullanın:
>>> dataset.set_format(type="torch", columns=["input_ids", "token_type_ids", "attention_mask", "label"])
>>> dataset.format['type']
'torch'Veri seti biçimini TensorFlow ile uyumlu olacak şekilde ayarlamak için to_tf_dataset() işlevini kullanın. Değişken uzunluktaki dizileri eşit uzunlukta tek bir partiye birleştirmek için 🤗 Transformers'tan bir data collator içe aktarmanız da gerekecektir:
>>> from transformers import DataCollatorWithPadding
>>> data_collator = DataCollatorWithPadding(tokenizer=tokenizer, return_tensors="tf")
>>> tf_dataset = dataset.to_tf_dataset(
... columns=["input_ids", "token_type_ids", "attention_mask"],
... label_cols=["label"],
... batch_size=2,
... collate_fn=data_collator,
... shuffle=True
... )5. Veri seti artık makine öğrenimi çerçevenizle eğitim için hazır!
Ses sinyallerini yeniden örnekleyin
Metin veri setleri gibi ses girişleri de ayrık veri noktalarına bölünmelidir. Buna örnekleme denir; örneklem hızı, saniyede ses sinyalinden ne kadarının yakalandığını belirtir. Kullandığınız modelin ön eğitimi için kullanılan verilerin örneklem hızıyla veri setinizin örneklem hızının eşleştiğinden emin olmak önemlidir. Örneklem hızları farklıysa, ön eğitilmiş model, örneklem hızındaki farkları tanıyamadığı için veri setinizde düşük performans gösterebilir.
1. MInDS-14 veri setini, Audio özelliğini ve önceden eğitilmiş bir Wav2Vec2 modeline karşılık gelen özellik çıkarıcıyı yükleyerek başlayın:
>>> from transformers import AutoFeatureExtractor
>>> from datasets import load_dataset, Audio
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base-960h")
>>> dataset = load_dataset("PolyAI/minds14", "en-US", split="train")2. Veri setinin ilk satırına indeksleme yapın. Veri setinin audio sütununu çağırdığınızda, otomatik olarak çözümlenir ve yeniden örneklenir:
>>> audio = dataset[0]["audio"]
>>> print(audio)
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>
>>> audio.get_all_samples().sample_rate
80003. Bir veri seti kartını okumak son derece faydalıdır ve veri seti hakkında çok fazla bilgi verebilir. MInDS-14 veri seti kartına hızlıca bakıldığında örneklem hızının 8kHz olduğu görülür. Benzer şekilde, bir model hakkında da model kartından birçok ayrıntı elde edebilirsiniz. Wav2Vec2 model kartı, 16kHz konuşma sesinde örneklem yapıldığını belirtir. Bu, modelin örneklem hızıyla eşleşmesi için MInDS-14 veri setini yukarı örneklemek (upsample) gerektiği anlamına gelir.
cast_column() fonksiyonunu kullanın ve Audio özelliğindeki sampling_rate parametresini ayarlayarak ses sinyalini örneklem artırın. Şimdi audio sütununu çağırdığınızda, çözümlenir ve 16 kHz'e yeniden örneklenir:
>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=16_000))
>>> audio = dataset[0]["audio"]
>>> print(audio)
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>
>>> audio.get_all_samples().sample_rate
160004. Tüm veri setini 16kHz'e yeniden örneklemek için map() fonksiyonunu kullanın. Bu fonksiyon, özellik çıkarıcısını bireysel örnekler yerine örnek gruplarına uygulayarak yeniden örnekleme işlemini hızlandırır. batched parametresini True olarak ayarlayın:
>>> def preprocess_function(examples):
... audio_arrays = [x.get_all_samples().data[0].numpy() for x in examples["audio"]]
... inputs = feature_extractor(
... audio_arrays, sampling_rate=feature_extractor.sampling_rate, max_length=16000, truncation=True, padding="max_length"
... )
... return inputs
>>> dataset = dataset.map(preprocess_function, batched=True)5. Veri seti artık makine öğrenimi çerçevenizle eğitim için hazır!
Veri artırma uygulamaları
Görsel veri setleriyle yapacağınız en yaygın ön işleme, verinin anlamını değiştirmeden bir görselde rastgele varyasyonlar oluşturan veri artırma işlemidir. Bu, bir görselin renk özelliklerini değiştirmek veya bir görseli rastgele kırpma işlemi yapmak anlamına gelebilir. İstediğiniz herhangi bir veri artırma kütüphanesini kullanma özgürlüğünüz vardır ve 🤗 Datasets, veri artırma işlemlerinizi veri setinize uygulamanıza yardımcı olacaktır.
1. Beans veri setini, Image özelliğini ve önceden eğitilmiş bir ViT modeline karşılık gelen özellik çıkarıcıyı yükleyerek başlayın:
>>> from transformers import AutoImageProcessor
>>> from datasets import load_dataset, Image
>>> image_processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224-in21k")
>>> dataset = load_dataset("AI-Lab-Makerere/beans", split="train")2. Veri setinin ilk satırına indeksleme yapın. Veri setinin image sütununu çağırdığınızda, altta yatan PIL nesnesi otomatik olarak bir görüntüye çözümlenir.
>>> dataset[0]["image"]
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x500 at 0x7FE5A047CC70>Çoğu görüntü modeli, görüntünün RGB modunda olmasını bekler. Beans görüntüleri zaten RGB modundadır, ancak veri setiniz farklı bir modda görüntüler içeriyorsa, modu RGB olarak ayarlamak için cast_column() işlevini kullanabilirsiniz:
>>> dataset = dataset.cast_column("image", Image(mode="RGB"))3. Şimdi görsellerinize veri artırma (data augmentation) uygulamaları uygulayalım. 🤗 Datasets, herhangi bir artırma kütüphanesiyle çalışır ve bu örnekte Albumentations kullanacağız.
Albumentations, uzay seviyesi, piksel seviyesi ve karıştırma seviyesi dönüşümlerini de içeren zengin bir dönüşüm seti sunan popüler bir görüntü artırma kütüphanesidir.
Albumentations'ı yükleyin:
pip install albumentations
4. Albumentations ile tipik bir artırma (augmentation) hattı oluşturun:
>>> import albumentations as A
>>> import numpy as np
>>> from PIL import Image
>>> transform = A.Compose([
... A.RandomCrop(height=256, width=256, pad_if_needed=True, p=1),
... A.HorizontalFlip(p=0.5),
... A.ColorJitter(p=0.5)
... ])5. 🤗 Datasets PIL görüntüleri kullanırken Albumentations NumPy dizileri beklediği için formatlar arasında dönüştürme yapmanız gerekir:
>>> def albumentations_transforms(examples):
... # Apply Albumentations transforms
... transformed_images = []
... for image in examples["image"]:
... # Convert PIL to numpy array (OpenCV format)
... image_np = np.array(image.convert("RGB"))
...
... # Apply Albumentations transforms
... transformed_image = transform(image=image_np)["image"]
...
... # Convert back to PIL Image
... pil_image = Image.fromarray(transformed_image)
... transformed_images.append(pil_image)
...
... examples["pixel_values"] = transformed_images
... return examples6. Dönüşümü with_transform() kullanarak uygulayın:
>>> dataset = dataset.with_transform(albumentations_transforms)
>>> dataset[0]["pixel_values"]🤗 Datasets ile Albumentations kullanırken dikkat edilmesi gereken önemli noktalar:
- Dönüşümleri uygulamadan önce PIL görüntülerini NumPy dizilerine dönüştürün
- Albumentations, dönüştürülen görüntüyü “image” anahtarı altında içeren bir sözlük döndürür
- Dönüşümün ardından sonucu tekrar PIL biçimine çevirin
7. Veri seti artık makine öğrenimi çerçevenizle eğitim için hazır!
Update on GitHub