Datasets documentation
البدء السريع
البدء السريع
يُعدّ هذا الدليل السريع موجّهًا للمطوّرين الذين هم على استعداد للغوص في الكود ورؤية مثال على كيفية دمج 🤗 Datasets في سير عمل تدريب نماذجهم. إذا كنت مبتدئًا، فننصحك بالبدء مع دروسنا التعليمية، حيث ستحصل على مقدمة أكثر شمولاً.
كل مجموعة بيانات فريدة، وقد تتطلب بعض المجموعات خطوات إضافية لتحضيرها للتدريب اعتمادًا على المهمة. لكن يمكنك دائمًا استخدام أدوات 🤗 Datasets لتحميل مجموعة بيانات ومعالجتها. أسرع وأسهل طريقة للبدء هي تحميل مجموعة بيانات موجودة من Hugging Face Hub. هناك آلاف مجموعات البيانات للاختيار من بينها، وتغطي العديد من المهام. اختر نوع مجموعة البيانات التي تريد العمل معها، ولنبدأ!
إعادة أخذ عينات من مجموعة بيانات صوتية وتجهيزها لنموذج يصنّف نوع مشكلة الخدمات المصرفية التي يتصل بها المتكلم.
تطبيق زيادة البيانات على مجموعة بيانات صور وتجهيزها لنموذج لتشخيص الأمراض في نباتات الفول.
Tokenize مجموعة بيانات وجعلها جاهزة لنموذج يحدد ما إذا كانت جملة من زوج من الجمل تحمل نفس المعنى.
اطّلع على الفصل 5 من دورة Hugging Face لمعرفة المزيد حول مواضيع أخرى مهمة مثل تحميل مجموعات البيانات عن بُعد أو محليًا، والأدوات لتنظيف مجموعة بيانات، وإنشاء مجموعة بياناتك الخاصة.
ابدأ بتثبيت 🤗 Datasets:
pip install datasets
🤗 تدعم مكتبة Datasets أيضًا صيغ بيانات الصوت والصور:
للتعامل مع مجموعات بيانات الصوت، قم بتثبيت ميزة Audio:
pip install datasets[audio]
للتعامل مع مجموعات بيانات الصور، قم بتثبيت ميزة Image:
pip install datasets[vision]
بالإضافة إلى 🤗 Datasets، تأكد من تثبيت إطار عمل التعلم الآلي المفضل لديك:
bash pip install torch
bash pip install tensorflow
الصوت
تُحمَّل مجموعات بيانات الصوت بنفس طريقة تحميل مجموعات بيانات النص. ومع ذلك، تتم معالجة مجموعة بيانات الصوت مسبقا بطريقة مختلفة قليلا. فبدلا من مُرمِّز، ستحتاج إلى مستخرج ميزات. وقد يتطلب إدخال الصوت أيضا إعادة أخذ عينات لمعدل العينات الخاص به ليتطابق مع معدل العينات للنموذج المُسبق التدريب الذي تستخدمه. في هذا الدليل السريع، ستُعدّ مجموعة بيانات MInDS-14 لتدريب نموذج وتصنيف مشكلة مصرفية يواجهها عميل.
1. حمّل مجموعة بيانات MInDS-14 من خلال تزويد الدالة load_dataset() باسم مجموعة البيانات، وإعداد مجموعة البيانات (ليس جميع مجموعات البيانات تحتوي على إعداد)، وقسم مجموعة البيانات:
>>> from datasets import load_dataset, Audio
>>> dataset = load_dataset("PolyAI/minds14", "en-US", split="train")2. ثم، حمّل نموذج Wav2Vec2 مُدرَّب مسبقًا ومستخرج الميزات المقابل له من مكتبة 🤗 Transformers. من الطبيعي تمامًا أن ترى تحذيرًا بعد تحميل النموذج يشير إلى أن بعض الأوزان لم يتم تهيئتها. وهذا متوقع لأنك تقوم بتحميل نقطة تحقق هذا النموذج للتدريب على مهمة أخرى.
>>> from transformers import AutoModelForAudioClassification, AutoFeatureExtractor
>>> model = AutoModelForAudioClassification.from_pretrained("facebook/wav2vec2-base")
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")3. تشير بطاقة مجموعة بيانات MInDS-14 إلى أن معدل أخذ العينات هو 8kHz، بينما تم تدريب نموذج Wav2Vec2 مسبقًا بمعدل أخذ عينات يبلغ 16kHZ. ستحتاج إلى رفع معدل أخذ العينات في عمود audio باستخدام الدالة cast_column() وخاصية Audio لمطابقة معدل أخذ العينات الخاص بالنموذج.
>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))
>>> dataset[0]["audio"]
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>4. أنشئ دالةً لمعالجة array الصوت مسبقًا باستخدام مستخرج الميزات، وقصّ التسلسلات وحشوها لتحويلها إلى متجهات مستطيلة منتظمة. أهم ما يجب تذكّره هو استدعاء array الصوت داخل مستخرج الميزات، لأن array - وهو إشارة الكلام الفعلية - هو مدخل النموذج.
بمجرد أن تمتلك دالة ما قبل المعالجة، استخدم دالة map() لتسريع المعالجة من خلال تطبيق الدالة على دفعات من الأمثلة في مجموعة البيانات.
>>> def preprocess_function(examples):
... audio_arrays = [x.get_all_samples().data for x in examples["audio"]]
... inputs = feature_extractor(
... audio_arrays,
... sampling_rate=16000,
... padding=True,
... max_length=100000,
... truncation=True,
... )
... return inputs
>>> dataset = dataset.map(preprocess_function, batched=True)5. استخدم دالة rename_column() لإعادة تسمية العمود intent_class إلى labels، وهو اسم المدخل المتوقع في Wav2Vec2ForSequenceClassification:
>>> dataset = dataset.rename_column("intent_class", "labels")6. اضبط تنسيق مجموعة البيانات وفقًا لإطار التعلم الآلي الذي تستخدمه.
استخدم دالة set_format() لضبط صيغة مجموعة البيانات إلى torch وتحديد الأعمدة التي تريد تنسيقها. تطبّق هذه الدالة التنسيق أثناء التشغيل. بعد التحويل إلى متجهات PyTorch، غلّف مجموعة البيانات في torch.utils.data.DataLoader:
>>> from torch.utils.data import DataLoader
>>> dataset.set_format(type="torch", columns=["input_values", "labels"])
>>> dataloader = DataLoader(dataset, batch_size=4)استخدم طريقة prepare_tf_dataset من 🤗 Transformers لتحضير مجموعة البيانات بحيث تكون متوافقة مع TensorFlow وجاهزة لتدريب/ضبط نموذج، حيث تغلف Dataset من HuggingFace كـ tf.data.Dataset مع التجميع والتدريج، مما يتيح تمريرها مباشرة إلى طرق Keras مثل fit() دون أي تعديل إضافي.
>>> import tensorflow as tf
>>> tf_dataset = model.prepare_tf_dataset(
... dataset,
... batch_size=4,
... shuffle=True,
... )7. ابدأ التدريب باستخدام إطار عمل تعلم الآلة الخاص بك! اطّلع على دليل تصنيف الصوت في 🤗 Transformers لمثال شامل من البداية إلى النهاية حول كيفية تدريب نموذج على مجموعة بيانات صوتية.
الرؤية
تُحمَّل مجموعات بيانات الصور بنفس طريقة تحميل مجموعات بيانات النصوص. ومع ذلك، بدلاً من استخدام مُرمِّز، ستحتاج إلى مستخرج ميزات لمعالجة المجموعة مسبقاً. يُعد تطبيق زيادة البيانات على الصور أمراً شائعاً في مجال الرؤية الحاسوبية لجعل النموذج أكثر مقاومة للمبالغة في التخصيص. يمكنك استخدام أي مكتبة لزيادة البيانات تريدها، ثم تطبيق عمليات الزيادة باستخدام 🤗 Datasets. في هذا الدليل السريع، ستقوم بتحميل مجموعة بيانات Beans وتجهيزها ليتمكن النموذج من التدريب عليها وتحديد الأمراض من صور الأوراق.
1. حمّل مجموعة بيانات Beans عن طريق تزويد دالة load_dataset() باسم مجموعة البيانات وقسم من مجموعة البيانات:
>>> from datasets import load_dataset, Image
>>> dataset = load_dataset("AI-Lab-Makerere/beans", split="train")تعتمد معظم نماذج الصور على صور بصيغة RGB. إذا كانت مجموعة بياناتك تحتوي على صور بصيغة مختلفة، يمكنك استخدام دالة cast_column() لضبط الصيغة إلى RGB:
>>> dataset = dataset.cast_column("image", Image(mode="RGB"))تحتوي مجموعة بيانات Beans على صور RGB فقط، لذا لا حاجة إلى هذه الخطوة هنا.
2. يمكنك الآن إضافة بعض عمليات زيادة البيانات باستخدام أي مكتبة (Albumentations، imgaug، Kornia) تفضلها. هنا، ستستخدم torchvision لتغيير خصائص اللون في صورة بشكل عشوائي:
>>> from torchvision.transforms import Compose, ColorJitter, ToTensor
>>> jitter = Compose(
... [ColorJitter(brightness=0.5, hue=0.5), ToTensor()]
... )3. أنشئ دالةً لتطبيق التحويل على مجموعة البيانات وتوليد مدخلات النموذج: pixel_values.
>>> def transforms(examples):
... examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]]
... return examples4. استخدم دالة with_transform() لتطبيق عمليات زيادة البيانات على الفور:
>>> dataset = dataset.with_transform(transforms)5. اضبط تنسيق مجموعة البيانات وفقًا لإطار التعلم الآلي الذي تستخدمه.
قم بتغليف مجموعة البيانات في torch.utils.data.DataLoader. ستحتاج أيضًا إلى إنشاء دالة collate لتجميع العينات في دفعات:
>>> from torch.utils.data import DataLoader
>>> def collate_fn(examples):
... images = []
... labels = []
... for example in examples:
... images.append((example["pixel_values"]))
... labels.append(example["labels"])
...
... pixel_values = torch.stack(images)
... labels = torch.tensor(labels)
... return {"pixel_values": pixel_values, "labels": labels}
>>> dataloader = DataLoader(dataset, collate_fn=collate_fn, batch_size=4)استخدم طريقة prepare_tf_dataset من 🤗 Transformers لتحضير مجموعة البيانات بحيث تكون متوافقة مع TensorFlow وجاهزة لتدريب/ضبط نموذج، حيث تغلف Dataset من HuggingFace كـ tf.data.Dataset مع التجميع والتدريج، مما يتيح تمريرها مباشرة إلى طرق Keras مثل fit() دون أي تعديل إضافي.
قبل أن تبدأ، تأكد من تثبيت أحدث إصدارات من albumentations وcv2:
pip install -U albumentations opencv-python
>>> import albumentations
>>> import numpy as np
>>> transform = albumentations.Compose([
... albumentations.RandomCrop(width=256, height=256),
... albumentations.HorizontalFlip(p=0.5),
... albumentations.RandomBrightnessContrast(p=0.2),
... ])
>>> def transforms(examples):
... examples["pixel_values"] = [
... transform(image=np.array(image))["image"] for image in examples["image"]
... ]
... return examples
>>> dataset.set_transform(transforms)
>>> tf_dataset = model.prepare_tf_dataset(
... dataset,
... batch_size=4,
... shuffle=True,
... )6. ابدأ التدريب باستخدام إطار عمل تعلم الآلة الخاص بك! اطّلع على دليل تصنيف الصور في 🤗 Transformers لمثال شامل من البداية إلى النهاية حول كيفية تدريب نموذج على مجموعة بيانات من الصور.
معالجة اللغة الطبيعية
يجب تقسيم النص إلى رموز فردية بواسطة tokenizer. في دليل البدء السريع، ستقوم بتحميل مجموعة بيانات التدريب Microsoft Research Paraphrase Corpus (MRPC) لتدريب نموذج يحدد ما إذا كانت جملة من جملتين تحملان نفس المعنى.
1. حمّل مجموعة بيانات MRPC من خلال تزويد الدالة load_dataset() باسم مجموعة البيانات، وإعداد مجموعة البيانات (ليس جميع مجموعات البيانات تحتوي على إعداد)، وقسم مجموعة البيانات:
>>> from datasets import load_dataset
>>> dataset = load_dataset("nyu-mll/glue", "mrpc", split="train")2. ثم، حمّل نموذج BERT مُدرَّب مسبقًا ومُقسِّم النص (tokenizer) المقابل له من مكتبة 🤗 Transformers. من الطبيعي تمامًا أن ترى تحذيرًا بعد تحميل النموذج يشير إلى أن بعض الأوزان لم يتم تهيئتها. وهذا متوقع لأنك تقوم بتحميل نقطة تحقق (checkpoint) لهذا النموذج لتدريبه على مهمة أخرى.
>>> from transformers import AutoModelForSequenceClassification, AutoTokenizer
>>> model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")
>>> tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")3. أنشئ دالة لتجزئة مجموعة البيانات، مع ضرورة تقصير النص وتعبئته للحصول على مصفوفات مستطيلة منتظمة. يولّد مجزئ الرموز ثلاث أعمدة جديدة في مجموعة البيانات: input_ids، وtoken_type_ids، وattention_mask. هذه هي مدخلات النموذج.
استخدم دالة map() لتسريع المعالجة من خلال تطبيق دالة الترميز الخاصة بك على دفعات من الأمثلة في مجموعة البيانات:
>>> def encode(examples):
... return tokenizer(examples["sentence1"], examples["sentence2"], truncation=True, padding="max_length")
>>> dataset = dataset.map(encode, batched=True)
>>> dataset[0]
{'sentence1': 'Amrozi accused his brother , whom he called " the witness " , of deliberately distorting his evidence .',
'sentence2': 'Referring to him as only " the witness " , Amrozi accused his brother of deliberately distorting his evidence .',
'label': 1,
'idx': 0,
'input_ids': [ 101, 7277, 2180, 5303, 4806, 1117, 1711, 117, 2292, 1119, 1270, 107, 1103, 7737, 107, 117, 1104, 9938, 4267, 12223, 21811, 1117, 2554, 119, 102, 11336, 6732, 3384, 1106, 1140, 1112, 1178, 107, 1103, 7737, 107, 117, 7277, 2180, 5303, 4806, 1117, 1711, 1104, 9938, 4267, 12223, 21811, 1117, 2554, 119, 102, 0, 0, ...],
'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, ...],
'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, ...]}4. أعد تسمية عمود label إلى labels، وهو اسم المدخل المتوقع في BertForSequenceClassification:
>>> dataset = dataset.map(lambda examples: {"labels": examples["label"]}, batched=True)5. اضبط تنسيق مجموعة البيانات وفقًا لإطار التعلم الآلي الذي تستخدمه.
استخدم دالة with_format() لضبط صيغة مجموعة البيانات إلى torch وتحديد الأعمدة التي تريد تنسيقها. تطبّق هذه الدالة التنسيق أثناء التشغيل. بعد التحويل إلى متجهات PyTorch، غلّف مجموعة البيانات داخل torch.utils.data.DataLoader:
>>> import torch
>>> dataset = dataset.select_columns(["input_ids", "token_type_ids", "attention_mask", "labels"])
>>> dataset = dataset.with_format(type="torch")
>>> dataloader = torch.utils.data.DataLoader(dataset, batch_size=32)استخدم طريقة prepare_tf_dataset من 🤗 Transformers لتحضير مجموعة البيانات بحيث تكون متوافقة مع TensorFlow وجاهزة لتدريب/ضبط نموذج، حيث تغلف Dataset من HuggingFace كـ tf.data.Dataset مع التجميع والتدريج، مما يتيح تمريرها مباشرة إلى طرق Keras مثل fit() دون أي تعديل إضافي.
>>> import tensorflow as tf
>>> tf_dataset = model.prepare_tf_dataset(
... dataset,
... batch_size=4,
... shuffle=True,
... )6. ابدأ التدريب باستخدام إطار عمل تعلم الآلة الخاص بك! اطّلع على دليل تصنيف النصوص في 🤗 Transformers لمثال شامل من البداية إلى النهاية حول كيفية تدريب نموذج على مجموعة بيانات نصية.
ما التالي؟
بهذا تكتمل عملية البدء السريع مع 🤗 Datasets! يمكنك تحميل أي مجموعة بيانات نصية أو صوتية أو صور باستخدام دالة واحدة، وجعلها جاهزة لتدريب نموذجك عليها.
للخطوات التالية، اطّلع على أدلة الاستخدام وتعلّم كيفية القيام بمهام أكثر تحديداً مثل تحميل صيغ مجموعات بيانات مختلفة، ومواءمة التسميات، وبث مجموعات البيانات الكبيرة. إذا كنت مهتماً بمعرفة المزيد عن المفاهيم الأساسية لـ 🤗 Datasets، فخذ فنجان قهوة واقرأ أدلة المفاهيم!
Update on GitHub