# Jeu de données audio

Ce guide vous montre comment configurer votre dépôt de jeu de données avec des fichiers audio. Vous trouverez des exemples de dépôts accompagnants dans cette [collection d’exemples de jeux de données audio](https://huggingface.co/collections/datasets-examples/audio-dataset-66aca0b73e8f69e3d069e607).

Un jeu de données doté d'une structure prise en charge et de [formats de fichiers](./datasets-adding#file-formats) appropriés dispose automatiquement d'un visualiseur de jeu de données sur sa page du Hub.

---

Des informations supplémentaires sur vos fichiers audio, telles que des transcriptions, sont chargées automatiquement dès lors que vous incluez ces informations dans un fichier de métadonnées (`metadata.csv`/`metadata.jsonl`/`metadata.parquet`).

Alternativement, les fichiers audio peuvent être stockés dans des fichiers Parquet ou dans des archives TAR suivant le format [WebDataset](https://github.com/webdataset/webdataset).

## Fichiers audio uniquement

Si votre jeu de données ne comporte qu'une seule colonne contenant de l'audio, vous pouvez simplement stocker vos fichiers audio à la racine :

```plaintext
my_dataset_repository/
├── 1.wav
├── 2.wav
├── 3.wav
└── 4.wav
```

ou dans un sous-répertoire :

```plaintext
my_dataset_repository/
└── audio
    ├── 1.wav
    ├── 2.wav
    ├── 3.wav
    └── 4.wav
```

Plusieurs [formats](./datasets-adding#file-formats) sont pris en charge simultanément, notamment AIFF, FLAC, MP3, OGG et WAV.

```plaintext
my_dataset_repository/
└── audio
    ├── 1.aiff
    ├── 2.ogg
    ├── 3.mp3
    └── 4.flac
```

Si vous avez plusieurs splits, vous pouvez placer vos fichiers audio dans des répertoires nommés en conséquence :

```plaintext
my_dataset_repository/
├── train
│   ├── 1.wav
│   └── 2.wav
└── test
    ├── 3.wav
    └── 4.wav
```

Voir [Noms de fichiers et splits](./datasets-file-names-and-splits) pour plus d’informations et d’autres façons d’organiser les données par splits.

## Colonnes supplémentaires

Si vous souhaitez inclure des informations supplémentaires sur votre jeu de données, comme la transcription, ajoutez-les sous forme de fichier `metadata.csv` dans votre dépôt. Cela vous permet de créer rapidement des jeux de données pour différentes tâches audio, comme la [synthèse vocale](https://huggingface.co/tasks/text-to-speech) ou la [reconnaissance automatique de la parole](https://huggingface.co/tasks/automatic-speech-recognition).

```plaintext
my_dataset_repository/
├── 1.wav
├── 2.wav
├── 3.wav
├── 4.wav
└── metadata.csv
```

Votre fichier `metadata.csv` doit contenir une colonne `file_name` qui associe les fichiers d’images à leurs métadonnées :

```csv
file_name,animal
1.wav,cat
2.wav,cat
3.wav,dog
4.wav,dog
```

Vous pouvez également utiliser un fichier [JSONL](https://jsonlines.org/) `metadata.jsonl` :

```jsonl
{"file_name": "1.wav","text": "cat"}
{"file_name": "2.wav","text": "cat"}
{"file_name": "3.wav","text": "dog"}
{"file_name": "4.wav","text": "dog"}
```

Et pour des jeux de données plus volumineux ou si vous êtes intéressé par des fonctionnalités avancées de récupération de données, vous pouvez utiliser un fichier [Parquet](https://parquet.apache.org/) `metadata.parquet`.

## Chemins relatifs

Le fichier de métadonnées doit se trouver soit dans le même répertoire que les fichiers audio auxquels il est lié, soit dans un répertoire parent, comme dans cet exemple :

```plaintext
my_dataset_repository/
└── test
    ├── audio
    │   ├── 1.wav
    │   ├── 2.wav
    │   ├── 3.wav
    │   └── 4.wav
    └── metadata.csv
```

Dans ce cas, la colonne `file_name` doit contenir un chemin relatif complet vers les fichiers audio, et non simplement le nom du fichier :

```csv
file_name,animal
audio/1.wav,cat
audio/2.wav,cat
audio/3.wav,dog
audio/4.wav,dog
```

Les fichiers de métadonnées ne peuvent pas être placés dans des sous-répertoires d'un répertoire contenant les fichiers audio.

Plus généralement, toute colonne nommée `file_name` ou `*_file_name` doit contenir le chemin relatif complet vers les fichiers audio.

Dans cet exemple, le répertoire `test` est utilisé pour définir le nom de la partition d'entraînement. Consultez [Noms de fichiers et partitions](./datasets-file-names-and-splits) pour plus d'informations.

## Classification audio

Pour les jeux de données de classification audio, vous pouvez également utiliser une configuration simple : utilisez des répertoires pour nommer les classes audio. Stockez vos fichiers audio dans une structure de répertoires comme :

```plaintext
my_dataset_repository/
├── cat
│   ├── 1.wav
│   └── 2.wav
└── dog
    ├── 3.wav
    └── 4.wav
```

Le jeu de données créé avec cette structure contient deux colonnes : `audio` et `label` (avec les valeurs `cat` et `dog`).

Vous pouvez également fournir plusieurs splits. Pour ce faire, votre répertoire de jeu de données doit avoir la structure suivante (voir [Noms de fichiers et splits](./datasets-file-names-and-splits) pour plus d’informations) :

```plaintext
my_dataset_repository/
├── test
│   ├── cat
│   │   └── 2.wav
│   └── dog
│       └── 4.wav
└── train
    ├── cat
    │   └── 1.wav
    └── dog
        └── 3.wav
```

Vous pouvez désactiver cette ajout automatique de la colonne `label` dans la [configuration YAML](./datasets-manual-configuration). Si les noms de vos répertoires n’ont pas de signification particulière, définissez `drop_labels: true` dans l’en-tête du README :

```yaml
configs:
  - config_name: default  # Name of the dataset subset, if applicable.
    drop_labels: true
```

## Jeux de données à grande échelle

### Format WebDataset

Le format [WebDataset](./datasets-webdataset) est bien adapté aux jeux de données audio de grande envergure (voir par exemple [AlienKevin/sbs_cantonese](https://huggingface.co/datasets/AlienKevin/sbs_cantonese)). Il se compose d'archives TAR contenant des fichiers audio et leurs métadonnées, et est optimisé pour le streaming. Il est utile lorsque vous disposez d'un grand nombre de fichiers audio et pour obtenir des chargeurs de données en streaming pour l'entraînement à grande échelle.

```plaintext
my_dataset_repository/
├── train-0000.tar
├── train-0001.tar
├── ...
└── train-1023.tar
```

Pour créer une archive TAR WebDataset, créez un répertoire contenant les fichiers audio et les fichiers de métadonnées à archiver, puis créez l'archive TAR à l'aide, par exemple, de la commande `tar`. La taille habituelle par archive est généralement d'environ 1 Go. Assurez-vous que chaque paire de fichier audio et de métadonnées partage le même préfixe de fichier, par exemple :

```plaintext
train-0000/
├── 000.flac
├── 000.json
├── 001.flac
├── 001.json
├── ...
├── 999.flac
└── 999.json
```

Notez que, pour la commodité des utilisateurs et afin de permettre le [Dataset Viewer](./data-studio), chaque jeu de données hébergé sur le Hub est automatiquement converti au format Parquet jusqu'à 5 Go. En savoir plus à ce sujet dans la documentation du [Parquet format](./data-studio#access-the-parquet-files).

### Format Parquet

Plutôt que de téléverser les fichiers audio et les métadonnées en tant que fichiers individuels, vous pouvez intégrer l’ensemble dans un fichier [Parquet](https://parquet.apache.org/). C’est utile si vous disposez d’un grand nombre de fichiers audio, si vous souhaitez intégrer plusieurs colonnes audio, ou si vous voulez stocker des informations supplémentaires sur l’audio dans le même fichier. Parquet est également pratique pour stocker des données telles que des octets bruts, ce qui n’est pas pris en charge par JSON/CSV.

```plaintext
my_dataset_repository/
└── train.parquet
```

Les fichiers Parquet contenant des données audio peuvent être créés à l'aide de `pandas` ou de la bibliothèque `datasets`. Pour créer des fichiers Parquet avec des données audio dans `pandas`, vous pouvez utiliser [pandas-audio-methods](https://github.com/lhoestq/pandas-audio-methods) et `df.to_parquet()`. Dans `datasets`, vous pouvez définir le type de colonne sur `Audio()` et utiliser la méthode `ds.to_parquet(...)` ou `ds.push_to_hub(...)`. Vous trouverez un guide sur le chargement des jeux de données audio dans `datasets` [ici](/docs/datasets/audio_load).

Vous pouvez également définir manuellement le type audio des fichiers Parquet créés à l’aide d’autres outils. Assurez-vous d’abord que vos colonnes audio sont de type _struct_, avec un champ binaire `"bytes"` pour les données audio et un champ chaîne `"path"` pour le nom ou le chemin du fichier audio. Vous devez ensuite spécifier les types de fonctionnalités des colonnes directement dans le YAML de l’en-tête du README, par exemple :

```yaml
dataset_info:
  features:
  - name: audio
    dtype: audio
  - name: caption
    dtype: string
```

Notez que Parquet est recommandé pour les petits fichiers audio (<1 Mo par fichier audio) et les petits groupes de lignes (100 lignes par groupe de lignes, ce que `datasets` utilise pour l’audio). Pour les fichiers audio plus volumineux, il est recommandé d’utiliser le format WebDataset, ou de partager les fichiers audio d’origine (éventuellement avec des fichiers de métadonnées).

