Transformers documentation

添加音频处理组件

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

添加音频处理组件

音频模型需要一个可通过 AutoFeatureExtractor 入口访问的特征提取器。

对于模型和配置步骤,请先遵循模块化指南。

特征提取器

当模型使用原始音频或音频衍生特征时,添加一个特征提取器。

在模型目录中创建 feature_extraction_<model_name>.py。从 SequenceFeatureExtractor 继承,使新类获得共享的填充、截断、保存和加载行为。

from ...feature_extraction_sequence_utils import SequenceFeatureExtractor


class MyModelFeatureExtractor(SequenceFeatureExtractor):
    model_input_names = ["input_features", "attention_mask"]

    def __init__(self, feature_size=80, sampling_rate=16000, padding_value=0.0, **kwargs):
        super().__init__(feature_size=feature_size, sampling_rate=sampling_rate, padding_value=padding_value, **kwargs)

    def __call__(self, raw_speech, sampling_rate=None, **kwargs):
        if sampling_rate is not None and sampling_rate != self.sampling_rate:
            raise ValueError(f"`sampling_rate` must be {self.sampling_rate}, but got {sampling_rate}.")

        # Convert raw_speech to model features here.
        ...

保持构造函数简洁且可序列化。将重现预处理所需的每个值都存储为实例属性,并避免存储仅用于运行时的值,例如打开的文件、设备或解码后的音频数组。

__call__ 方法必须在用户传入 sampling_rate 时验证输入采样率。如果输入采样率与模型预期的采样率不一致,应抛出错误,而不是静默地进行重采样。

通过在转换脚本中实例化特征提取器并调用 save_pretrained(),将特征提取器与检查点一起保存。请勿手动创建或编辑预处理配置文件。

请参阅 Gemma4AudioFeatureExtractor。

注册类

在文件底部将新类添加到 __all__ 中,然后使用以下命令重新生成 __init__.py:

python utils/check_inits.py --fix_and_overwrite

将新类映射到模型配置,以便 AutoFeatureExtractor 能够加载它。在 src/transformers/models/auto/feature_extraction_auto.py 中的 FEATURE_EXTRACTOR_MAPPING_NAMES 里添加一个条目,参照附近条目的模式。然后验证 AutoFeatureExtractor 下的 FEATURE_EXTRACTOR_MAPPING_NAMES 中是否出现了该模型类型。

测试

在模型测试目录中为每个音频处理组件添加测试。特征提取器测试通常位于 tests/models/<model_name>/test_feature_extraction_<model_name>.py。

对于继承自 SequenceFeatureExtractor 的特征提取器,请继承 SequenceFeatureExtractionTestMixin。该混入类涵盖了保存和加载行为、填充、截断、张量转换以及常见的特征提取器属性。请提供一个包含 prepare_feat_extract_dict() 和 prepare_inputs_for_common() 的测试器对象,以便混入类能够实例化特征提取器并构建简短的虚拟音频输入。

from ...test_sequence_feature_extraction_common import SequenceFeatureExtractionTestMixin

class MyModelFeatureExtractionTest(SequenceFeatureExtractionTestMixin, unittest.TestCase):
    feature_extraction_class = MyModelFeatureExtractor

    def setUp(self):
        self.feat_extract_tester = MyModelFeatureExtractionTester(self)

添加针对混入类(mixin)不了解的模型特定行为的聚焦测试。对于音频特征提取器,这通常意味着检查 __call__ 返回的特征形状,验证传入错误的 sampling_rate 时会引发错误,以及检查任何自定义的归一化或特征计算。

如果模型还包含一个封装了特征提取器的 ProcessorMixin,请添加 tests/models/<model_name>/test_processing_<model_name>.py 并继承自 ProcessorTesterMixin。设置 processor_class,并为那些无法在不提供参数的情况下构建的组件重写 _setup_<component>() 类方法。使用 _setup_test_attributes() 来暴露通用处理器测试所使用的占位符标记。

from ...test_processing_common import ProcessorTesterMixin

class MyModelProcessorTest(ProcessorTesterMixin, unittest.TestCase):
    processor_class = MyModelProcessor

    @classmethod
    def _setup_feature_extractor(cls):
        return cls._get_component_class_from_processor("feature_extractor")(sampling_rate=16000)

    @classmethod
    def _setup_test_attributes(cls, processor):
        cls.audio_token = getattr(processor, "audio_token", "")

后续步骤

Update on GitHub