Datasets documentation
Charger les données audio
Charger les données audio
Vous pouvez charger un jeu de données audio à l'aide de la fonctionnalité Audio, qui décode et rééchantillonne automatiquement les fichiers audio lors de l'accès aux exemples.
Le décodage audio est basé sur le package python torchcodec, qui utilise la bibliothèque C FFmpeg en arrière-plan.
Installation
Pour travailler avec des jeux de données audio, vous devez avoir installé les dépendances audio.
Consultez le guide installation pour apprendre comment les installer.
Fichiers locaux
Vous pouvez charger votre propre jeu de données en utilisant les chemins d’accès à vos fichiers audio. Utilisez la fonction cast_column() pour prendre une colonne de chemins d’accès aux fichiers audio et la convertir en fonctionnalité 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
Vous pouvez également charger un jeu de données avec le constructeur de jeu de données AudioFolder. Il n’est pas nécessaire d’écrire un chargeur de données personnalisé, ce qui le rend utile pour créer et charger rapidement des jeux de données audio contenant plusieurs milliers de fichiers audio.
AudioFolder avec métadonnées
Pour lier vos fichiers audio aux informations de métadonnées, assurez-vous que votre jeu de données contient un fichier metadata.csv. La structure de votre jeu de données peut ressembler à :
folder/train/metadata.csv
folder/train/first_audio_file.mp3
folder/train/second_audio_file.mp3
folder/train/third_audio_file.mp3Votre fichier metadata.csv doit contenir une colonne file_name qui associe les fichiers audio à leurs métadonnées. Un exemple de fichier metadata.csv pourrait ressembler à ceci :
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 chargera les données audio et créera une colonne transcription contenant les textes de metadata.csv :
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")Pour les jeux de données locaux, cela équivaut à passer audiofolder manuellement dans load_dataset() et le répertoire dans data_dir :
>>> dataset = load_dataset("audiofolder", data_dir="/path/to/folder")Les métadonnées peuvent également être spécifiées au format JSON Lines, auquel cas utilisez metadata.jsonl comme nom du fichier de métadonnées. Ce format est utile dans les scénarios où l’une des colonnes est complexe, par exemple une liste de nombres flottants, afin d’éviter les erreurs d’analyse ou la lecture des valeurs complexes en tant que chaînes de caractères.
Pour ignorer les informations du fichier de métadonnées, définissez drop_metadata=True dans load_dataset() :
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)Si vous n’avez pas de fichier de métadonnées, AudioFolder infère automatiquement le nom de l’étiquette à partir du nom du répertoire.
Si vous souhaitez supprimer les étiquettes créées automatiquement, définissez drop_labels=True.
Dans ce cas, votre jeu de données ne contiendra qu’une colonne audio :
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)Enfin, l'argument filters permet de charger uniquement un sous-ensemble du jeu de données, en fonction d'une condition sur l'étiquette ou les métadonnées. C'est particulièrement utile si les métadonnées sont au format Parquet, car ce format permet un filtrage rapide. Il est également recommandé d'utiliser cet argument avec streaming=True, car par défaut le jeu de données est entièrement téléchargé avant le filtrage.
>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)Pour plus d'informations sur la création de votre propre jeu de données
AudioFolder, consultez le guide Créer un jeu de données audio.
Pour un guide sur la façon de charger n'importe quel type de jeu de données, consultez le guide de chargement général.
Décodage audio
Par défaut, les fichiers audio sont décodés séquentiellement en tant qu'objets AudioDecoder de torchcodec lorsque vous itérez sur un jeu de données.
Cependant, il est possible d'accélérer considérablement le jeu de données en utilisant un décodage multithreadé :
>>> 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 !
... ...Vous pouvez activer le multithreading à l'aide de num_threads. Cela est particulièrement utile pour accélérer le streaming de données distantes.
Cependant, cela peut être plus lent que num_threads=0 pour des données locales sur des disques rapides.
Si vous n'êtes pas intéressé par les images décodées en tableaux NumPy et préférez accéder au chemin/aux octets, vous pouvez désactiver le décodage :
>>> dataset = dataset.decode(False)Remarque : IterableDataset.decode() n'est actuellement disponible que pour les jeux de données en flux.
Update on GitHub