Hugging Face Datasets
Dataset Hugging Face menyediakan situs web yang mencantumkan dataset dan perpustakaan dataset
untuk digunakan.
Datasets
Datasets yang tersedia untuk umum dapat ditemukan di tautan berikut.
Dataset dapat dicari dengan kata kunci, serta difilter berdasarkan kategori tugas, ukuran data, lisensi, dll.
datasets API
API datasets
dapat diinstal dengan perintah berikut.
$ pip install datasets
Daftar dataset yang tersedia
Daftar dataset yang tersedia dapat dilihat dengan menggunakan list_dataset
.
from datasets import list_datasets, load_dataset, list_metrics, load_metric
from pprint import pprint
pprint(list_datasets())
Pada tanggal 3 Februari 2023, terdapat 20.267 set data.
>> len(list_datasets)
20267
Dataset ini juga dapat ditemukan di tautan berikut.
Memuat dataset
Dataset dapat dimuat dengan menggunakan load_dataset
.
from datasets import load_dataset
dataset = load_dataset(
'wikitext', # dataset identifier
'wikitext-103-v1' # instance name in the dataset
)
Jenis dataset
The loaded dataset is of type DatasetDict
.
from datasets import load_dataset
dataset = load_dataset('glue', 'cola')
type(dataset)
datasets.dataset_dict.DatasetDict
Kumpulan data dapat dikonversi ke berbagai jenis sebagai berikut.
dataset.set_format(type='python') # (default) Python object
dataset.set_format(type='torch') # PyTorch tensor
dataset.set_format(type='tensorflow') # TensorFlow tensor
dataset.set_format(type='jax') # JAX
dataset.set_format(type='numpy') # NumPy
dataset.set_format(type='pandas') # pandas DataFrame
Membuat kelas DatasetDict dari file CSV
Kelas DatasetDict dapat dibuat dari file lokal atau pandas DataFrame.
Pertama, siapkan sebuah file CSV. Dapatkan dataset bernama glue
dan simpan sebagai CSV.
from datasets import load_dataset
from pprint import pprint
dataset = load_dataset('glue', 'cola')
dataset
DatasetDict({
train: Dataset({
features: ['sentence', 'label', 'idx'],
num_rows: 8551
})
validation: Dataset({
features: ['sentence', 'label', 'idx'],
num_rows: 1043
})
test: Dataset({
features: ['sentence', 'label', 'idx'],
num_rows: 1063
})
})
Simpan set data secara lokal sebagai CSV dengan metode to_csv
.
dataset.set_format(type="pandas") # convert to pandas
dataset["train"][:].to_csv("train.csv", index=None) # save
dataset["validation"][:].to_csv("validation.csv", index=None) # save
dataset["test"][:].to_csv("test.csv", index=None) # save
dataset.reset_format() # reset format
train.csv
memiliki data sebagai berikut.
$ !cat 'train.csv' | head -n 5
sentence,label,idx
"Our friends won't buy this analysis, let alone the next one we propose.",1,0
One more pseudo generalization and I'm giving up.,1,1
One more pseudo generalization or I'm giving up.,1,2
"The more we study verbs, the crazier they get.",1,3
File CSV
Untuk membuat kelas DatasetDict dari file CSV lokal, jalankan kode berikut.
dataset_files = {
"train": ["train.csv"],
"validation": ["validation.csv"],
"test": ["test.csv"],
}
dataset_from_csv = load_dataset("csv", data_files=dataset_files)
print(dataset_from_csv)
DatasetDict({
train: Dataset({
features: ['sentence', 'label', 'idx'],
num_rows: 8551
})
validation: Dataset({
features: ['sentence', 'label', 'idx'],
num_rows: 1043
})
test: Dataset({
features: ['sentence', 'label', 'idx'],
num_rows: 1063
})
})
pandas DataFrame
Untuk membuat kelas DatasetDict dari pandas, jalankan kode berikut.
import pandas as pd
from datasets import Dataset, DatasetDict
train_df = pd.read_csv("train.csv")
validation_df = pd.read_csv("validation.csv")
test_df = pd.read_csv("test.csv")
train_ds = Dataset.from_pandas(train_df)
validation_ds = Dataset.from_pandas(validation_df)
dataset_from_pandas = DatasetDict({
"train": train_ds,
"validation": validation_ds,
"test": test_ds,
})
print(dataset_from_csv)
DatasetDict({
train: Dataset({
features: ['sentence', 'label', 'idx'],
num_rows: 8551
})
validation: Dataset({
features: ['sentence', 'label', 'idx'],
num_rows: 1043
})
test: Dataset({
features: ['sentence', 'label', 'idx'],
num_rows: 1063
})
})
Mengubah kolom label menjadi ClassLabel
Label
dari dataset
yang dimuat dari dataset publik bertipe ClassLabel
, sedangkan label
dari dataset_from_pandas
bertipe Value
.
dataset['train'].features
{'sentence': Value(dtype='string', id=None),
'label': ClassLabel(names=['unacceptable', 'acceptable'], id=None),
'idx': Value(dtype='int32', id=None)}
dataset_from_pandas['train'].features
{'sentence': Value(dtype='string', id=None),
'label': Value(dtype='int64', id=None),
'idx': Value(dtype='int64', id=None)}
Anda dapat memberikan jenis kolom pada set data sebagai berikut.
from datasets import ClassLabel
# convert "label" to ClassLabel
class_label = ClassLabel(num_classes=2, names=['unacceptable', 'acceptable'])
dataset_from_pandas = dataset_from_pandas.cast_column("label", class_label)
dataset_from_pandas['train'].features
{'sentence': Value(dtype='string', id=None),
'label': ClassLabel(names=['unacceptable', 'acceptable'], id=None),
'idx': Value(dtype='int64', id=None)}
Memproses sebuah dataset
Dataset dapat diproses untuk seluruh dataset menggunakan metode map
.
from datasets import load_dataset
from transformers import AutoTokenizer
dataset = load_dataset('glue', 'cola')
# add "length" column that is the length of "sentence"
dataset_with_length = dataset.map(lambda x: {"length": len(x["sentence"])})
# tokenize "sentence" column
tokenizer = AutoTokenizer.from_pretrained('bert-base-cased')
dataset_tokenized = dataset.map(lambda x: tokenizer(x['sentence']), batched=True)
Referensi