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.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

音声処理コンポーネントを追加

Audioモデルには、AutoFeatureExtractorエントリポイントの背後でアクセス可能なフィーチャーエクストラクターが必要です。

モデルと設定の手順については、まずモジュラーガイドに従ってください。

特徴量抽出器

モデルが生のオーディオまたはオーディオ由来の特徴量を使用する場合、feature extractor を追加します。

モデルディレクトリにfeature_extraction_<model_name>.pyを作成します。SequenceFeatureExtractorを継承することで、新しいクラスに共通のpadding、truncation、保存、読み込みの動作が与えられます。

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 に配置されます。

For feature extractors that inherit from SequenceFeatureExtractor, inherit from SequenceFeatureExtractionTestMixin. The mixin covers save and load behavior, padding, truncation, tensor conversion, and common feature extractor properties. Provide a tester object with prepare_feat_extract_dict() and prepare_inputs_for_common() so the mixin can instantiate the feature extractor and build short dummy audio inputs.

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)

ミックスインが把握していないモデル固有の動作に対して、焦点を絞ったテストを追加します。音声フィーチャーエクストラクターの場合、通常は__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