Datasets documentation
Mulai Cepat
Mulai Cepat
Quickstart ini ditujukan untuk pengembang yang siap langsung masuk ke kode dan melihat contoh cara mengintegrasikan π€ Datasets ke dalam alur kerja pelatihan model mereka. Jika Anda seorang pemula, kami merekomendasikan untuk memulai dengan tutorial kami, di mana Anda akan mendapatkan pengenalan yang lebih menyeluruh.
Setiap dataset bersifat unik, dan tergantung pada tugasnya, beberapa dataset mungkin memerlukan langkah tambahan untuk mempersiapkannya untuk pelatihan. Namun, Anda selalu dapat menggunakan alat π€ Datasets untuk memuat dan memproses dataset. Cara tercepat dan termudah untuk memulai adalah dengan memuat dataset yang sudah ada dari Hugging Face Hub. Ada ribuan dataset yang dapat dipilih, mencakup banyak tugas. Pilih jenis dataset yang ingin Anda kerjakan, dan mari kita mulai!
Resample dataset audio dan siapkan untuk model mengklasifikasikan jenis masalah perbankan yang ditanyakan oleh penelpon.
Terapkan augmentasi data pada dataset gambar dan siapkan untuk model untuk mendiagnosis penyakit pada tanaman kacang.
Tokenisasi dataset dan siapkan untuk model guna menentukan apakah sepasang kalimat memiliki makna yang sama.
Lihat Bab 5 dari kursus Hugging Face untuk mempelajari lebih lanjut tentang topik penting lainnya seperti memuat dataset jarak jauh atau lokal, alat untuk membersihkan dataset, dan membuat dataset Anda sendiri.
Mulai dengan menginstal π€ Datasets:
pip install datasets
π€ Datasets juga mendukung format data audio dan gambar:
Untuk bekerja dengan dataset audio, instal fitur Audio:
pip install datasets[audio]
Untuk bekerja dengan dataset gambar, instal fitur Image:
pip install datasets[vision]
Selain π€ Datasets, pastikan framework machine learning pilihan Anda terinstal:
bash pip install torch
bash pip install tensorflow
Audio
Dataset audio dimuat dengan cara yang sama seperti dataset teks. Namun, dataset audio diproses secara berbeda. Alih-alih tokenizer, Anda memerlukan feature extractor. Input audio juga mungkin memerlukan resampling laju samplingnya agar sesuai dengan laju sampling model pretrained yang Anda gunakan. Dalam quickstart ini, Anda akan menyiapkan dataset MInDS-14 untuk melatih model dan mengklasifikasikan masalah perbankan yang dialami pelanggan.
1. Muat dataset MInDS-14 dengan memberikan nama dataset, konfigurasi dataset (tidak semua dataset memiliki konfigurasi), dan split dataset ke fungsi load_dataset():
>>> from datasets import load_dataset, Audio
>>> dataset = load_dataset("PolyAI/minds14", "en-US", split="train")2. Selanjutnya, muat model Wav2Vec2 pretrained dan feature extractor yang sesuai dari pustaka π€ Transformers. Sangat wajar jika Anda melihat peringatan setelah memuat model bahwa beberapa bobot tidak diinisialisasi. Hal ini diharapkan karena Anda memuat checkpoint model ini untuk pelatihan dengan tugas lain.
>>> from transformers import AutoModelForAudioClassification, AutoFeatureExtractor
>>> model = AutoModelForAudioClassification.from_pretrained("facebook/wav2vec2-base")
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")3. Kartu dataset MInDS-14 menunjukkan bahwa laju sampling adalah 8kHz, tetapi model Wav2Vec2 telah dipra-latih pada laju sampling 16kHZ. Anda perlu melakukan upsample pada kolom audio dengan fungsi cast_column() dan fitur Audio agar sesuai dengan laju sampling model.
>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))
>>> dataset[0]["audio"]
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>4. Buat fungsi untuk memproses praproses array audio dengan feature extractor, lalu memotong dan mengisi (padding) urutan menjadi tensor persegi panjang yang rapi. Hal terpenting yang perlu diingat adalah memanggil array audio di dalam feature extractor karena array - sinyal ucapan yang sebenarnya - adalah input model.
Setelah Anda memiliki fungsi pra-pemrosesan, gunakan fungsi map() untuk mempercepat pemrosesan dengan menerapkan fungsi tersebut pada batch contoh dalam dataset.
>>> def preprocess_function(examples):
... audio_arrays = [x.get_all_samples().data for x in examples["audio"]]
... inputs = feature_extractor(
... audio_arrays,
... sampling_rate=16000,
... padding=True,
... max_length=100000,
... truncation=True,
... )
... return inputs
>>> dataset = dataset.map(preprocess_function, batched=True)5. Gunakan fungsi rename_column() untuk mengganti nama kolom intent_class menjadi labels, yang merupakan nama input yang diharapkan di Wav2Vec2ForSequenceClassification:
>>> dataset = dataset.rename_column("intent_class", "labels")6. Atur format dataset sesuai dengan framework machine learning yang Anda gunakan.
Gunakan fungsi set_format() untuk mengatur format dataset menjadi torch dan tentukan kolom yang ingin diformat. Fungsi ini menerapkan format secara on-the-fly. Setelah dikonversi menjadi tensor PyTorch, bungkus dataset dalam torch.utils.data.DataLoader:
>>> from torch.utils.data import DataLoader
>>> dataset.set_format(type="torch", columns=["input_values", "labels"])
>>> dataloader = DataLoader(dataset, batch_size=4)Gunakan metode prepare_tf_dataset dari π€ Transformers untuk menyiapkan dataset agar kompatibel dengan TensorFlow dan siap untuk melatih/menyesuaikan model, karena metode ini membungkus Dataset HuggingFace menjadi tf.data.Dataset dengan kolasi dan batching, sehingga dataset tersebut dapat langsung diteruskan ke metode Keras seperti fit() tanpa modifikasi lebih lanjut.
>>> import tensorflow as tf
>>> tf_dataset = model.prepare_tf_dataset(
... dataset,
... batch_size=4,
... shuffle=True,
... )7. Mulai pelatihan dengan framework machine learning Anda! Lihat panduan klasifikasi audio π€ Transformers untuk contoh end-to-end cara melatih model pada dataset audio.
Vision
Dataset gambar dimuat dengan cara yang sama seperti dataset teks. Namun, alih-alih tokenizer, Anda memerlukan feature extractor untuk memproses dataset. Penerapan data augmentation pada gambar adalah hal yang umum dalam computer vision untuk membuat model lebih robust terhadap overfitting. Anda bebas menggunakan library data augmentation apa pun yang Anda inginkan, dan kemudian Anda dapat menerapkan augmentasi tersebut dengan π€ Datasets. Dalam quickstart ini, Anda akan memuat dataset Beans dan menyiapkannya agar model dapat dilatih untuk mengidentifikasi penyakit dari gambar daun.
1. Muat dataset Beans dengan memberikan nama dataset dan split dataset ke fungsi load_dataset():
>>> from datasets import load_dataset, Image
>>> dataset = load_dataset("AI-Lab-Makerere/beans", split="train")Sebagian besar model gambar bekerja dengan gambar RGB. Jika dataset Anda berisi gambar dalam mode lain, Anda dapat menggunakan fungsi cast_column() untuk mengatur mode menjadi RGB:
>>> dataset = dataset.cast_column("image", Image(mode="RGB"))Dataset Beans hanya berisi gambar RGB, sehingga langkah ini tidak diperlukan di sini.
2. Sekarang Anda dapat menambahkan beberapa augmentasi data dengan pustaka apa pun (Albumentations, imgaug, Kornia) yang Anda sukai. Di sini, Anda akan menggunakan torchvision untuk secara acak mengubah properti warna sebuah gambar:
>>> from torchvision.transforms import Compose, ColorJitter, ToTensor
>>> jitter = Compose(
... [ColorJitter(brightness=0.5, hue=0.5), ToTensor()]
... )3. Buat fungsi untuk menerapkan transform Anda ke dataset dan menghasilkan input model: pixel_values.
>>> def transforms(examples):
... examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]]
... return examples4. Gunakan fungsi with_transform() untuk menerapkan augmentasi data secara langsung:
>>> dataset = dataset.with_transform(transforms)5. Atur format dataset sesuai dengan framework machine learning yang Anda gunakan.
Bungkus dataset dalam torch.utils.data.DataLoader. Anda juga perlu membuat fungsi collate untuk menggabungkan sampel menjadi batch:
>>> from torch.utils.data import DataLoader
>>> def collate_fn(examples):
... images = []
... labels = []
... for example in examples:
... images.append((example["pixel_values"]))
... labels.append(example["labels"])
...
... pixel_values = torch.stack(images)
... labels = torch.tensor(labels)
... return {"pixel_values": pixel_values, "labels": labels}
>>> dataloader = DataLoader(dataset, collate_fn=collate_fn, batch_size=4)Gunakan metode prepare_tf_dataset dari π€ Transformers untuk menyiapkan dataset agar kompatibel dengan TensorFlow dan siap untuk melatih/menyesuaikan model, karena metode ini membungkus Dataset HuggingFace menjadi tf.data.Dataset dengan kolasi dan batching, sehingga dataset tersebut dapat langsung diteruskan ke metode Keras seperti fit() tanpa modifikasi lebih lanjut.
Sebelum memulai, pastikan Anda telah menginstal versi terbaru dari albumentations dan cv2:
pip install -U albumentations opencv-python
>>> import albumentations
>>> import numpy as np
>>> transform = albumentations.Compose([
... albumentations.RandomCrop(width=256, height=256),
... albumentations.HorizontalFlip(p=0.5),
... albumentations.RandomBrightnessContrast(p=0.2),
... ])
>>> def transforms(examples):
... examples["pixel_values"] = [
... transform(image=np.array(image))["image"] for image in examples["image"]
... ]
... return examples
>>> dataset.set_transform(transforms)
>>> tf_dataset = model.prepare_tf_dataset(
... dataset,
... batch_size=4,
... shuffle=True,
... )6. Mulai pelatihan dengan framework machine learning Anda! Lihat panduan klasifikasi gambar π€ Transformers untuk contoh end-to-end cara melatih model pada dataset gambar.
NLP
Teks perlu ditokenisasi menjadi token-token individual oleh tokenizer. Untuk quickstart, Anda akan memuat dataset pelatihan Microsoft Research Paraphrase Corpus (MRPC) untuk melatih model yang menentukan apakah sepasang kalimat memiliki makna yang sama.
1. Muat dataset MRPC dengan memberikan nama dataset, konfigurasi dataset (tidak semua dataset memiliki konfigurasi), dan split dataset ke fungsi load_dataset():
>>> from datasets import load_dataset
>>> dataset = load_dataset("nyu-mll/glue", "mrpc", split="train")2. Selanjutnya, muat model BERT pretrained dan tokenizer yang sesuai dari pustaka π€ Transformers. Sangat wajar jika Anda melihat peringatan setelah memuat model bahwa beberapa bobot tidak diinisialisasi. Hal ini diharapkan karena Anda memuat checkpoint model ini untuk pelatihan dengan tugas lain.
>>> from transformers import AutoModelForSequenceClassification, AutoTokenizer
>>> model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")
>>> tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")3. Buat fungsi untuk melakukan tokenisasi pada dataset, dan Anda juga harus memotong serta mengisi teks menjadi tensor persegi panjang yang rapi. Tokenizer menghasilkan tiga kolom baru dalam dataset: input_ids, token_type_ids, dan attention_mask. Ini adalah input model.
Gunakan fungsi map() untuk mempercepat pemrosesan dengan menerapkan fungsi tokenisasi Anda pada batch contoh dalam dataset:
>>> def encode(examples):
... return tokenizer(examples["sentence1"], examples["sentence2"], truncation=True, padding="max_length")
>>> dataset = dataset.map(encode, batched=True)
>>> dataset[0]
{'sentence1': 'Amrozi accused his brother , whom he called " the witness " , of deliberately distorting his evidence .',
'sentence2': 'Referring to him as only " the witness " , Amrozi accused his brother of deliberately distorting his evidence .',
'label': 1,
'idx': 0,
'input_ids': [ 101, 7277, 2180, 5303, 4806, 1117, 1711, 117, 2292, 1119, 1270, 107, 1103, 7737, 107, 117, 1104, 9938, 4267, 12223, 21811, 1117, 2554, 119, 102, 11336, 6732, 3384, 1106, 1140, 1112, 1178, 107, 1103, 7737, 107, 117, 7277, 2180, 5303, 4806, 1117, 1711, 1104, 9938, 4267, 12223, 21811, 1117, 2554, 119, 102, 0, 0, ...],
'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, 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, 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, 0, 0, ...]}4. Ubah nama kolom label menjadi labels, yang merupakan nama input yang diharapkan di BertForSequenceClassification:
>>> dataset = dataset.map(lambda examples: {"labels": examples["label"]}, batched=True)5. Atur format dataset sesuai dengan framework machine learning yang Anda gunakan.
Gunakan fungsi with_format() untuk mengatur format dataset menjadi torch dan menentukan kolom yang ingin diformat. Fungsi ini menerapkan format secara langsung (on-the-fly). Setelah dikonversi menjadi tensor PyTorch, bungkus dataset dalam torch.utils.data.DataLoader:
>>> import torch
>>> dataset = dataset.select_columns(["input_ids", "token_type_ids", "attention_mask", "labels"])
>>> dataset = dataset.with_format(type="torch")
>>> dataloader = torch.utils.data.DataLoader(dataset, batch_size=32)Gunakan metode prepare_tf_dataset dari π€ Transformers untuk menyiapkan dataset agar kompatibel dengan TensorFlow dan siap untuk melatih/menyesuaikan model, karena metode ini membungkus Dataset HuggingFace menjadi tf.data.Dataset dengan kolasi dan batching, sehingga dataset tersebut dapat langsung diteruskan ke metode Keras seperti fit() tanpa modifikasi lebih lanjut.
>>> import tensorflow as tf
>>> tf_dataset = model.prepare_tf_dataset(
... dataset,
... batch_size=4,
... shuffle=True,
... )6. Mulai pelatihan dengan framework machine learning Anda! Lihat panduan klasifikasi teks π€ Transformers untuk contoh end-to-end cara melatih model pada dataset teks.
Langkah selanjutnya?
Ini melengkapi quickstart π€ Datasets! Anda dapat memuat dataset teks, audio, atau gambar apa pun dengan satu fungsi dan menyiapkannya untuk dilatih oleh model Anda.
Untuk langkah selanjutnya, lihat panduan cara melakukan kami dan pelajari cara melakukan hal-hal yang lebih spesifik seperti memuat format dataset yang berbeda, menyelaraskan label, dan streaming dataset besar. Jika Anda tertarik untuk mempelajari lebih lanjut tentang konsep inti π€ Datasets, siapkan secangkir kopi dan baca Panduan Konseptual kami!
Update on GitHub