Datasets 文档
处理音频数据
开始使用
教程
操作指南
概览
通用
加载过程流式传输配合 PyTorch 使用配合 TensorFlow 使用配合 NumPy 使用配合 JAX 使用配合 Pandas 使用配合 Polars 使用配合 PyArrow 使用配合 Spark 使用缓存管理云存储搜索索引CLI故障排除
音频
视觉
文本
表格
数据集仓库
概念指南
参考
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
处理音频数据
本指南介绍了处理音频数据集的具体方法。学习如何
- 对采样率进行重采样。
- 在音频数据集上使用 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))音频文件是在运行时(on-the-fly)进行解码和重采样的,因此当你下次访问样本时,音频文件将被重采样至 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)。
对于预训练的语音识别模型,请加载特征提取器和分词器 (tokenizer),并将它们组合在一个
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)