Datasets documentation

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

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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

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

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(). This is an easy way that requires only a few steps in python.

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

ユーザーが連絡先情報を共有することを条件に、データセットへのアクセスを制御できます。この機能をHubで有効にする方法の詳細については、Gated datasetsガイドを参照してください。

ローカルファイル

オーディオファイルへのパスを指定して、独自のデータセットを読み込むことができます。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>

次に、Dataset.push_to_hub() を使用して Hugging Face Hub にデータセットをアップロードします:

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

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

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

AudioFolder

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

💡 AudioFolderがデータセットリポジトリの構造に基づいてどのようにデータセットの分割を作成するかを詳しく知るには、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()で直接読み込むことができます:

>>> from datasets import load_dataset

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

これは、load_dataset() で audiofolder を手動で渡し、data_dir にディレクトリを指定することと同等です。

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

すべてのオーディオファイルが単一のディレクトリに格納されている場合、またはディレクトリ構造の同じ階層にない場合は、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フィールドが必要です。

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を使用します:

{"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はメタデータファイルの隣にある音声ファイルの名前である必要があります。より一般的には、メタデータを含むディレクトリからの音声ファイルへの相対パスである必要があります。

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

{"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にする必要があります。例を以下に示します。

{"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形式は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):

>>> 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のドキュメントを参照してください。

Update on GitHub