Datasets documentation

Kenali dataset Anda

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

and get access to the augmented documentation experience

to get started

Kenali dataset Anda

Terdapat dua jenis objek dataset, yaitu Dataset reguler dan ✨ IterableDataset ✨. Dataset menyediakan akses acak yang cepat ke baris-baris data, serta memory-mapping sehingga pemuatan dataset yang besar pun hanya menggunakan jumlah memori perangkat yang relatif kecil. Namun, untuk dataset yang benar-benar sangat besar hingga tidak muat di disk maupun di memori, IterableDataset memungkinkan Anda untuk mengakses dan menggunakan dataset tersebut tanpa harus menunggu proses unduhan selesai sepenuhnya!

Tutorial ini akan menunjukkan cara memuat dan mengakses Dataset dan IterableDataset.

Dataset

Saat Anda memuat split dataset, Anda akan mendapatkan objek Dataset. Anda dapat melakukan banyak hal dengan objek Dataset, itulah mengapa penting untuk belajar cara memanipulasi dan berinteraksi dengan data yang disimpan di dalamnya.

Tutorial ini menggunakan dataset rotten_tomatoes, tetapi silakan muat dataset apa pun yang Anda inginkan dan ikuti langkah-langkahnya!

>>> from datasets import load_dataset

>>> dataset = load_dataset("cornell-movie-review-data/rotten_tomatoes", split="train")

Indeks

Dataset berisi kolom data, dan setiap kolom dapat berupa tipe data yang berbeda. index, atau label sumbu, digunakan untuk mengakses contoh dari dataset. Misalnya, mengindeks berdasarkan baris mengembalikan kamus berisi satu contoh dari dataset:

# Get the first row in the dataset
>>> dataset[0]
{'label': 1,
 'text': 'the rock is destined to be the 21st century\'s new " conan " and that he\'s going to make a splash even greater than arnold schwarzenegger , jean-claud van damme or steven segal .'}

Gunakan operator - untuk memulai dari akhir dataset:

# Get the last row in the dataset
>>> dataset[-1]
{'label': 0,
 'text': 'things really get weird , though not particularly scary : the movie is all portent and no content .'}

Indeks berdasarkan nama kolom mengembalikan daftar semua nilai dalam kolom:

>>> dataset["text"]
['the rock is destined to be the 21st century\'s new " conan " and that he\'s going to make a splash even greater than arnold schwarzenegger , jean-claud van damme or steven segal .',
 'the gorgeously elaborate continuation of " the lord of the rings " trilogy is so huge that a column of words cannot adequately describe co-writer/director peter jackson\'s expanded vision of j . r . r . tolkien\'s middle-earth .',
 'effective but too-tepid biopic',
 ...,
 'things really get weird , though not particularly scary : the movie is all portent and no content .']

Anda dapat mengombinasikan indeks nama baris dan kolom untuk mengembalikan nilai spesifik pada posisi tertentu:

>>> dataset[0]["text"]
'the rock is destined to be the 21st century\'s new " conan " and that he\'s going to make a splash even greater than arnold schwarzenegger , jean-claud van damme or steven segal .'

Urutan pengindeksan tidak penting. Pengindeksan berdasarkan nama kolom terlebih dahulu mengembalikan objek Column yang dapat Anda indekskan seperti biasa dengan indeks baris:

>>> import time

>>> start_time = time.time()
>>> text = dataset[0]["text"]
>>> end_time = time.time()
>>> print(f"Elapsed time: {end_time - start_time:.4f} seconds")
Elapsed time: 0.0031 seconds

>>> start_time = time.time()
>>> text = dataset["text"][0]
>>> end_time = time.time()
>>> print(f"Elapsed time: {end_time - start_time:.4f} seconds")
Elapsed time: 0.0042 seconds

Pemotongan

Slicing mengembalikan slice - atau subset - dari dataset, yang berguna untuk melihat beberapa baris sekaligus. Untuk melakukan slicing pada dataset, gunakan operator : untuk menentukan rentang posisi.

# Get the first three rows
>>> dataset[:3]
{'label': [1, 1, 1],
 'text': ['the rock is destined to be the 21st century\'s new " conan " and that he\'s going to make a splash even greater than arnold schwarzenegger , jean-claud van damme or steven segal .',
  'the gorgeously elaborate continuation of " the lord of the rings " trilogy is so huge that a column of words cannot adequately describe co-writer/director peter jackson\'s expanded vision of j . r . r . tolkien\'s middle-earth .',
  'effective but too-tepid biopic']}

# Get rows between three and six
>>> dataset[3:6]
{'label': [1, 1, 1],
 'text': ['if you sometimes like to go to the movies to have fun , wasabi is a good place to start .',
  "emerges as something rare , an issue movie that's so honest and keenly observed that it doesn't feel like one .",
  'the film provides some great insight into the neurotic mindset of all comics -- even those who have reached the absolute top of the game .']}

IterableDataset

IterableDataset dimuat ketika Anda mengatur parameter streaming menjadi True di load_dataset():

>>> from datasets import load_dataset

>>> iterable_dataset = load_dataset("ethz/food101", split="train", streaming=True)
>>> for example in iterable_dataset:
...     print(example)
...     break
{'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x512 at 0x7F0681F5C520>, 'label': 6}

Anda juga dapat membuat IterableDataset dari Dataset yang ada, tetapi ini lebih cepat daripada mode streaming karena dataset dialirkan dari file lokal:

>>> from datasets import load_dataset

>>> dataset = load_dataset("cornell-movie-review-data/rotten_tomatoes", split="train")
>>> iterable_dataset = dataset.to_iterable_dataset()

IterableDataset mengiterasi dataset secara progresif satu contoh pada satu waktu, sehingga Anda tidak perlu menunggu seluruh dataset diunduh sebelum dapat menggunakannya. Seperti yang bisa Anda bayangkan, ini sangat berguna untuk dataset besar yang ingin Anda gunakan segera!

Indeks

Perilaku IterableDataset berbeda dari Dataset biasa. Anda tidak dapat mengakses contoh secara acak dalam IterableDataset. Sebagai gantinya, Anda harus mengiterasi elemen-elemennya, misalnya dengan memanggil next(iter()) atau dengan loop for untuk mengembalikan item berikutnya dari IterableDataset:

>>> next(iter(iterable_dataset))
{'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x512 at 0x7F0681F59B50>,
 'label': 6}

>>> for example in iterable_dataset:
...     print(example)
...     break
{'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x512 at 0x7F7479DE82B0>, 'label': 6}

Namun, IterableDataset mendukung indeks kolom yang mengembalikan iterable untuk nilai kolom:

>>> next(iter(iterable_dataset["label"]))
6

Membuat subset

Anda dapat mengembalikan subset dari dataset dengan jumlah contoh tertentu menggunakan IterableDataset.take():

# Get first three examples
>>> list(iterable_dataset.take(3))
[{'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x512 at 0x7F7479DEE9D0>,
  'label': 6},
 {'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=512x512 at 0x7F7479DE8190>,
  'label': 6},
 {'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=512x383 at 0x7F7479DE8310>,
  'label': 6}]

Namun, berbeda dengan pengirisan, IterableDataset.take() membuat IterableDataset baru.

Langkah selanjutnya

Tertarik untuk mempelajari lebih lanjut tentang perbedaan antara dua jenis dataset ini? Pelajari lebih lanjut tentang mereka dalam panduan konseptual Perbedaan antara Dataset dan IterableDataset.

Untuk lebih memahami secara langsung jenis-jenis dataset ini, lihat panduan Process untuk mempelajari cara pra-pemrosesan Dataset atau panduan Stream untuk mempelajari cara pra-pemrosesan IterableDataset.

Update on GitHub