Datasets documentation
البناء والتحميل
البناء والتحميل
تبدأ تقريبًا كل عملية عمل في التعلم العميق بتحميل مجموعة بيانات، مما يجعلها واحدة من أهم الخطوات. مع 🤗 Datasets، يتوفر أكثر من 900 مجموعة بيانات لمساعدتك على البدء في مهمة معالجة اللغة الطبيعية الخاصة بك. كل ما عليك فعله هو استدعاء load_dataset() لإجراء خطوتك الأولى. هذه الدالة حصان عمل حقيقي بكل معنى الكلمة، لأنها تبني وتحمّل كل مجموعة بيانات تستخدمها.
ELI5: تحميل مجموعة البيانات
لنبدأ بشرح مبسّط على طريقة «اشرح لي وكأنّني في الخامسة من عمري».
مجموعة البيانات هي مجلد يحتوي على:
- بعض ملفات البيانات بتنسيقات عامة (JSON، CSV، Parquet، نص، إلخ)
- بطاقة مجموعة بيانات باسم
README.mdتحتوي على توثيق حول مجموعة البيانات بالإضافة إلى ترويسة YAML لتحديد وسوم وإعدادات مجموعات البيانات
تجلب الدالة load_dataset() مجموعة البيانات المطلوبة محليًا أو من Hugging Face Hub. يُعد Hub مستودعًا مركزيًا تُخزَّن فيه جميع مجموعات البيانات والنماذج الخاصة بـ Hugging Face.
إذا كانت مجموعة البيانات تحتوي على ملفات بيانات فقط، فإن load_dataset() يستنتج تلقائيًا كيفية تحميل ملفات البيانات من امتداداتها (json، csv، parquet، tsfile، txt، إلخ). في الخلفية، سيقوم 🤗 Datasets باستخدام DatasetBuilder مناسب بناءً على تنسيق ملفات البيانات. يوجد منشئ واحد لكل تنسيق ملف بيانات في 🤗 Datasets:
- datasets.packaged_modules.text.Text للنص
- datasets.packaged_modules.csv.Csv لملفات CSV وTSV
- datasets.packaged_modules.json.Json لملفات JSON و JSONL
- datasets.packaged_modules.parquet.Parquet لملفات Parquet
- datasets.packaged_modules.arrow.Arrow لـ Arrow (تنسيق الملفات البث)
- datasets.packaged_modules.sql.Sql لقواعد بيانات SQL
- datasets.packaged_modules.tsfile.TsFile لبيانات TsFile (البيانات الزمنية)
- datasets.packaged_modules.imagefolder.ImageFolder لمجلدات الصور
- datasets.packaged_modules.audiofolder.AudioFolder لمجلدات الصوت
اقرأ قسم Share لمعرفة المزيد حول كيفية مشاركة مجموعة بيانات.
🤗 Datasets يقوم بتنزيل ملفات مجموعة البيانات من الرابط الأصلي، ثم يولّد مجموعة البيانات ويخزّنها مؤقتًا في جدول Arrow على قرصك. إذا كنت قد نزّلت مجموعة البيانات من قبل، فسيقوم 🤗 Datasets بإعادة تحميلها من التخزين المؤقت لتوفير عنك عناء تنزيلها مرة أخرى.
الآن وقد أصبحت لديك فهم عام لكيفية بناء مجموعات البيانات، دعونا ننظر عن كثب في التفاصيل التقنية لكيفية عمل كل هذا.
بناء مجموعة بيانات
عند تحميل مجموعة بيانات لأول مرة، يقوم 🤗 Datasets بأخذ ملف البيانات الخام وبناءه في جدول من الصفوف والأعمدة المُعرَّفة الأنواع. هناك صفحتان رئيسيتان مسؤولتان عن بناء مجموعة البيانات: BuilderConfig و DatasetBuilder.

BuilderConfig
BuilderConfig هي فئة التهيئة الخاصة بـ DatasetBuilder. تحتوي BuilderConfig على السمات الأساسية التالية المتعلقة بمجموعة البيانات:
| الخاصية | الوصف |
|---|---|
name | الاسم المختصر للمجموعة. |
version | معرّف إصدار مجموعة البيانات. |
data_dir | يخزن المسار إلى مجلد محلي يحتوي على ملفات البيانات. |
data_files | يخزّن المسارات إلى ملفات البيانات المحلية. |
description | وصف مجموعة البيانات. |
إذا كنت ترغب في إضافة سمات إضافية إلى مجموعة البيانات الخاصة بك، مثل تسميات الفئات، يمكنك إنشاء فئة فرعية من الفئة الأساسية BuilderConfig. هناك طريقتان لتعبئة سمات فئة BuilderConfig أو فئة فرعية منها:
قدّم قائمةً بمحادثات BuilderConfig (أو فئة فرعية منها) محددة مسبقًا في خاصية
DatasetBuilder.BUILDER_CONFIGS()في مجموعات البيانات.عند استدعاء load_dataset()، تُستخدم أي معاملات كلمات مفتاحية ليست محددة للطريقة لتعيين السمات المرتبطة لفئة BuilderConfig. وسيؤدي ذلك إلى تجاوز السمات المحددة مسبقاً إذا تم اختيار تكوين معين.
يمكنك أيضًا تعيين DatasetBuilder.BUILDER_CONFIG_CLASS إلى أي فئة فرعية مخصصة من BuilderConfig.
DatasetBuilder
يتصل DatasetBuilder بجميع السمات داخل BuilderConfig لبناء مجموعة البيانات الفعلية.

توجد ثلاث طرق رئيسية في DatasetBuilder:
DatasetBuilder._info()مسؤول عن تحديد سمات مجموعة البيانات. عند استدعاءdataset.info، تُرجع 🤗 Datasets المعلومات المخزنة هنا. وبالمثل، يتم تحديد Features هنا أيضًا. تذكّر، Features تشبه هيكل مجموعة البيانات. فهي توفر أسماء وأنواع كل عمود.DatasetBuilder._split_generatorيقوم بتنزيل أو استرجاع ملفات البيانات المطلوبة، وتنظيمها إلى تقسيمات، وتعريف معاملات محددة لعملية التوليد. يحتوي هذا الأسلوب على DownloadManager يقوم بتنزيل الملفات أو جلبها من نظام الملفات المحلي لديك. داخل DownloadManager، يوجد أسلوب DownloadManager.download_and_extract() يقبل قاموسًا من عناوين URL لملفات البيانات الأصلية، وينزّل الملفات المطلوبة. تشمل المدخلات المقبولة: عنوان URL أو مسار واحد، أو قائمة/قاموس من عناوين URL أو مسارات. سيتم فك ضغط أي ملفات مضغوطة مثل أرشيفات TAR وGZIP وZIP تلقائيًا.بمجرد تنزيل الملفات، يقوم SplitGenerator بتنظيمها إلى تقسيمات. يحتوي SplitGenerator على اسم التقسيم، وأي حُجج بكلمات مفتاحية تُمرَّر إلى طريقة
DatasetBuilder._generate_examples. يمكن أن تكون الحُجج بكلمات مفتاحية خاصة بكل تقسيم، وعادةً ما تتضمن على الأقل المسار المحلي لملفات البيانات لكل تقسيم.تقرأ
DatasetBuilder._generate_examplesملفات البيانات الخاصة بقسم (split) وتحللها. ثم تُنتج أمثلةً للبيانات (dataset examples) وفقًا للتنسيق المحدد فيfeaturesمنDatasetBuilder._info(). مدخلDatasetBuilder._generate_examplesهو في الواقعfilepathالمُقدَّم في معاملات الكلمات المفتاحية (keyword arguments) للطريقة الأخيرة.يتم توليد مجموعة البيانات باستخدام مولّد بلغة بايثون، لا يُحمّل جميع البيانات في الذاكرة. ونتيجةً لذلك، يمكن للمولّد التعامل مع مجموعات بيانات كبيرة. ومع ذلك، قبل أن تُكتب العينات المولّدة إلى ملف مجموعة البيانات على القرص، تُخزَّن في مخزن مؤقت
ArrowWriter. وهذا يعني أن العينات المولّدة تُكتب على دفعات. إذا كانت عينات مجموعة البيانات تستهلك مساحة ذاكرة كبيرة (صور أو مقاطع فيديو)، فتأكد من تحديد قيمة منخفضة لخاصيةDEFAULT_WRITER_BATCH_SIZEفي DatasetBuilder. ننصح بعدم تجاوز حجم 200 ميغابايت.
الحفاظ على السلامة
لضمان اكتمال مجموعة البيانات، سيقوم load_dataset() بإجراء سلسلة من الاختبارات على الملفات التي تم تنزيلها للتأكد من وجود كل شيء. وبهذه الطريقة، لن تواجه أي مفاجآت عندما لا يتم توليد مجموعة البيانات المطلوبة كما هو متوقع. يتحقق load_dataset() مما يلي:
- عدد التقسيمات في
DatasetDictالمولّد. - عدد العينات في كل قسم من
DatasetDictالمولّد. - قائمة الملفات التي تم تنزيلها.
- ملخصات SHA256 للملفات التي تم تنزيلها (معطلة افتراضيًا).
إذا لم يجتز مجموعة البيانات عمليات التحقق، فمن المرجح أن قام مؤلف مجموعة البيانات بإجراء بعض التغييرات في ملفات البيانات.
في هذه الحالة، يُستدعى خطأ للتنبيه إلى أن مجموعة البيانات قد تغيّرت.
لتجاهل الخطأ، يجب تحديد verification_mode="no_checks" في load_dataset().
عندما ترى خطأً في التحقق، لا تتردد في فتح نقاش أو طلب سحب في تبويب "المجتمع" الخاص بمجموعة البيانات المعنية، حتى يتم تحديث فحوصات السلامة لتلك المجموعة.
الأمان
تُفحص مستودعات مجموعات البيانات على Hub بحثًا عن البرمجيات الخبيثة، لمزيد من المعلومات راجع هنا.
Update on GitHub