Datasets documentation

الاستخدام مع NumPy

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

الاستخدام مع NumPy

هذا المستند مقدمة سريعة لاستخدام datasets مع NumPy، مع تركيز خاص على كيفية استخراج كائنات numpy.ndarray من مجموعات البيانات لدينا، وكيفية استخدامها لتدريب نماذج مبنية على NumPy مثل نماذج scikit-learn.

تنسيق مجموعة البيانات

بشكل افتراضي، تُرجع مجموعات البيانات كائنات بايثون العادية: أعداد صحيحة، وأعداد عشرية، ونصوص، وقوائم، وما إلى ذلك.

للحصول على مصفوفات NumPy بدلاً من ذلك، يمكنك تعيين صيغة مجموعة البيانات إلى numpy:

>>> from datasets import Dataset
>>> data = [[1, 2], [3, 4]]
>>> ds = Dataset.from_dict({"data": data})
>>> ds = ds.with_format("numpy")
>>> ds[0]
{'data': array([1, 2])}
>>> ds[:2]
{'data': array([
    [1, 2],
    [3, 4]])}

يُعدّ كائن Dataset غلافًا لجدول Arrow، مما يتيح قراءة سريعة من المصفوفات في مجموعة البيانات إلى مصفوفات NumPy.

لاحظ أن الإجراء نفسه تمامًا ينطبق على كائنات DatasetDict، بحيث عند تعيين صيغة DatasetDict إلى numpy، سيتم تنسيق جميع Dataset الموجودة هناك كـ numpy:

>>> from datasets import DatasetDict
>>> data = {"train": {"data": [[1, 2], [3, 4]]}, "test": {"data": [[5, 6], [7, 8]]}}
>>> dds = DatasetDict.from_dict(data)
>>> dds = dds.with_format("numpy")
>>> dds["train"][:2]
{'data': array([
    [1, 2],
    [3, 4]])}

مصفوفات N الأبعاد

إذا كانت مجموعة بياناتك تتكون من مصفوفات ذات أبعاد N، فستلاحظ أنه افتراضياً تُعتبر المصفوفات نفسها إذا كان الشكل ثابتاً:

>>> from datasets import Dataset
>>> data = [[[1, 2],[3, 4]], [[5, 6],[7, 8]]]  # fixed shape
>>> ds = Dataset.from_dict({"data": data})
>>> ds = ds.with_format("numpy")
>>> ds[0]
{'data': array([[1, 2],
        [3, 4]])}
>>> from datasets import Dataset
>>> data = [[[1, 2],[3]], [[4, 5, 6],[7, 8]]]  # varying shape
>>> ds = Dataset.from_dict({"data": data})
>>> ds = ds.with_format("numpy")
>>> ds[0]
{'data': array([array([1, 2]), array([3])], dtype=object)}

ومع ذلك، تتطلب هذه المنطق غالبًا مقارنات بطيئة للأشكال ونسخًا للبيانات. لتجنب ذلك، يجب عليك استخدام نوع الميزة Array بشكل صريح وتحديد شكل متجهاتك:

>>> from datasets import Dataset, Features, Array2D
>>> data = [[[1, 2],[3, 4]],[[5, 6],[7, 8]]]
>>> features = Features({"data": Array2D(shape=(2, 2), dtype='int32')})
>>> ds = Dataset.from_dict({"data": data}, features=features)
>>> ds = ds.with_format("numpy")
>>> ds[0]
{'data': array([[1, 2],
        [3, 4]])}
>>> ds[:2]
{'data': array([[[1, 2],
         [3, 4]],
 
        [[5, 6],
         [7, 8]]])}

أنواع ميزات أخرى

يتم تحويل بيانات ClassLabel إلى مصفوفات بشكل صحيح:

>>> from datasets import Dataset, Features, ClassLabel
>>> labels = [0, 0, 1]
>>> features = Features({"label": ClassLabel(names=["negative", "positive"])})
>>> ds = Dataset.from_dict({"label": labels}, features=features)
>>> ds = ds.with_format("numpy")
>>> ds[:3]
{'label': array([0, 0, 1])}

تبقى كائنات النص والثنائية دون تغيير، لأن NumPy يدعم الأرقام فقط.

تُدعم أنواع الميزات Image وAudio أيضًا.

لاستخدام نوع الميزة Image، ستحتاج إلى تثبيت الإضافة vision عبر الأمر pip install datasets[vision].

>>> from datasets import Dataset, Features, Image
>>> images = ["path/to/image.png"] * 10
>>> features = Features({"image": Image()})
>>> ds = Dataset.from_dict({"image": images}, features=features)
>>> ds = ds.with_format("numpy")
>>> ds[0]["image"].shape
(512, 512, 3)
>>> ds[0]
{'image': array([[[ 255, 255, 255],
              [ 255, 255, 255],
              ...,
              [ 255, 255, 255],
              [ 255, 255, 255]]], dtype=uint8)}
>>> ds[:2]["image"].shape
(2, 512, 512, 3)
>>> ds[:2]
{'image': array([[[[ 255, 255, 255],
              [ 255, 255, 255],
              ...,
              [ 255, 255, 255],
              [ 255, 255, 255]]]], dtype=uint8)}

لاستخدام نوع الميزة Audio، ستحتاج إلى تثبيت الإضافة audio عبر الأمر pip install datasets[audio].

>>> from datasets import Dataset, Features, Audio
>>> audio = ["path/to/audio.wav"] * 10
>>> features = Features({"audio": Audio()})
>>> ds = Dataset.from_dict({"audio": audio}, features=features)
>>> ds = ds.with_format("numpy")
>>> ds[0]["audio"]["array"]
array([-0.059021  , -0.03894043, -0.00735474, ...,  0.0133667 ,
              0.01809692,  0.00268555], dtype=float32)
>>> ds[0]["audio"]["sampling_rate"]
array(44100, weak_type=True)

تحميل البيانات

لا تملك مكتبة NumPy أي قدرات مدمجة لتحميل البيانات، لذا ستحتاج إما إلى إنشاء مصفوفات NumPy مثل X, y لاستخدامها في scikit-learn، أو استخدام مكتبة مثل PyTorch لتحميل بياناتك باستخدام DataLoader.

استخدام with_format('numpy')

أسهل طريقة للحصول على مصفوفات NumPy من مجموعة بيانات هي استخدام طريقة with_format('numpy'). لنفترض أننا نريد تدريب شبكة عصبية على مجموعة بيانات MNIST المتوفرة في HuggingFace Hub على https://huggingface.co/datasets/mnist.

>>> from datasets import load_dataset
>>> ds = load_dataset("ylecun/mnist")
>>> ds = ds.with_format("numpy")
>>> ds["train"][0]
{'image': array([[  0,   0,   0, ...],
                       [  0,   0,   0, ...],
                       ...,
                       [  0,   0,   0, ...],
                       [  0,   0,   0, ...]], dtype=uint8),
 'label': array(5)}

بمجرد ضبط التنسيق، يمكننا تغذية مجموعة البيانات إلى النموذج القائم على NumPy على دفعات باستخدام طريقة Dataset.iter():

>>> for epoch in range(epochs):
...     for batch in ds["train"].iter(batch_size=32):
...         x, y = batch["image"], batch["label"]
...         ...
Update on GitHub