Datasets documentation

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

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

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

يمكنك تحميل مجموعة بيانات صوتية باستخدام ميزة Audio التي تقوم تلقائيًا بفك ترميز ملفات الصوت وإعادة أخذ عيناتها عند وصولك إلى الأمثلة. يعتمد فك ترميز الصوت على حزمة بايثون torchcodec، والتي تستخدم مكتبة FFmpeg بلغة C في الخلفية.

التثبيت

للتعامل مع مجموعات بيانات الصوت، يجب أن تكون تبعيات audio مثبّتة. اطّلع على دليل التثبيت لمعرفة كيفية تثبيتها.

الملفات المحلية

يمكنك تحميل مجموعة بياناتك الخاصة باستخدام المسارات إلى ملفات الصوت الخاصة بك. استخدم دالة cast_column() لأخذ عمود من مسارات ملفات الصوت، وتحويله إلى ميزة Audio:

>>> audio_dataset = Dataset.from_dict({"audio": ["path/to/audio_1", "path/to/audio_2", ..., "path/to/audio_n"]}).cast_column("audio", Audio())
>>> audio_dataset[0]["audio"]
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>

AudioFolder

يمكنك أيضًا تحميل مجموعة بيانات باستخدام منشئ مجموعات البيانات AudioFolder. ولا يتطلب ذلك كتابة مُحمِّل بيانات مخصص، مما يجعله مفيدًا لإنشاء وتحميل مجموعات بيانات صوتية تضم آلاف الملفات الصوتية بسرعة.

AudioFolder مع البيانات الوصفية

لربط ملفات الصوت لديك بمعلومات البيانات الوصفية، تأكد من أن مجموعة البيانات تحتوي على ملف metadata.csv. قد يبدو هيكل مجموعة البيانات كما يلي:

folder/train/metadata.csv
folder/train/first_audio_file.mp3
folder/train/second_audio_file.mp3
folder/train/third_audio_file.mp3

يجب أن يحتوي ملف metadata.csv الخاص بك على عمود file_name يربط ملفات الصوت ببياناتها الوصفية. قد يبدو ملف metadata.csv مثالاً على ذلك على النحو التالي:

file_name,transcription
first_audio_file.mp3,znowu się duch z ciałem zrośnie w młodocianej wstaniesz wiosnie i możesz skutkiem tych leków umierać wstawać wiek wieków dalej tam były przestrogi jak siekać głowę jak nogi
second_audio_file.mp3,już u źwierzyńca podwojów król zasiada przy nim książęta i panowie rada a gdzie wzniosły krążył ganek rycerze obok kochanek król skinął palcem zaczęto igrzysko
third_audio_file.mp3,pewnie kędyś w obłędzie ubite minęły szlaki zaczekajmy dzień jaki poślemy szukać wszędzie dziś jutro pewnie będzie posłali wszędzie sługi czekali dzień i drugi gdy nic nie doczekali z płaczem chcą jechać dali

AudioFolder سيحمّل بيانات الصوت ويُنشئ عمود transcription يحتوي على النصوص المستخرجة من metadata.csv:

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")

بالنسبة إلى مجموعات البيانات المحلية، يعادل هذا تمرير audiofolder يدويًا في load_dataset() والمجلد في data_dir:

>>> dataset = load_dataset("audiofolder", data_dir="/path/to/folder")

يمكن أيضًا تحديد البيانات الوصفية بصيغة JSON Lines، وفي هذه الحالة استخدم metadata.jsonl كاسم لملف البيانات الوصفية. تكون هذه الصيغة مفيدة في السيناريوهات التي يكون فيها أحد الأعمدة معقدًا، مثل قائمة من الأعداد العشرية، لتجنب أخطاء التحليل أو قراءة القيم المعقدة كنصوص.

لتجاهل المعلومات في ملف البيانات الوصفية، اضبط drop_metadata=True في load_dataset():

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)

إذا لم يكن لديك ملف بيانات وصفية، يستنتج AudioFolder تلقائيًا اسم التسمية من اسم المجلد. إذا كنت تريد حذف التسميات المُنشأة تلقائيًا، فاضبط drop_labels=True. في هذه الحالة، لن يحتوي مجموعة البيانات الخاصة بك إلا على عمود صوتي:

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)

وأخيرًا، يتيح لك الحجة filters تحميل مجموعة فرعية فقط من مجموعة البيانات، بناءً على شرط يتعلق بالتسمية أو البيانات الوصفية. وهذا مفيد بشكل خاص إذا كانت البيانات الوصفية بصيغة Parquet، لأن هذه الصيغة تتيح التصفية السريعة. كما يُنصح باستخدام هذه الحجة مع streaming=True، لأن مجموعة البيانات تُحمَّل بالكامل قبل التصفية افتراضيًا.

>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)

لمزيد من المعلومات حول إنشاء مجموعة بيانات AudioFolder خاصة بك، راجع دليل إنشاء مجموعة بيانات صوتية.

للاطلاع على دليل حول كيفية تحميل أي نوع من مجموعات البيانات، راجع دليل التحميل العام.

فك ترميز الصوت

بشكل افتراضي، يتم فك ترميز ملفات الصوت بشكل تسلسلي ككائنات AudioDecoder من torchcodec عند تكرار مجموعة البيانات. ومع ذلك، من الممكن تسريع مجموعة البيانات بشكل كبير باستخدام فك الترميز متعدد الخيوط:

>>> import os
>>> num_threads = num_threads = min(32, (os.cpu_count() or 1) + 4)
>>> dataset = dataset.decode(num_threads=num_threads)
>>> for example in dataset:  # up to 20 times faster !
...     ...

يمكنك تفعيل تعدد الخيوط باستخدام num_threads. وهذا مفيد بشكل خاص لتسريع بث البيانات عن بُعد. ومع ذلك، قد يكون أبطأ من num_threads=0 للبيانات المحلية على الأقراص سريعة.

إذا لم تكن مهتمًا بالصور المُفكَّكة كمصفوفات NumPy وتفضل الوصول إلى المسار/البايتات بدلاً من ذلك، يمكنك تعطيل فك الترميز:

>>> dataset = dataset.decode(False)

ملاحظة: IterableDataset.decode() متاح حاليًا فقط لمجموعات البيانات التي يتم بثها.

Update on GitHub