十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Transformers 音频特征提取器实战:从 AutoFeatureExtractor 加载到 Padding、Truncation 与重采样

Transformers 音频特征提取器实战:从 AutoFeatureExtractor 加载到 Padding、Truncation 与重采样 Transformers 音频特征提取器实战从 AutoFeatureExtractor 加载到 Padding、Truncation 与重采样【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers本篇围绕 Transformers 官方文档 feature_extractors.md 展开讲解音频特征提取器Feature Extractor如何将原始音频信号转换为模型可消费的张量涵盖类继承体系SequenceFeatureExtractor/FeatureExtractionMixin、两种加载方式AutoFeatureExtractor与模型专属类、输入形状与采样率的匹配以及 Padding、Truncation、Resampling 三大预处理手段的完整实操。读完后你可以独立完成任意预训练音频模型Wav2Vec2、Whisper 等的数据预处理管线并理解每一步在源码中的实现位置。1. Feature Extractor 是什么Feature Extractor 负责将音频数据预处理为特定模型所需的正确格式它接收原始音频信号将其转换为可以直接送入模型的张量。张量的具体形状取决于模型但只要指定模型Feature Extractor 就会自动完成正确的预处理。它同时内置了 padding填充、truncation截断与 resampling重采样等方法。加载方式是通过AutoFeatureExtractor.from_pretrained从 Hugging Face Hub 或本地目录加载特征提取器及其预处理器配置。该配置保存在preprocessor_config.json文件中——这一点可以从源码常量中得到印证feature_extraction_utils.py 所依赖的 utils/__init__.py 中明确定义FEATURE_EXTRACTOR_NAME preprocessor_config.json仓库测试夹具 tests/fixtures/preprocessor_config.json 展示了该配置的最小结构{ feature_extractor_type: Wav2Vec2FeatureExtractor, processor_class: Wav2Vec2Processor }使用方式将音频信号通常存储为array传给特征提取器并把sampling_rate参数设为预训练音频模型的采样率。音频数据的采样率必须与预训练模型训练数据所用的采样率一致这一点至关重要。from transformers import AutoFeatureExtractor feature_extractor AutoFeatureExtractor.from_pretrained(facebook/wav2vec2-base) dataset load_dataset(PolyAI/minds14, nameen-US, splittrain) processed_sample feature_extractor(dataset[0][audio][array], sampling_rate16000) processed_sample {input_values: [array([ 9.4472744e-05, 3.0777880e-03, -2.8888427e-03, ..., -2.8888427e-03, 9.4472744e-05, 9.4472744e-05], dtypefloat32)]}特征提取器返回input_values这就是模型可以直接消费的输入。2. 特征提取器的类体系Transformers 中的特征提取器继承自基类SequenceFeatureExtractor后者再继承自FeatureExtractionMixinSequenceFeatureExtractor提供pad方法将序列填充到指定长度避免批内序列长度不一FeatureExtractionMixin提供from_pretrained与save_pretrained用于加载与保存特征提取器。从源码结构看这条继承链在 feature_extraction_sequence_utils.py 中定义class SequenceFeatureExtractor(FeatureExtractionMixin): This is a general feature extraction class for speech recognition. Args: feature_size (int): The feature dimension of the extracted features. sampling_rate (int): The sampling rate at which the audio files should be digitalized expressed in hertz (Hz). padding_value (float): The value that is used to fill the padding values / vectors. def __init__(self, feature_size: int, sampling_rate: int, padding_value: float, **kwargs): self.feature_size feature_size self.sampling_rate sampling_rate self.padding_value padding_value self.padding_side kwargs.pop(padding_side, right) self.return_attention_mask kwargs.pop(return_attention_mask, True)这里可以看到几个关键配置项feature_size特征维度、sampling_rate期望采样率Hz、padding_value填充值以及可推断出的默认值padding_sideright和return_attention_maskTrue。文档示例中 padding 用0填充表示静音即来自padding_value。FeatureExtractionMixin本身则提供存取能力其from_pretrained定义于 feature_extraction_utils.py接受pretrained_model_name_or_pathHub 模型 ID 或本地目录、cache_dir、force_download、local_files_only、token、revision等参数save_pretrained同文件 L383负责把配置写出为preprocessor_config.json两者与 Tokenizer 的加载/保存机制一脉相承。两种加载方式方式一AutoFeatureExtractorAutoClass API。Auto 类会根据给定模型自动实例化正确的特征提取器实现位于 feature_extraction_auto.py——从源码注释可以确认它依据配置对象中的model_type属性来选择要实例化的特征提取器类from transformers import AutoFeatureExtractor feature_extractor AutoFeatureExtractor.from_pretrained(openai/whisper-tiny)方式二模型专属特征提取器类。每个预训练音频模型都有与之配套的特征提取器类用于正确处理音频数据。加载时它会从preprocessor_config.json中读取该特征提取器的配置特征大小、分块长度等from transformers import WhisperFeatureExtractor feature_extractor WhisperFeatureExtractor.from_pretrained(openai/whisper-tiny)关于 Auto 类体系的更多细节可参阅 Auto 类文档。3. 预处理Preprocess特征提取器期望输入是特定形状的 PyTorch 张量具体形状因音频模型而异。例如 Whisper 期望input_features是形状为(batch_size, feature_size, sequence_length)的张量而 Wav2Vec2 期望input_values是形状为(batch_size, sequence_length)的张量。无论使用哪个音频模型特征提取器都会生成正确的输入形状。特征提取器还会处理采样率每秒采集的音频信号样本数问题你的音频数据采样率必须与预训练模型训练所用数据集的采样率一致该值通常在模型卡model card中给出。先用FeatureExtractionMixin.from_pretrained加载数据集与特征提取器from datasets import load_dataset, Audio from transformers import AutoFeatureExtractor dataset load_dataset(PolyAI/minds14, nameen-US, splittrain) feature_extractor AutoFeatureExtractor.from_pretrained(facebook/wav2vec2-base)查看数据集第一条样例其audio列中包含array原始音频信号dataset[0][audio][array] array([ 0. , 0.00024414, -0.00024414, ..., -0.00024414, 0. , 0. ])调用特征提取器把array预处理为指定音频模型的期望输入格式并用sampling_rate参数指定正确的采样率processed_dataset feature_extractor(dataset[0][audio][array], sampling_rate16000) processed_dataset {input_values: [array([ 9.4472744e-05, 3.0777880e-03, -2.8888427e-03, ..., -2.8888427e-03, 9.4472744e-05, 9.4472744e-05], dtypefloat32)]}从实现上看特征提取器的调用结果被封装在BatchFeature中——它是 feature_extraction_utils.py 中定义的、派生自dict的容器类承载__call__与pad的输出如input_values、attention_mask等键。BatchFeature还支持在初始化时通过tensor_type直接把列表转为 PyTorch/NumPy 张量并通过skip_tensor_conversion指定需要跳过转换的键其to方法L215可把整个批次发送到指定设备或转换 dtype便于直接对接模型推理。3.1 Padding填充不同音频序列长度不一是个问题因为 Transformers 要求批内所有序列长度相同才能进行 batching。长度不一的序列无法组批dataset[0][audio][array].shape (86699,) dataset[1][audio][array].shape (53248,)Padding 通过添加特殊的填充 token来保证所有序列等长。特征提取器向array追加0被解释为静音完成填充。设置paddingTrue会把序列填充到批内最长序列的长度def preprocess_function(examples): audio_arrays [x[array] for x in examples[audio]] inputs feature_extractor( audio_arrays, sampling_rate16000, paddingTrue, ) return inputs processed_dataset preprocess_function(dataset[:5]) processed_dataset[input_values][0].shape (86699,) processed_dataset[input_values][1].shape (86699,)在源码中这个能力由SequenceFeatureExtractor.pad方法提供签名见 feature_extraction_sequence_utils.pydef pad( self, processed_features, padding: bool | str | PaddingStrategy True, max_length: int | None None, truncation: bool False, pad_to_multiple_of: int | None None, return_attention_mask: bool | None None, return_tensors: str | TensorType | None None, ) - BatchFeature:可以看出除paddingTrue外还有更多可调项max_length指定目标长度truncation控制超长时是否截断pad_to_multiple_of可将长度对齐到某数的倍数方便分布式/张量并行切分return_attention_mask控制是否返回注意力掩码。填充方向与填充值则由实例属性padding_side默认right与padding_value决定。3.2 Truncation截断模型只能处理不超过某个长度的序列超出会直接崩溃。Truncation 是一种策略移除序列中超出的部分确保长度不超过上限。设置truncationTrue可把序列截断到max_length参数指定的长度def preprocess_function(examples): audio_arrays [x[array] for x in examples[audio]] inputs feature_extractor( audio_arrays, sampling_rate16000, max_length50000, truncationTrue, ) return inputs processed_dataset preprocess_function(dataset[:5]) processed_dataset[input_values][0].shape (50000,) processed_dataset[input_values][1].shape (50000,)3.3 Resampling重采样Datasets 库还可以把音频数据重采样到音频模型期望的采样率。该方式在数据加载时即时on the fly重采样通常比把整个数据集就地重采样更快。上文使用的音频数据集采样率为 8kHz而预训练模型期望 16kHzdataset[0][audio] {path: /root/.cache/huggingface/datasets/downloads/extracted/f507fdca7f475d961f5bb7093bcc9d544f16f8cab8608e772a2ed4fbeb4d6f50/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav, array: array([ 0. , 0.00024414, -0.00024414, ..., -0.00024414, 0. , 0. ]), sampling_rate: 8000}对audio列调用Dataset.cast_column把采样率上采样到 16kHzdataset dataset.cast_column(audio, Audio(sampling_rate16000))再次读取样本时sampling_rate已变为 16000array也相应被重采样dataset[0][audio] {path: /root/.cache/huggingface/datasets/downloads/extracted/f507fdca7f475d961f5bb7093bcc9d544f16f8cab8608e772a2ed4fbeb4d6f50/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav, array: array([ 1.70562416e-05, 2.18727451e-04, 2.28099874e-04, ..., 3.43842403e-05, -5.96364771e-06, -1.76846661e-05]), sampling_rate: 16000}4. 小结与延伸阅读配置存取from_pretrained/save_pretrained与preprocessor_config.json的对应关系见 feature_extraction_utils.py序列填充、截断等批量操作的核心入口是SequenceFeatureExtractor.pad见 feature_extraction_sequence_utils.pyAuto 加载机制按model_type分发到具体特征提取器类见 feature_extraction_auto.py通用测试工具验证各类特征提取器共性行为位于 tests/test_sequence_feature_extraction_common.py可用于了解不同实现需要满足的共同约定。需要特别注意的适用前提采样率参数必须与预训练模型训练数据一致以模型卡为准padding/truncation/max_length等参数的具体效果与模型类型相关Whisper 与 Wav2Vec2 的输入形状(batch_size, feature_size, sequence_length)对(batch_size, sequence_length)就不同特征提取器会根据模型自动处理这一差异。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表