Datasets documentation

オーディオデータを処理する

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

オーディオデータを処理する

このガイドでは、オーディオデータセットを処理するための具体的な方法を示します。次のことを学びます:

  • サンプリングレートをリサンプリングします。
  • オーディオデータセットにmap()を使用します。

あらゆるタイプのデータセットを処理する方法に関するガイドについては、一般的な処理ガイドをご覧ください。

キャスト

cast_column() 関数は、カラムをデコード対象の別のフィーチャーにキャストするために使用されます。Audio フィーチャーと組み合わせてこの関数を使用すると、サンプリングレートをリサンプリングできます:

>>> from datasets import load_dataset, Audio

>>> dataset = load_dataset("PolyAI/minds14", "en-US", split="train")
>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))

オーディオファイルはオンザフライでデコードおよびリサンプリングされるため、次にサンプルにアクセスすると、オーディオファイルは16kHzにリサンプリングされます。

>>> audio = dataset[0]["audio"]
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>
>>> audio = audio_dataset[0]["audio"]
>>> samples = audio.get_all_samples()
>>> samples.data
tensor([[ 0.0000e+00,  0.0000e+00,  0.0000e+00,  ...,  2.3447e-06,
         -1.9127e-04, -5.3330e-05]]
>>> samples.sample_rate
16000

マップ

map() 関数を使用すると、データセット全体を一度に前処理できます。使用しているモデルの種類に応じて、feature extractor または processor を読み込む必要があります。

  • 事前学習済みの音声認識モデルでは、processorに特徴量抽出器とトークナイザーを組み合わせます:

    >>> from transformers import AutoTokenizer, AutoFeatureExtractor, AutoProcessor
    
    >>> model_checkpoint = "facebook/wav2vec2-large-xlsr-53"
    # after defining a vocab.json file you can instantiate a tokenizer object:
    >>> tokenizer = AutoTokenizer("./vocab.json", unk_token="[UNK]", pad_token="[PAD]", word_delimiter_token="|")
    >>> feature_extractor = AutoFeatureExtractor.from_pretrained(model_checkpoint)
    >>> processor = AutoProcessor.from_pretrained(feature_extractor=feature_extractor, tokenizer=tokenizer)
  • ファインチューニングされた音声認識モデルでは、processorを読み込むだけで十分です:

    >>> from transformers import AutoProcessor
    
    >>> processor = AutoProcessor.from_pretrained("facebook/wav2vec2-base-960h")

前処理関数にmap()を使用する際は、オーディオデータを実際にリサンプリングしていることを確認するために、audioカラムを含めてください:

>>> def prepare_dataset(batch):
...     audio = batch["audio"]
...     batch["input_values"] = processor(audio.get_all_samples().data, sampling_rate=audio["sampling_rate"]).input_values[0]
...     batch["input_length"] = len(batch["input_values"])
...     with processor.as_target_processor():
...         batch["labels"] = processor(batch["sentence"]).input_ids
...     return batch
>>> dataset = dataset.map(prepare_dataset, remove_columns=dataset.column_names)
Update on GitHub