Datasets documentation
Veri seti özellikleri
Veri seti özellikleri
Features, bir veri setinin iç yapısını tanımlar. Temel olarak kullanılan seriye alma biçimini belirtmek için kullanılır. Ancak sizin için daha ilginç olan, Features'ın sütun adları ve türlerinden ClassLabel'a kadar her şey hakkında yüksek düzeyde bilgi içermesidir. Features'ı bir veri setinin omurgası olarak düşünebilirsiniz.
Features biçimi basittir: dict[column_name, column_type]. Sütun adı ve sütun türü çiftlerinden oluşan bir sözlüktür. Sütun türü, sahip olduğunuz verinin türünü açıklamak için geniş bir seçenek yelpazesi sunar.
GLUE benchmark’indeki MRPC veri setinin özelliklerine bir göz atalım:
>>> from datasets import load_dataset
>>> dataset = load_dataset('nyu-mll/glue', 'mrpc', split='train')
>>> dataset.features
{'idx': Value('int32'),
'label': ClassLabel(names=['not_equivalent', 'equivalent']),
'sentence1': Value('string'),
'sentence2': Value('string'),
}Value özelliği 🤗 Datasets'e şunu söyler:
idxveri türüint32'dir.sentence1vesentence2veri türleristring'dir.
🤗 Datasets, bool, float32 ve binary gibi birçok başka veri türünü de destekler.
Desteklenen veri türlerinin tam listesi için Value'a bakın.
ClassLabel özelliği, 🤗 Datasets'e label sütununun iki sınıf içerdiğini bildirir. Sınıflar not_equivalent ve equivalent olarak etiketlenmiştir. Etiketler veri setinde tamsayı olarak saklanır. Etiketleri aldığınızda ClassLabel.int2str() ve ClassLabel.str2int(), tamsayı değerden etiket adına ve tersine dönüşümü gerçekleştirir.
Veri türünüz nesnelerin bir listesini içeriyorsa, List özelliğini kullanmak istersiniz. SQuAD veri setini hatırlıyor musunuz?
>>> from datasets import load_dataset
>>> dataset = load_dataset('rajpurkar/squad', split='train')
>>> dataset.features
{'id': Value('string'),
'title': Value('string'),
'context': Value('string'),
'question': Value('string'),
'answers': {'text': List(Value('string')),
'answer_start': List(Value('int32'))}}answers alanı, özelliklerin sözlüğü kullanılarak oluşturulur ve text ile answer_start olmak üzere iki alt alan içerir; bunlar sırasıyla string ve int32 listeleridir.
flatten bölümüne bakarak iç içe geçmiş alt alanları kendi bağımsız sütunları olarak nasıl çıkarabileceğinizi öğrenebilirsiniz.
Dizi özellik tipi, çeşitli boyutlarda diziler oluşturmak için kullanışlıdır. Array2D kullanarak iki boyutlu, Array5D kullanarak ise beş boyutlu diziler oluşturabilirsiniz.
>>> features = Features({'a': Array2D(shape=(1, 3), dtype='int32')})Dizi tipi, dizinin ilk boyutunun dinamik olmasına da olanak tanır. Bu, cümleler gibi değişken uzunluklu dizileri, girdiyi tek bir şekle getirmek için dolgu veya kırpma işlemi yapmadan işlemek için kullanışlıdır.
>>> features = Features({'a': Array3D(shape=(None, 5, 2), dtype='int32')})Ses özelliği
Ses veri setleri, Audio türünde bir sütun içerir ve bu sütun üç önemli alan barındırır:
array: 1 boyutlu bir dizi olarak temsil edilen çözümlenmiş ses verisi.path: indirilen ses dosyasının yolu.sampling_rate: ses verisinin örneklem hızı.
Bir ses veri seti yükleyip ses sütununu çağırdığınızda Audio özelliği ses dosyasını otomatik olarak çözer ve yeniden örnekler:
>>> from datasets import load_dataset, Audio
>>> dataset = load_dataset("PolyAI/minds14", "en-US", split="train")
>>> dataset[0]["audio"]
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>Ses veri setine, önce satır diziniyle ve ardından
audiosütunuyla erişin -dataset[0]["audio"]- böylece veri setindeki tüm ses dosyalarının çözümlenmesini ve yeniden örneklenmesini önleyin. Aksi takdirde, büyük bir veri setiniz varsa bu yavaş ve zaman alıcı bir süreç olabilir.
decode=False ile Audio türü, ses dosyasını bir torchcodec AudioDecoder nesnesine çözümlemeden yalnızca dosyanın yolunu veya baytlarını verir,
>>> dataset = load_dataset("PolyAI/minds14", "en-US", split="train").cast_column("audio", Audio(decode=False))
>>> dataset[0]
{'audio': {'bytes': None,
'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav'},
'english_transcription': 'I would like to set up a joint account with my partner',
'intent_class': 11,
'lang_id': 4,
'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav',
'transcription': 'I would like to set up a joint account with my partner'}Görsel özellik
Görsel veri setleri, bayt olarak saklanan görsellerden PIL.Image nesnelerini yükleyen Image türünde bir sütuna sahiptir:
Bir görüntü veri seti yükleyip görüntü sütununu çağırdığınızda Image özelliği görüntü dosyasını otomatik olarak çözer:
>>> from datasets import load_dataset, Image
>>> dataset = load_dataset("AI-Lab-Makerere/beans", split="train")
>>> dataset[0]["image"]
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x500 at 0x125506CF8>Görüntü veri setine, veri setindeki tüm görüntü dosyalarını çözmekten kaçınmak için önce satır dizinine, ardından
imagesütununa erişerek indeksleyin -dataset[0]["image"]- . Aksi takdirde, büyük bir veri setiniz varsa bu yavaş ve zaman alıcı bir süreç olabilir.
decode=False ile Image türü, görüntü dosyasını PIL.Image olarak çözmeksizin yalnızca dosyanın yolunu veya baytlarını verir,
>>> dataset = load_dataset("AI-Lab-Makerere/beans", split="train").cast_column("image", Image(decode=False))
>>> dataset[0]["image"]
{'bytes': None,
'path': '/Users/username/.cache/huggingface/datasets/downloads/extracted/772e7c1fba622cff102b85dd74bcce46e8168634df4eaade7bedd3b8d91d3cd7/train/healthy/healthy_train.265.jpg'}Veri setine bağlı olarak, yerel olarak indirilen görüntünün yolunu alabilir veya veri seti bireysel dosyalardan oluşmuyorsa görüntünün içeriğini bayt olarak alabilirsiniz.
Ayrıca, numpy dizilerinden bir görüntü veri seti de tanımlayabilirsiniz:
>>> ds = Dataset.from_dict({"i": [np.zeros(shape=(16, 16, 3), dtype=np.uint8)]}, features=Features({"i": Image()}))Ve bu durumda numpy dizileri PNG (veya piksel değerlerinin hassasiyeti önemliyse TIFF) olarak kodlanır.
RGB veya RGBA gibi çok kanallı diziler için yalnızca uint8 desteklenir. Daha yüksek bir hassasiyet kullanırsanız bir uyarı alınır ve dizi uint8'e dönüştürülür.
Gri tonlu görüntülerde, Pillow ile uyumlu olduğu sürece istediğiniz tamsayı veya kayan nokta hassasiyetini kullanabilirsiniz. Görüntünüzün tamsayı veya kayan nokta hassasiyeti çok yüksekse bir uyarı gösterilir ve bu durumda dizi aşağıya dönüştürülür: int64 dizi int32'ye, float64 dizi ise float32'ye dönüştürülür.
Mesh özelliği
Mesh veri kümeleri, 3D mesh dosyalarını trimesh nesneleri olarak yükleyen Mesh türünde bir sütuna sahiptir.
Bir mesh veri seti yükleyip mesh sütununu çağırdığınızda Mesh özelliği mesh dosyasını otomatik olarak çözer:
>>> from datasets import load_dataset, Mesh
>>> dataset = load_dataset("VINAY-UMRETHE/My-Mesh-Dataset", split="train")
>>> dataset[0]["mesh"]
<trimesh.Scene(len(geometry)=33)>Dosya içeriğine bağlı olarak trimesh, bir trimesh.Trimesh nesnesi veya bir trimesh.Scene nesnesi döndürebilir.
Satır indeksini önce, ardından
meshsütununu kullanarak mesh veri setine erişin -dataset[0]["mesh"]- böylece veri setindeki tüm mesh dosyalarının çözümlenmesini önleyin. Aksi takdirde, büyük bir veri setiniz varsa bu yavaş ve zaman alıcı bir süreç olabilir.
decode=False ile Mesh tipi, dosyayı trimesh ile çözmeksizin mesh dosyasının yolunu veya baytlarını verir:
>>> dataset = load_dataset("VINAY-UMRETHE/My-Mesh-Dataset", split="train").cast_column("mesh", Mesh(decode=False))
>>> dataset[0]["mesh"]
{'bytes': b'...',
'path': '00001.glb'}Mesh özelliği .glb, .gltf, .ply ve .stl dosyalarını destekler. Gömülü baytlar için, mesh dosya türünü çıkarmak amacıyla depolanan path kullanılır.
Json özelliği
Veri kümeleri, sütun tabanlı bir biçim olan Arrow üzerine kuruludur ve bu nedenle her örneğin aynı tür ve alt türlere, sözlüklerin ise aynı anahtarlara ve değer türlerine sahip olmasını bekler. Bir veri kümesi yüklenirken alanların türleri eşleşmiyorsa hata oluşur ve sözlüklerdeki eksik alanlar, tüm sözlüklerin aynı anahtarlara ve değer türlerine sahip olması için None ile doldurulur.
Bunu önlemek ve hata olmadan karma tiplere izin vermek için on_mixed_types="use_json" kullanabilir veya Json tipiyle features= belirtebilirsiniz:
>>> ds = Dataset.from_dict({"a": [0, "foo", {"subfield": "bar"}]})
Traceback (most recent call last):
...
File "pyarrow/error.pxi", line 92, in pyarrow.lib.check_status
pyarrow.lib.ArrowInvalid: Could not convert 'foo' with type str: tried to convert to int64
>>> features = Features({"a": Json()})
>>> ds = Dataset.from_dict({"a": [0, "foo", {"subfield": "bar"}]}, features=features)
>>> ds.features
{'a': Json()}
>>> list(ds["a"])
[0, "foo", {"subfield": "bar"}]Bu, eksik alanların None ile doldurulmasını önlemek için, key ve değerleri keyfi olan sözlük listeleri için de kullanışlıdır:
>>> ds = Dataset.from_dict({"a": [[{"b": 0}, {"c": 0}]]})
>>> ds.features
{'a': List({'b': Value('int64'), 'c': Value('int64')})}
>>> list(ds["a"])
[[{'b': 0, 'c': None}, {'b': None, 'c': 0}]] # missing fields are filled with None
>>> features = Features({"a": List(Json())})
>>> ds = Dataset.from_dict({"a": [[{"b": 0}, {"c": 0}]]}, features=features)
>>> ds.features
{'a': List(Json())}
>>> list(ds["a"])
[[{'b': 0}, {'c': 0}]] # OKAraç çağırma verileri ve on_mixed_types="use_json" argümanı (manuel olarak features= belirtmek zorunda kalmamak için faydalı) içeren başka bir örnek:
>>> messages = [
... {"role": "user", "content": "Turn on the living room lights and play my electronic music playlist."},
... {"role": "assistant", "tool_calls": [
... {"type": "function", "function": {
... "name": "control_light",
... "arguments": {"room": "living room", "state": "on"}
... }},
... {"type": "function", "function": {
... "name": "play_music",
... "arguments": {"playlist": "electronic"} # mixed-type here since keys ["playlist"] and ["room", "state"] are different
... }}]
... },
... {"role": "tool", "name": "control_light", "content": "The lights in the living room are now on."},
... {"role": "tool", "name": "play_music", "content": "The music is now playing."},
... {"role": "assistant", "content": "Done!"}
... ]
>>> ds = Dataset.from_dict({"messages": [messages]}, on_mixed_types="use_json")
>>> ds.features
{'messages': List({'role': Value('string'), 'content': Value('string'), 'tool_calls': List(Json()), 'name': Value('string')})}
>>> ds[0][1]["tool_calls"][0]["function"]["arguments"]
{"room": "living room", "state": "on"}