Datasets documentation

Strukturkan repositori 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

Strukturkan repositori Anda

Untuk meng-host dan membagikan dataset Anda, buat repositori dataset di Hugging Face Hub dan unggah file data Anda.

Panduan ini akan menunjukkan cara menyusun repositori dataset Anda saat mengunggahnya. Dataset dengan struktur dan format file yang didukung (.txt, .csv, .parquet, .jsonl, .mp3, .jpg, .zip dll.) akan dimuat secara otomatis dengan load_dataset(), dan akan memiliki dataset viewer di halaman dataset-nya di Hub.

Kasus penggunaan utama

Struktur dataset paling sederhana memiliki dua file: train.csv dan test.csv (ini berfungsi dengan format file apa pun yang didukung).

Repositori Anda juga akan berisi file README.md, yaitu dataset card yang ditampilkan di halaman dataset Anda.

my_dataset_repository/
β”œβ”€β”€ README.md
β”œβ”€β”€ train.csv
└── test.csv

Dalam kasus sederhana ini, Anda akan mendapatkan dataset dengan dua split: train (mengandung contoh dari train.csv) dan test (mengandung contoh dari test.csv).

Definisikan split dan subset Anda dalam YAML

Pembagian

Jika Anda memiliki beberapa file dan ingin menentukan file mana yang masuk ke split mana, Anda dapat menggunakan field configs YAML di bagian atas README.md Anda.

Sebagai contoh, diberikan sebuah repositori seperti ini:

my_dataset_repository/
β”œβ”€β”€ README.md
β”œβ”€β”€ data.csv
└── holdout.csv

Anda dapat mendefinisikan split Anda dengan menambahkan field configs di blok YAML di bagian atas README.md Anda:

---
configs:
- config_name: default
  data_files:
  - split: train
    path: "data.csv"
  - split: test
    path: "holdout.csv"
---

Anda dapat memilih beberapa file per split menggunakan daftar path:

my_dataset_repository/
β”œβ”€β”€ README.md
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ abc.csv
β”‚   └── def.csv
└── holdout/
    └── ghi.csv
---
configs:
- config_name: default
  data_files:
  - split: train
    path:
    - "data/abc.csv"
    - "data/def.csv"
  - split: test
    path: "holdout/ghi.csv"
---

Atau Anda dapat menggunakan pola glob untuk secara otomatis mendaftar semua file yang Anda butuhkan:

---
configs:
- config_name: default
  data_files:
  - split: train
    path: "data/*.csv"
  - split: test
    path: "holdout/*.csv"
---

Perhatikan bahwa field config_name wajib diisi meskipun Anda hanya memiliki satu konfigurasi.

Konfigurasi

Dataset Anda mungkin memiliki beberapa subset data yang ingin Anda muat secara terpisah. Dalam hal itu, Anda dapat mendefinisikan daftar konfigurasi di dalam field configs di YAML:

my_dataset_repository/
β”œβ”€β”€ README.md
β”œβ”€β”€ main_data.csv
└── additional_data.csv
---
configs:
- config_name: main_data
  data_files: "main_data.csv"
- config_name: additional_data
  data_files: "additional_data.csv"
---

Setiap konfigurasi ditampilkan secara terpisah di Hugging Face Hub, dan dapat dimuat dengan melewatkan namanya sebagai parameter kedua:

from datasets import load_dataset

main_data = load_dataset("my_dataset_repository", "main_data")
additional_data = load_dataset("my_dataset_repository", "additional_data")

Parameter builder

Tidak hanya data_files, tetapi parameter spesifik builder lainnya juga dapat dikirimkan melalui YAML, sehingga memberikan fleksibilitas lebih dalam cara memuat data tanpa memerlukan kode khusus. Sebagai contoh, tentukan pemisah yang akan digunakan dalam konfigurasi mana untuk memuat file csv Anda:

---
configs:
- config_name: tab
  data_files: "main_data.csv"
  sep: "\t"
- config_name: comma
  data_files: "additional_data.csv"
  sep: ","
---

Lihat dokumentasi builder tertentu untuk melihat parameter konfigurasi yang mereka miliki.

Anda dapat mengatur konfigurasi default menggunakan default: true, misalnya Anda dapat menjalankan main_data = load_dataset("my_dataset_repository") jika Anda mengatur

- config_name: main_data
  data_files: "main_data.csv"
  default: true

Deteksi split otomatis

Jika tidak ada YAML yang diberikan, πŸ€— Datasets akan mencari pola tertentu di repositori dataset untuk secara otomatis menyimpulkan split dataset. Terdapat urutan pada pola-pola tersebut, dimulai dari format split nama file kustom hingga memperlakukan semua file sebagai satu split tunggal jika tidak ada pola yang ditemukan.

Nama direktori

File data Anda juga dapat ditempatkan ke dalam direktori yang berbeda bernama train, test, dan validation, di mana setiap direktori berisi file data untuk split tersebut:

my_dataset_repository/
β”œβ”€β”€ README.md
└── data/
    β”œβ”€β”€ train/
    β”‚   └── bees.csv
    β”œβ”€β”€ test/
    β”‚   └── more_bees.csv
    └── validation/
        └── even_more_bees.csv

Pembagian nama file

Jika Anda tidak memiliki split non-tradisional, Anda dapat menempatkan nama split di mana saja dalam file data dan nama tersebut akan disimpulkan secara otomatis. Satu-satunya aturan adalah nama split harus dipisahkan oleh karakter non-kata, misalnya test-file.csv alih-alih testfile.csv. Pemisah yang didukung meliputi garis bawah, tanda hubung, spasi, titik, dan angka.

Sebagai contoh, nama-nama file berikut semuanya dapat diterima:

  • bagian latih: train.csv, my_train_file.csv, train1.csv
  • split validasi: validation.csv, my_validation_file.csv, validation1.csv
  • bagian pengujian: test.csv, my_test_file.csv, test1.csv

Berikut adalah contoh di mana semua file ditempatkan ke dalam direktori bernama data:

my_dataset_repository/
β”œβ”€β”€ README.md
└── data/
    β”œβ”€β”€ train.csv
    β”œβ”€β”€ test.csv
    └── validation.csv

Pemisahan nama file kustom

Jika split dataset Anda memiliki nama kustom yang bukan train, test, atau validation, maka Anda dapat memberi nama file data Anda seperti data/<split_name>-xxxxx-of-xxxxx.csv.

Berikut adalah contoh dengan tiga split, train, test, dan random:

my_dataset_repository/
β”œβ”€β”€ README.md
└── data/
    β”œβ”€β”€ train-00000-of-00003.csv
    β”œβ”€β”€ train-00001-of-00003.csv
    β”œβ”€β”€ train-00002-of-00003.csv
    β”œβ”€β”€ test-00000-of-00001.csv
    β”œβ”€β”€ random-00000-of-00003.csv
    β”œβ”€β”€ random-00001-of-00003.csv
    └── random-00002-of-00003.csv

Satu pemisahan

Ketika πŸ€— Datasets tidak dapat menemukan salah satu pola di atas, maka semua file akan dianggap sebagai satu split train. Jika split dataset Anda tidak dimuat seperti yang diharapkan, hal itu mungkin disebabkan oleh pola yang salah.

Kata kunci nama Split

Ada beberapa cara untuk memberi nama split. Split validasi kadang disebut β€œdev”, dan split uji dapat disebut β€œeval”. Nama split lain ini juga didukung, dan kata kunci berikut setara:

  • train, training
  • validasi, valid, val, dev
  • test, testing, eval, evaluation

Struktur di bawah ini adalah repositori yang valid:

my_dataset_repository/
β”œβ”€β”€ README.md
└── data/
    β”œβ”€β”€ training.csv
    β”œβ”€β”€ eval.csv
    └── valid.csv

Berkas yang banyak per split

Jika salah satu split Anda terdiri dari beberapa file, πŸ€— Datasets masih dapat menginfer apakah itu split train, validation, dan test dari nama file. Sebagai contoh, jika split train dan test Anda mencakup beberapa file:

my_dataset_repository/
β”œβ”€β”€ README.md
β”œβ”€β”€ train_0.csv
β”œβ”€β”€ train_1.csv
β”œβ”€β”€ train_2.csv
β”œβ”€β”€ train_3.csv
β”œβ”€β”€ test_0.csv
└── test_1.csv

Pastikan semua file dalam set train Anda memiliki train di namanya (hal yang sama berlaku untuk test dan validation). Meskipun Anda menambahkan prefiks atau sufiks pada train di nama file (misalnya my_train_file_00001.csv), πŸ€— Datasets masih dapat menyimpulkan split yang tepat.

Untuk kenyamanan, Anda juga dapat menempatkan file data Anda ke dalam direktori yang berbeda. Dalam kasus ini, nama split disimpulkan dari nama direktori.

my_dataset_repository/
β”œβ”€β”€ README.md
└── data/
    β”œβ”€β”€ train/
    β”‚   β”œβ”€β”€ shard_0.csv
    β”‚   β”œβ”€β”€ shard_1.csv
    β”‚   β”œβ”€β”€ shard_2.csv
    β”‚   └── shard_3.csv
    └── test/
        β”œβ”€β”€ shard_0.csv
        └── shard_1.csv
Update on GitHub