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

Audioモデルには、[AutoFeatureExtractor](/docs/transformers/main/ja/model_doc/auto#transformers.AutoFeatureExtractor)エントリポイントの背後でアクセス可能なフィーチャーエクストラクターが必要です。

> [!NOTE]
> モデルと設定の手順については、まず[モジュラー](./modular_transformers)ガイドに従ってください。

## 特徴量抽出器

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

モデルディレクトリに`feature_extraction_<model_name>.py`を作成します。[SequenceFeatureExtractor](/docs/transformers/main/ja/main_classes/feature_extractor#transformers.SequenceFeatureExtractor)を継承することで、新しいクラスに共通のpadding、truncation、保存、読み込みの動作が与えられます。

```py
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()](/docs/transformers/main/ja/main_classes/feature_extractor#transformers.FeatureExtractionMixin.save_pretrained)を呼び出すことで、チェックポイントにフィーチャーエクストラクターを保存します。前処理設定ファイルを手動で作成したり編集したりしないでください。

> [!TIP]
> 参考として、[Gemma4AudioFeatureExtractor](/docs/transformers/main/ja/model_doc/gemma4#transformers.Gemma4AudioFeatureExtractor)を参照してください。

## クラスを登録する

ファイルの末尾にある`__all__`に新しいクラスを追加し、次に以下で`__init__.py`を再生成します:

```bash
python utils/check_inits.py --fix_and_overwrite
```

新しいクラスをモデル設定にマッピングし、[AutoFeatureExtractor](/docs/transformers/main/ja/model_doc/auto#transformers.AutoFeatureExtractor)が読み込めるようにします。`src/transformers/models/auto/feature_extraction_auto.py`内の`FEATURE_EXTRACTOR_MAPPING_NAMES`にエントリを追加し、近傍のエントリのパターンに従ってください。その後、[AutoFeatureExtractor](/docs/transformers/main/ja/model_doc/auto#transformers.AutoFeatureExtractor)の`FEATURE_EXTRACTOR_MAPPING_NAMES`の下にそのモデルタイプが表示されることを確認してください。

- `FEATURE_EXTRACTOR_MAPPING_NAMES` は [AutoFeatureExtractor](/docs/transformers/main/ja/model_doc/auto#transformers.AutoFeatureExtractor) 用です

## テスト

モデルのテストディレクトリに、各オーディオ処理コンポーネント用のテストを追加します。フィーチャーエクストラクターのテストは通常、`tests/models/<model_name>/test_feature_extraction_<model_name>.py` に配置されます。

For feature extractors that inherit from [SequenceFeatureExtractor](/docs/transformers/main/ja/main_classes/feature_extractor#transformers.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.

```py
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](/docs/transformers/main/ja/main_classes/processors#transformers.ProcessorMixin) も持っている場合は、`tests/models/<model_name>/test_processing_<model_name>.py` を追加し、`ProcessorTesterMixin` を継承します。`processor_class` を設定し、引数なしでは構築できないコンポーネントについては、`_setup_<component>()` クラスメソッドをオーバーライドします。共通のプロセッサテストで使用されるプレースホルダトークンを公開するには、`_setup_test_attributes()` を使用します。

```py
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", "")
```

## 次のステップ

- `@auto_docstring` を使用して一貫性のあるドキュメント文字列を自動生成するには、[ドキュメント文字列の自動生成](./auto_docstring)ガイドをお読みください。
- ユーザー向けの前処理の動作については、[Feature extractors](./feature_extractors)ガイドを参照してください。

