Datasets documentation

处理音频数据

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
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