# オーディオデータセットを作成する

Hugging Face Hub上でデータセットのリポジトリを作成することで、チームやコミュニティの誰とでもデータセットを共有できます。

```py
from datasets import load_dataset

dataset = load_dataset("<username>/my_dataset")
```

オーディオデータセットを作成して共有するには、いくつかの方法があります。

- Create an audio dataset from local files in python with [Dataset.push_to_hub()](/docs/datasets/v5.2.0/ja/package_reference/main_classes#datasets.Dataset.push_to_hub). This is an easy way that requires only a few steps in python.

- `AudioFolder`ビルダーを使用して、オーディオデータセットのリポジトリを作成します。これは、数千のオーディオファイルからなるオーディオデータセットを素早く作成するためのノーコードソリューションです。

> [!TIP]
> ユーザーが連絡先情報を共有することを条件に、データセットへのアクセスを制御できます。この機能をHubで有効にする方法の詳細については、[Gated datasets](https://huggingface.co/docs/hub/datasets-gated)ガイドを参照してください。

## ローカルファイル

オーディオファイルへのパスを指定して、独自のデータセットを読み込むことができます。[cast_column()](/docs/datasets/v5.2.0/ja/package_reference/main_classes#datasets.Dataset.cast_column)関数を使用して、オーディオファイルのパスの列を取得し、[Audio](/docs/datasets/v5.2.0/ja/package_reference/main_classes#datasets.Audio)特徴量に変換します:

```py
>>> 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>
```

次に、[Dataset.push_to_hub()](/docs/datasets/v5.2.0/ja/package_reference/main_classes#datasets.Dataset.push_to_hub) を使用して Hugging Face Hub にデータセットをアップロードします:

```py
audio_dataset.push_to_hub("<username>/my_dataset")
```

これにより、オーディオデータセットを含むデータセットリポジトリが作成されます:

```
my_dataset/
├── README.md
└── data/
    └── train-00000-of-00001.parquet
```

## AudioFolder

`AudioFolder`は、コードを書かずに数千個のオーディオファイルを含むオーディオデータセットを素早く読み込むために設計されたデータセットビルダーです。

> [!TIP]
> 💡 `AudioFolder`がデータセットリポジトリの構造に基づいてどのようにデータセットの分割を作成するかを詳しく知るには、[Split pattern hierarchy](repository_structure#split-pattern-hierarchy)をご覧ください。

`AudioFolder` は、ディレクトリ名に基づいてデータセットのクラスラベルを自動的に推論します。データセットは、次のようなディレクトリ構造で保存してください。

```
folder/train/dog/golden_retriever.mp3
folder/train/dog/german_shepherd.mp3
folder/train/dog/chihuahua.mp3

folder/train/cat/maine_coon.mp3
folder/train/cat/bengal.mp3
folder/train/cat/birman.mp3
```

データセットが`AudioFolder`の構造に従っている場合、[load_dataset()](/docs/datasets/v5.2.0/ja/package_reference/loading_methods#datasets.load_dataset)で直接読み込むことができます:

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_name")
```

これは、[load_dataset()](/docs/datasets/v5.2.0/ja/package_reference/loading_methods#datasets.load_dataset) で `audiofolder` を手動で渡し、`data_dir` にディレクトリを指定することと同等です。

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

`audiofolder` を使用して、複数のスプリットを含むデータセットを読み込むこともできます。そのためには、データセットのディレクトリが以下の構造になっている必要があります。

```
folder/train/dog/golden_retriever.mp3
folder/train/cat/maine_coon.mp3
folder/test/dog/german_shepherd.mp3
folder/test/cat/bengal.mp3
```

> [!WARNING]
> すべてのオーディオファイルが単一のディレクトリに格納されている場合、またはディレクトリ構造の同じ階層にない場合は、`label`列は自動的に追加されません。必要に応じて、`drop_labels=False`を明示的に設定してください。

データセットに関する追加情報（テキストキャプションやバウンディングボックスなど）を含める場合は、フォルダ内に`metadata.csv`ファイルとして追加してください。これにより、テキストキャプション付けや物体検出などの異なるコンピュータビジョンタスク用のデータセットを素早く作成できます。JSONLファイル`metadata.jsonl`またはParquetファイル`metadata.parquet`を使用することもできます。

```
folder/train/metadata.csv
folder/train/0001.mp3
folder/train/0002.mp3
folder/train/0003.mp3
```

オーディオファイルをzip形式で圧縮することもできます。この場合、各zipファイルにはオーディオファイルとメタデータの両方が含まれている必要があります。

```
folder/train.zip
folder/test.zip
folder/validation.zip
```

`metadata.csv`ファイルには、音声ファイルとそのメタデータを関連付ける`file_name`または`*_file_name`フィールドが必要です。

```csv
file_name,additional_feature
0001.mp3,This is a first value of a text feature you added to your audio files
0002.mp3,This is a second value of a text feature you added to your audio files
0003.mp3,This is a third value of a text feature you added to your audio files
```

または`metadata.jsonl`を使用します:

```jsonl
{"file_name": "0001.mp3", "additional_feature": "This is a first value of a text feature you added to your audio files"}
{"file_name": "0002.mp3", "additional_feature": "This is a second value of a text feature you added to your audio files"}
{"file_name": "0003.mp3", "additional_feature": "This is a third value of a text feature you added to your audio files"}
```

ここでは、`file_name`はメタデータファイルの隣にある音声ファイルの名前である必要があります。より一般的には、メタデータを含むディレクトリからの音声ファイルへの相対パスである必要があります。

データセットの各行で、複数のオーディオを指定できます。例えば、入力と出力の両方がオーディオファイルである場合などです。

```jsonl
{"input_file_name": "0001.mp3", "output_file_name": "0001_output.mp3"}
{"input_file_name": "0002.mp3", "output_file_name": "0002_output.mp3"}
{"input_file_name": "0003.mp3", "output_file_name": "0003_output.mp3"}
```

オーディオファイルのリストを定義することもできます。その場合、フィールド名を`file_names`または`*_file_names`にする必要があります。例を以下に示します。

```jsonl
{"recordings_file_names": ["0001_r0.mp3", "0001_r1.mp3"], label: "same_person"}
{"recordings_file_names": ["0002_r0.mp3", "0002_r1.mp3"], label: "same_person"}
{"recordings_file_names": ["0003_r0.mp3", "0003_r1.mp3"], label: "different_person"}
```

## WebDataset

[WebDataset](https://github.com/webdataset/webdataset)形式はTARアーカイブをベースとしており、大規模な音声データセットに適しています。実際、音声ファイルをTARアーカイブにグループ化（例: 1つのTARアーカイブあたり1GBの音声ファイル）し、数千個のTARアーカイブを持つことができます:

```
folder/train/00000.tar
folder/train/00001.tar
folder/train/00002.tar
...
```

アーカイブでは、各サンプルは同じプレフィックスを持つファイルで構成されています:

```
e39871fd9fd74f55.mp3
e39871fd9fd74f55.json
f18b91585c4d3f3e.mp3
f18b91585c4d3f3e.json
ede6e66b2fb59aab.mp3
ede6e66b2fb59aab.json
ed600d57fcee4f94.mp3
ed600d57fcee4f94.json
...
```

音声ファイルのラベル、キャプション、バウンディングボックスは、JSONファイルやテキストファイルなどを使用して指定できます。

WebDatasetを読み込むと、ファイルの拡張子ごとに1列ずつ作成されます（ここではmp3とjson）：

```python
>>> from datasets import load_dataset

>>> dataset = load_dataset("webdataset", data_dir="/path/to/folder", split="train")
>>> dataset[0]["json"]
{"transcript": "Hello there !", "speaker": "Obi-Wan Kenobi"}
```

1つのサンプルに複数のオーディオファイルを含めることも可能です。

```
e39871fd9fd74f55.input.mp3
e39871fd9fd74f55.output.mp3
e39871fd9fd74f55.json
f18b91585c4d3f3e.input.mp3
f18b91585c4d3f3e.output.mp3
f18b91585c4d3f3e.json
...
```

WebDataset形式とPythonライブラリに関する詳細については、[WebDatasetのドキュメント](https://webdataset.github.io/webdataset)を参照してください。

