Datasets documentation
Yükle
Yükle
Verileriniz çeşitli yerlerde saklanabilir; bunlar yerel makinenizin diskinde, bir Github deposunda veya Python sözlükleri ve Pandas DataFrames gibi bellek içi veri yapılarında olabilir. Bir veri seti nerede saklanırsa saklansın, 🤗 Datasets onu yüklemenize yardımcı olabilir.
Bu kılavuz, bir veri setini şu kaynaklardan nasıl yükleyeceğinizi gösterecektir:
- Hugging Face Hub
- Yerel dosyalar
- Bellek içi veri
- Çevrimdışı
- Bir bölünmenin belirli bir dilimi
Diğer veri seti modalitelerini yükleme ile ilgili daha fazla ayrıntı için ses veri seti yükleme kılavuzuna, görsel veri seti yükleme kılavuzuna, video veri seti yükleme kılavuzuna, mesh veri seti yükleme kılavuzuna, metin veri seti yükleme kılavuzuna veya ajan değerlendirme görevleri yükleme kılavuzuna göz atın.
Hugging Face Hub
Hub'daki herhangi bir veri seti deposundan da bir veri seti yükleyebilirsiniz. bir veri seti deposu oluşturarak başlayın ve veri dosyalarınızı yükleyin. Artık veri setini yüklemek için load_dataset() işlevini kullanabilirsiniz.
Örneğin, depo ad alanını ve veri seti adını sağlayarak bu demo deposundaki dosyaları yüklemeyi deneyin. Bu veri seti deposu CSV dosyaları içerir ve aşağıdaki kod, veri setini CSV dosyalarından yükler:
>>> from datasets import load_dataset
>>> dataset = load_dataset("lhoestq/demo1")Bazı veri setleri, Git etiketlerine, dallarına veya commit'lerine dayalı olarak birden fazla sürüme sahip olabilir. Yüklemek istediğiniz veri seti sürümünü belirtmek için revision parametresini kullanın:
>>> dataset = load_dataset(
... "lhoestq/custom_squad",
... revision="main" # tag name, or branch name, or commit hash
... )Hub'da bir veri seti deposu oluşturma ve veri dosyalarınızı yükleme konusundaki ayrıntılar için Hub'a bir veri seti yükleme eğitimine bakın.
Bir veri seti varsayılan olarak tüm verileri train bölümüne yükler veya veri dosya adlarında bölüm adlarına (ör. “train”, “test” ve “validation”) atıfta bulunup bulunmadığını kontrol eder. train, validation ve test gibi bölümlere veri dosyalarını eşlemek için data_files parametresini kullanın:
>>> data_files = {"train": "train.csv", "test": "test.csv"}
>>> dataset = load_dataset("namespace/your_dataset_name", data_files=data_files)Hangi veri dosyalarının kullanılacağını belirtmezseniz, load_dataset() tüm veri dosyalarını döndürür. C4 gibi yaklaşık 13TB boyutunda büyük bir veri seti yüklediğinizde bu işlem uzun sürebilir.
Belirli bir dosya alt kümesini de data_files veya data_dir parametresiyle yükleyebilirsiniz. Bu parametreler, veri setinin yüklendiği konuma karşılık gelen temel yola çözümlenen göreli bir yolu kabul edebilir.
>>> from datasets import load_dataset
# load files that match the grep pattern
>>> c4_subset = load_dataset("allenai/c4", data_files="en/c4-train.0000*-of-01024.json.gz")
# load dataset from the en directory on the Hub
>>> c4_subset = load_dataset("allenai/c4", data_dir="en")split parametresi, bir veri dosyasını belirli bir bölüme eşleyebilir:
>>> data_files = {"validation": "en/c4-validation.*.json.gz"}
>>> c4_validation = load_dataset("allenai/c4", data_files=data_files, split="validation")Yerel ve uzak dosyalar
Veri kümeleri, bilgisayarınızda yerel olarak saklanan dosyalardan ve uzak dosyalardan yüklenebilir. Veri kümeleri büyük olasılıkla csv, json, txt, parquet veya tsfile dosyası olarak saklanır. load_dataset() işlevi, bu dosya türlerinin her birini yükleyebilir.
CSV
🤗 Datasets, bir veya birden fazla CSV dosyasından oluşan bir veri setini okuyabilir (bu durumda CSV dosyalarınızı bir liste olarak iletin):
>>> from datasets import load_dataset
>>> dataset = load_dataset("csv", data_files="my_file.csv")Daha fazla ayrıntı için CSV dosyalarından tabular veri kümelerini nasıl yüklenir kılavuzuna göz atın.
JSON
JSON dosyaları aşağıda gösterildiği gibi doğrudan load_dataset() ile yüklenir:
>>> from datasets import load_dataset
>>> dataset = load_dataset("json", data_files="my_file.json")JSON dosyaları çeşitli formatlara sahiptir, ancak en verimli formatın birden fazla JSON nesnesi içermesi olduğunu düşünüyoruz; her satır tek bir veri satırını temsil eder. Örneğin:
{"a": 1, "b": 2.0, "c": "foo", "d": false}
{"a": 4, "b": -5.5, "c": null, "d": true}Karşılaşabileceğiniz başka bir JSON biçimi de iç içe geçmiş alanlardır; bu durumda aşağıdaki gibi field argümanını belirtmeniz gerekir:
{"version": "0.1.0",
"data": [{"a": 1, "b": 2.0, "c": "foo", "d": false},
{"a": 4, "b": -5.5, "c": null, "d": true}]
}
>>> from datasets import load_dataset
>>> dataset = load_dataset("json", data_files="my_file.json", field="data")HTTP üzerinden uzaktaki JSON dosyalarını yüklemek için bunun yerine URL'leri iletin:
>>> base_url = "https://rajpurkar.github.io/SQuAD-explorer/dataset/"
>>> dataset = load_dataset("json", data_files={"train": base_url + "train-v1.1.json", "validation": base_url + "dev-v1.1.json"}, field="data")Bu, en yaygın JSON biçimleri olsa da, farklı biçimlendirilmiş diğer veri setleriyle karşılaşabilirsiniz. 🤗 Datasets bu diğer biçimleri tanır ve bunları işlemek için Python JSON yükleme yöntemlerine göre geri düşer.
Parquet
Parquet dosyaları, CSV gibi satır tabanlı dosyalardan farklı olarak sütun tabanlı bir formatta saklanır. Büyük veri kümeleri, sorgularınızı daha verimli ve hızlı bir şekilde döndürdüğü için bir Parquet dosyasında saklanabilir.
Bir Parquet dosyası yüklemek için:
>>> from datasets import load_dataset
>>> dataset = load_dataset("parquet", data_files={'train': 'train.parquet', 'test': 'test.parquet'})HTTP üzerinden uzak Parquet dosyalarını yüklemek için bunun yerine URL'leri iletin:
>>> base_url = "https://huggingface.co/datasets/wikimedia/wikipedia/resolve/main/20231101.ab/"
>>> data_files = {"train": base_url + "train-00000-of-00001.parquet"}
>>> wiki = load_dataset("parquet", data_files=data_files, split="train")Arrow
Arrow dosyaları, CSV gibi satır tabanlı ve Parquet gibi sıkıştırılmamış formatların aksine, bellek içi sütun tabanlı bir formatta saklanır.
Bir Arrow dosyası yüklemek için:
>>> from datasets import load_dataset
>>> dataset = load_dataset("arrow", data_files={'train': 'train.arrow', 'test': 'test.arrow'})HTTP üzerinden uzak Arrow dosyalarını yüklemek için bunun yerine URL'leri iletin:
>>> base_url = "https://huggingface.co/datasets/croissantllm/croissant_dataset/resolve/main/english_660B_11/"
>>> data_files = {"train": base_url + "train/data-00000-of-00080.arrow"}
>>> wiki = load_dataset("arrow", data_files=data_files, split="train")Arrow, 🤗 Datasets'in arka planda kullandığı dosya biçimidir; bu nedenle yerel bir Arrow dosyasını Dataset.from_file() ile doğrudan yükleyebilirsiniz:
>>> from datasets import Dataset
>>> dataset = Dataset.from_file("data.arrow")load_dataset()'in aksine, Dataset.from_file() veri setini önbellekte hazırlamadan Arrow dosyasını belleğe haritalandırır ve bu sayede disk alanından tasarruf sağlar. Bu durumda, ara işleme sonuçlarını depolamak için kullanılacak önbellek dizini, Arrow dosyasının dizini olacaktır.
Şimdilik yalnızca Arrow akış biçimi desteklenmektedir. Arrow IPC dosya biçimi (Feather V2 olarak da bilinir) desteklenmemektedir.
Lance
Lance, yapay zeka için açık kaynaklı çok modlu bir lakehouse tablo biçimidir. Lance tabloları, tabular verilerinizin yanı sıra metin ve skaler değerlerin yanı sıra görüntü, ses ve video gibi büyük ikili nesneleri (blob) da yerel olarak depolayabilir.
>>> from datasets import load_dataset
>>> lance_base_url = "lance-format/laion-1m"Veri setini yerel makinenize kopyalamadan akış olarak almak için streaming=True parametresini belirtin:
ds = load_dataset(lance_base_url, split="train", streaming=True)
# Take first three rows
for row in ds.take(3):
print(row["caption"], row["image"])Bu, tek bir istekle hem görüntü başlığını hem de görüntü baytlarını döndürür.
Vortex
Vortex, sıkıştırılmış veriler üzerinde hızlı taramalar için geliştirilmiş sütun tabanlı bir dosya biçimidir. pip install vortex-data komutuyla yükleyin, ardından .vortex dosyalarını diğer paketlenmiş biçimler gibi yükleyin:
>>> from datasets import load_dataset
>>> dataset = load_dataset("vortex", data_files="data.vortex", split="train")Sütunlar ve filtreler Vortex taramasına itilir, böylece yalnızca istediğiniz satırlar ve sütunlar okunur. Bu, akış sırasında da çalışır; bu sayede Hub’daki bir veri setini, eşleşmeyen kısımları indirmeden filtreleyebilirsiniz:
>>> filters = [("label", "==", 1)]
>>> dataset = load_dataset(vortex_dataset_id, columns=["text", "label"], filters=filters, streaming=True, split="train")Filtreler, Parquet yükleyiciyle aynı ayrık normal formu kullanır: (column, operator, value) önelem listesinin birleşimi (conjunction), bu listelerin bir listesi ise ayrımı (disjunction) ifade eder. Null değerler SQL semantiğine uyar — null hiçbir karşılaştırmayı karşılamaz, bu nedenle filtrelenen sütunu null olan bir satır asla döndürülmez; bu durum not in için de geçerlidir. Bu formun ifade edemediği her şey için bunun yerine bir Vortex ifadesi geçirin:
>>> import vortex.expr as ve
>>> dataset = load_dataset(vortex_dataset_id, filters=ve.column("score") >= 0.5, split="train")Vortex dosyaları fsspec üzerinden değil, kendi açar; bu nedenle data_files yerel yollara, Hub veri kümelerine ve Vortex'in yerel olarak okuduğu uzak konumlara (HTTP ve yaygın nesne depoları) işaret edebilir — ancak arşivlerin içindeki (zip://...) veya yalnızca fsspec desteklediği diğer protokollerdeki konumlara değil.
HDF5 dosyaları
HDF5 dosyaları, bilimsel hesaplama ve makine öğrenmesinde büyük miktarda sayısal verinin depolanması için yaygın olarak kullanılır. 🤗 Datasets ile HDF5 dosyalarının yüklenmesi, CSV dosyalarının yüklenmesine benzerdir:
>>> from datasets import load_dataset
>>> dataset = load_dataset("hdf5", data_files="data.h5")HDF5 yükleyicinin, dosyanın “tablolu” bir yapıya sahip olduğunu varsaydığını, yani dosyadaki tüm veri kümelerinin ilk boyutunda (aynı sayıda) satıra sahip olduğunu belirtmek gerekir.
TsFile
TsFile, zaman serisi verileri için tasarlanmış sütun tabanlı bir dosya biçimidir ve Apache IoTDB'nin yerel depolama katmanı olarak kullanılır. Zaman damgalarını, cihaz etiketlerini ve ölçüm alanlarını yerel olarak temsil eder ve verimli zaman aralığı budama (pruning) imkânı sağlayan dahili bir zaman dizini tutar.
Sonuçtaki veri setindeki her satır, bir cihaza (TAG sütunlarıyla tanımlanır) karşılık gelir; time sütunu ve her FIELD sütunu, artan zaman sırasına göre sıralanmış, o cihazın tam zaman serisini içeren liste sütunlarıdır.
Bir TsFile yüklemek için:
>>> from datasets import load_dataset
>>> dataset = load_dataset("tsfile", data_files="my_data.tsfile")Zaman aralığına göre filtrele — sınırlar, TsFile’ın dahili zaman dizinine aktarılır ve int epoch değerlerini, datetime, date, ISO-8601 dizgelerini veya pyarrow zaman damgası skalerlerini kabul eder:
>>> from datetime import datetime
>>> dataset = load_dataset(
... "tsfile",
... data_files="my_data.tsfile",
... start_time=datetime(2023, 11, 14),
... end_time=datetime(2023, 11, 15),
... )Daha fazla ayrıntı için TsFile verilerinin nasıl yükleneceği kılavuzuna göz atın.
Harbor
Harbor veri setleri, yapay zeka ajanlarını değerlendirmek için kullanılan görev koleksiyonlarıdır.
Veri dosyalarından değil, dizinlerden oluşurlar: her görev, task.toml yapılandırma dosyası ve bir instruction.md dosyası ile birlikte ortamını, doğrulayıcısını ve çözümünü içeren bir dizindir.
Sonuç kümesindeki her satır bir görevi (talimatını, task.toml dosyasını, birlikte getirdiği dosyaları) tanımlar ve yüklenirken hiçbir şey çalıştırılmaz:
>>> from datasets import load_dataset
>>> dataset = load_dataset("harborframework/terminal-bench")
>>> dataset["train"][0]["task_id"]
'tasks/atrx-vep-crispr'Daha fazla ayrıntı için ajan değerlendirme görevlerini nasıl yükleyeceğiniz kılavuzuna göz atın.
PDB
PDB (Protein Data Bank), 3B makromoleküler yapıları temsil etmek için kullanılan geleneksel sabit genişlikli formattır. mmCIF modern standart olsa da PDB hâlâ yaygın olarak kullanılmakta ve birçok tarihsel veri seti bu formattadır.
Her satır, ImageFolder ile aynı klasör düzenini izleyen bir yapı dosyasıdır: alt klasör adları etiketlere dönüşür ve metadata.csv/metadata.jsonl dosyası yapı başına meta veriler ekler. structure sütunu, format="pdb" ile BioStructure kullanır ve dosyanın modellerini, zincirlerini, kalıntılarını ve atomlarını içeren bir Bio.PDB.Structure.Structure nesnesine çözümlenir. Çözümleme için biopython gereklidir; bu kütüphane olmadan çözümlenmiş bir yapıya erişim ImportError hatası verir.
Bir dizinden PDB dosyalarını yüklemek için:
>>> from datasets import BioStructure, load_dataset
>>> dataset = load_dataset("pdb", data_dir="path/to/structures")
>>> dataset["train"].features["structure"]
BioStructure(format='pdb', decode=True)Çözümleme yapmadan veya biopython gerektirmeden alttaki {"bytes": ..., "path": ...} sözlüğüne erişmek için sütunu decode=False ile dönüştürün:
>>> dataset = dataset.cast_column("structure", BioStructure(format="pdb", decode=False))Uzantılar .pdb ve .ent desteklenir.
SQL
Veritabanı içeriğini, veritabanınıza bağlanmak için URI'yi belirterek from_sql() ile okuyun. Hem tablo adlarını hem de sorguları okuyabilirsiniz:
>>> from datasets import Dataset
# load entire table
>>> dataset = Dataset.from_sql("data_table_name", con="sqlite:///sqlite_file.db")
# load from query
>>> dataset = Dataset.from_sql("SELECT text FROM table WHERE length(text) > 100 LIMIT 10", con="sqlite:///sqlite_file.db")Daha fazla ayrıntı için SQL veritabanlarından tabular veri kümelerini nasıl yüklenir kılavuzuna göz atın.
WebDataset
WebDataset formatı TAR arşivlerine dayanır ve büyük görüntü veri kümeleri için uygundur.
Boyutları nedeniyle WebDatasets genellikle akış modunda yüklenir (streaming=True kullanılarak).
Bir WebDataset'i şu şekilde yükleyebilirsiniz:
>>> from datasets import load_dataset
>>>
>>> path = "path/to/train/*.tar"
>>> dataset = load_dataset("webdataset", data_files={"train": path}, split="train", streaming=True)HTTP üzerinden uzak WebDatasets yüklemek için bunun yerine URL'leri iletin:
>>> from datasets import load_dataset
>>>
>>> base_url = "https://huggingface.co/datasets/lhoestq/small-publaynet-wds/resolve/main/publaynet-train-{i:06d}.tar"
>>> urls = [base_url.format(i=i) for i in range(4)]
>>> dataset = load_dataset("webdataset", data_files={"train": urls}, split="train", streaming=True)mmCIF
mmCIF (makromoleküler kristalografik bilgi dosyası), 3B makromoleküler yapıları temsil etmek için kullanılan modern standart biçimdir ve 2014'ten bu yana Protein Veri Bankası (PDB) tarafından kullanılmaktadır.
Her satır, ImageFolder ile aynı klasör düzenini izleyen bir yapı dosyasıdır: alt klasör adları etiketlere dönüşür ve metadata.csv/metadata.jsonl dosyası yapı başına meta veriler ekler. structure sütunu, format="mmcif" ile BioStructure kullanır ve dosyanın modellerini, zincirlerini, kalıntılarını ve atomlarını içeren bir Bio.PDB.Structure.Structure nesnesine çözümlenir. Çözümleme için biopython gereklidir; bu kütüphane olmadan çözümlenmiş bir yapıya erişim ImportError hatası verir.
Bir dizinden mmCIF dosyalarını yüklemek için:
>>> from datasets import BioStructure, load_dataset
>>> dataset = load_dataset("mmcif", data_dir="path/to/structures")
>>> dataset["train"].features["structure"]
BioStructure(format='mmcif', decode=True)Çözümleme yapmadan veya biopython gerektirmeden alttaki {"bytes": ..., "path": ...} sözlüğüne erişmek için sütunu decode=False ile dönüştürün:
>>> dataset = dataset.cast_column("structure", BioStructure(format="mmcif", decode=False)).cif ve .mmcif uzantıları desteklenir.
GenBank
GenBank, NCBI tarafından nükleotit ve protein dizileri ile bunların anotasyonları için kullanılan metin tabanlı bir formattır. Dosyalar .gb, .gbk veya .genbank uzantısını (isteğe bağlı olarak sıkıştırılmış) kullanır ve her kaydın FEATURES bölümü yapılandırılmış nesnelere çözümlenir.
Hafifçe ayrıştırılmış sütunların yanı sıra, her satır biopython yüklüyken Bio.SeqRecord.SeqRecord olarak çözümlenen, BioSequence(format="genbank") türünde bir record sütunu içerir. Orijinal kayıt baytlarına {"bytes": ..., "path": None} olarak erişmek için bu sütunu BioSequence(format="genbank", decode=False) olarak dönüştürün veya biopython olmadan yalnızca ayrıştırılmış sütunları kullanmak için columns=[...] ile bunu atlayın.
GenBank dosyalarını yüklemek için:
>>> from datasets import load_dataset
>>> dataset = load_dataset("genbank", data_files="*.gb", split="train")Gerçek NCBI kayıtlarından oluşan küçük bir örnek veri setinde deneyebilirsiniz (bunlardan biri, sıkıştırılmış dosyaların şeffaf şekilde yüklendiğini göstermek için gzip ile sıkıştırılmıştır):
>>> from datasets import load_dataset
>>> dataset = load_dataset("ermiaazarkhalili/datasets-genbank-test", data_files="*.gb*", split="train")
>>> dataset[0]["locus_name"], dataset[0]["organism"], dataset[0]["length"]FASTQ
FASTQ, nükleotit dizilerini kalite puanlarıyla birlikte depolamak için kullanılan, yüksek verimli dizileme verileri için yaygın olarak kullanılan metin tabanlı bir formattır.
Bir FASTQ dosyası yükleyin:
>>> from datasets import load_dataset
>>> dataset = load_dataset("fastq", data_files="reads.fq")Yükleme aracı beş sütun döndürür:
| Sütun | Tür | Açıklama |
|---|---|---|
id | string | Dizi tanımlayıcısı (@ sonrası ilk kelime) |
description | string | Tam açıklama satırı (id'den sonraki her şey) |
sequence | large_string | Nükleotit dizisi |
quality | large_string | ASCII kodlanmış kalite puanları |
record | BioSequence | format="fastq" ile her kaydın orijinal baytları saklanır ve erişildiğinde Biopython SeqRecord olarak çözümlenir. |
Ayrıştırılan sütunların okunması için Biopython gerekmez; record sütununu columns ile dışarıda bırakın veya dataset.cast_column("record", BioSequence(decode=False)) ( datasets içinden içe aktarılır) kullanarak {"bytes": ..., "path": None} depolamasına çözümleme yapmadan erişin.
Yalnızca belirli sütunları yükleyin:
>>> dataset = load_dataset("fastq", data_files="reads.fq", columns=["sequence", "quality"])Sıkıştırılmış dosyalar (.fq.gz, .fastq.gz, .fq.bz2, .fq.xz) otomatik olarak algılanır ve açılır.
FASTA
FASTA, nükleotit dizilerini (DNA/RNA) veya peptit dizilerini (proteinler) temsil etmek için kullanılan, biyoinformatikte yaygın olarak başvurulan metin tabanlı bir formattır.
Bir FASTA dosyasını yüklemek için:
>>> from datasets import load_dataset
>>> dataset = load_dataset("fasta", data_files="sequences.fasta")Bu, aşağıdaki sütunlara sahip bir veri seti döndürür:
id: Sıralama tanımlayıcısı (>işaretinden sonraki ilk kelime)description: Tam açıklama satırı (id'den sonraki her şey)sequence: Biyolojik dizi (DNA/RNA/protein)record:format="fasta"biçiminde, her kaydın orijinal baytlarını saklayan ve erişildiğinde BiopythonSeqRecordolarak çözümlenen bir BioSequence.
Ayrıştırılan sütunların okunması için Biopython gerekmez; record sütununu columns ile dışarıda bırakın veya dataset.cast_column("record", BioSequence(decode=False)) ( datasets içinden içe aktarılır) kullanarak {"bytes": ..., "path": None} depolamasına çözümleme yapmadan erişin.
Yalnızca belirli sütunları da yükleyebilirsiniz:
>>> dataset = load_dataset("fasta", data_files="sequences.fa", columns=["id", "sequence"])Çeşitli uzantılara sahip FASTA dosyaları desteklenir: .fa, .fasta, .fna (nükleik asit), .ffn (gen bölgelerinin nükleotidi), .faa (amino asit) ve .frn (kodlamayan RNA). Sıkıştırılmış dosyalar (gzip, bzip2, xz) otomatik olarak algılanır ve açılır.
Uzak dosyalar
Uzak dosyalarınız büyük olasılıkla csv, json, txt, parquet veya desteklenen herhangi bir formatta saklanıyorsa, uzak yollarını belirtirseniz load_dataset() fonksiyonu bunları yükleyebilir:
- Herkese açık çevrimiçi dosyalar için
https://URL'leri, örneğindata_files=["https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v2.0.json"] - Hugging Face'teki herhangi bir Veri seti deposu veya Depolama kovası içindeki dosyalar için
hf://URL'leri, örneğindata_files=["hf://datasets/karpathy/tinystories-gpt4-clean/tinystories_gpt4_clean.parquet"]veyadata_files=["hf://buckets/julien-c/my-training-bucket/julien/affluence.csv"]
Çok İşlemcili
Bir veri seti birden fazla dosyadan (bunlara “shard” diyoruz) oluşuyorsa, veri setinin indirilme ve hazırlanma adımını önemli ölçüde hızlandırmak mümkündür.
Bir veri setini paralel olarak hazırlamak için kaç süreç kullanmak istediğinizi num_proc ile seçebilirsiniz.
Bu durumda, her sürece hazırlanmak üzere shard'ların bir alt kümesi verilir:
from datasets import load_dataset
imagenet = load_dataset("timm/imagenet-1k-wds", num_proc=8)
ml_librispeech_spanish = load_dataset("facebook/multilingual_librispeech", "spanish", num_proc=8)Bellek içi veri
🤗 Datasets, Python sözlükleri ve Pandas DataFrames gibi bellek içi veri yapılarından doğrudan bir Dataset oluşturmanıza da olanak tanır.
Python sözlüğü
Python sözlüklerini from_dict() ile yükleyin:
>>> from datasets import Dataset
>>> my_dict = {"a": [1, 2, 3]}
>>> dataset = Dataset.from_dict(my_dict)Python sözlük listesi
Bir Python sözlükleri listesini from_list() ile yükleyin:
>>> from datasets import Dataset
>>> my_list = [{"a": 1}, {"a": 2}, {"a": 3}]
>>> dataset = Dataset.from_list(my_list)Python üreteci
Bir Python üretecisinden from_generator() ile bir veri seti oluşturun:
>>> from datasets import Dataset
>>> def my_gen():
... for i in range(1, 4):
... yield {"a": i}
...
>>> dataset = Dataset.from_generator(my_gen)Bu yaklaşım, kullanılabilir bellekten daha büyük verilerin yüklenmesini destekler.
gen_kwargs parametresine listeler geçirerek parçalı bir veri seti de tanımlayabilirsiniz:
>>> def gen(shards):
... for shard in shards:
... with open(shard) as f:
... for line in f:
... yield {"line": line}
...
>>> shards = [f"data{i}.txt" for i in range(32)]
>>> ds = IterableDataset.from_generator(gen, gen_kwargs={"shards": shards})
>>> ds = ds.shuffle(seed=42, buffer_size=10_000) # shuffles the shards order + uses a shuffle buffer
>>> from torch.utils.data import DataLoader
>>> dataloader = DataLoader(ds.with_format("torch"), num_workers=4) # give each worker a subset of 32/4=8 shardsPandas DataFrame
Pandas veri çerçevelerini from_pandas() ile yükleyin:
>>> from datasets import Dataset
>>> import pandas as pd
>>> df = pd.DataFrame({"a": [1, 2, 3]})
>>> dataset = Dataset.from_pandas(df)Daha fazla ayrıntı için Pandas Veri Çerçevelerinden tabular veri kümelerini nasıl yüklenir kılavuzuna göz atın.
Çevrimdışı
İnternet bağlantınız olmasa bile bir veri seti yüklemek hâlâ mümkündür. Daha önce Hub deposundan bir veri seti indirdiyseniz, önbelleğe alınmış olmalıdır. Bu, veri setini önbellekten yeniden yükleyip çevrimdışı olarak kullanabileceğiniz anlamına gelir.
İnternet erişiminin olmayacağını biliyorsanız, 🤗 Datasets’i tam çevrimdışı modda çalıştırabilirsiniz. Bu, Dataset builder indirme işlemi zaman aşımına uğramayı beklemek yerine 🤗 Datasets’in doğrudan önbellekte aramasını sağladığı için zaman kazandırır. Tam çevrimdışı modu etkinleştirmek için HF_HUB_OFFLINE ortam değişkenini 1 olarak ayarlayın.
Slice bölümleri
Bir bölünmenin yalnızca belirli dilimlerini yüklemeyi de seçebilirsiniz. Bir bölünmeyi dilimleme için iki seçenek vardır: dizgiler veya ReadInstruction API'si. Basit durumlar için dizgiler daha kompakt ve okunabilirken, ReadInstruction değişken dilimleme parametreleriyle kullanımı daha kolaydır.
Bir train ve test bölünmesini birleştirin:
>>> train_test_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train+test")train bölüntüsünün belirli satırlarını seçin:
>>> train_10_20_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[10:20]")Veya bir bölünmenin yüzdesini seçin:
>>> train_10pct_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[:10%]")Her bölmeden bir yüzde kombinasyonu seçin:
>>> train_10_80pct_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[:10%]+train[-80%:]")Son olarak, çapraz doğrulamalı bölümler bile oluşturabilirsiniz. Aşağıdaki örnek, 10 katlı çapraz doğrulamalı bölümler oluşturur. Her doğrulama veri seti %10'luk bir parçadır ve eğitim veri seti, kalan tamamlayıcı %90'lık parçayı oluşturur:
>>> val_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=[f"train[{k}%:{k+10}%]" for k in range(0, 100, 10)])
>>> train_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=[f"train[:{k}%]+train[{k+10}%:]" for k in range(0, 100, 10)])Yüzde dilimleme ve yuvarlama
Varsayılan davranış, istenen dilim sınırlarının 100'e tam bölünmediği veri kümeleri için sınırları en yakın tam sayıya yuvarlamaktır. Aşağıda gösterildiği gibi, bazı dilimler diğerlerinden daha fazla örnek içerebilir. Örneğin, aşağıdaki eğitim bölmesi 999 kayıt içeriyorsa:
# 19 records, from 500 (included) to 519 (excluded).
>>> train_50_52_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[50%:52%]")
# 20 records, from 519 (included) to 539 (excluded).
>>> train_52_54_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[52%:54%]")Eşit boyutlu bölümler istiyorsanız, bunun yerine pct1_dropremainder yuvarlama yöntemini kullanın. Bu yöntem, belirtilen yüzde sınırlarını %1'in katları olarak ele alır.
# 18 records, from 450 (included) to 468 (excluded).
>>> train_50_52pct1_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=datasets.ReadInstruction("train", from_=50, to=52, unit="%", rounding="pct1_dropremainder"))
# 18 records, from 468 (included) to 486 (excluded).
>>> train_52_54pct1_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=datasets.ReadInstruction("train",from_=52, to=54, unit="%", rounding="pct1_dropremainder"))
# Or equivalently:
>>> train_50_52pct1_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[50%:52%](pct1_dropremainder)")
>>> train_52_54pct1_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[52%:54%](pct1_dropremainder)")
pct1_dropremainderyuvarlama işlemi, veri setinizdeki örnek sayısı 100’e tam bölünmüyorsa veri setindeki son örnekleri kırpabilir.
Sorun Giderme
Bazen bir veri seti yüklerken beklenmedik sonuçlarla karşılaşabilirsiniz. Karşılaşabileceğiniz en yaygın iki sorun, bir veri setini manuel olarak indirmek ve bir veri setinin özelliklerini belirtmektir.
Özellikleri belirtin
Yerel dosyalardan bir veri seti oluşturduğunuzda, Features Apache Arrow tarafından otomatik olarak çıkarılır. Ancak veri setinin özellikleri her zaman beklentilerinizle örtüşmeyebilir veya özellikleri kendiniz tanımlamak isteyebilirsiniz. Aşağıdaki örnek, ClassLabel özelliğiyle özel etiketler nasıl ekleyebileceğinizi göstermektedir.
Features sınıfını kullanarak kendi etiketlerinizi tanımlayarak başlayın:
>>> class_names = ["sadness", "joy", "love", "anger", "fear", "surprise"]
>>> emotion_features = Features({'text': Value('string'), 'label': ClassLabel(names=class_names)})Ardından, load_dataset() içinde features parametresini az önce oluşturduğunuz özelliklerle belirtin:
>>> dataset = load_dataset('csv', data_files=file_dict, delimiter=';', column_names=['text', 'label'], features=emotion_features)Şimdi veri seti özelliklerinize baktığınızda, tanımladığınız özel etiketleri kullandığını görebilirsiniz:
>>> dataset['train'].features
{'text': Value('string'),
'label': ClassLabel(names=['sadness', 'joy', 'love', 'anger', 'fear', 'surprise'])}