Hugging Face Inference Endpoints の ASR と Diarization パイプライン
Hugging Face は、Hugging Face Inference Endpoints を通じて自動音声認識 (ASR)、話者ダイアリゼーション、そして投機的デコードを組み合わせたモジュラー パイプラインのデプロイを可能にするカスタム推論ハンドラをリリースしました。この実装により、開発者は単一の API エンドポイントを公開し、複数のモデルを統合できます。特に、文字起こしには OpenAI の Whisper、話者識別には Pyannote を活用しています。
モジュラー パイプライン アーキテクチャ
このパイプラインはモジュラー システムとして設計されており、特定のユースケースに応じてコンポーネントの有効化・無効化が可能です。コアコンポーネントは以下の通りです:
- ASR モジュール: 高品質な音声からテキストへの文字起こしのために Whisper モデルを利用します。
- Diarization モジュール: 最先端のオープンソース実装である Pyannote speaker-diarization-3.1 モデルを使用し、話者ごとに文字起こしを識別・分割します。
- 投機的デコード: 小型のアシスタントモデル(例: 蒸留された Whisper モデル)を使用して生成候補を提示し、これを大きなメインモデルで検証することで推論を高速化します。
技術要件と制約
パフォーマンス最適化のため、実装は PyTorch 2.2 を利用しており、SDPA 経由で Flash Attention 2 を標準でサポートしています。
投機的デコードには以下のような技術的制約があります:
- アーキテクチャの一致: アシスタントモデルのデコーダ部分はメインモデルと同じアーキテクチャである必要があります。
- バッチサイズ: 投機的デコードはバッチサイズ 1 を必要とします。大きなバッチが必要な本番環境では、標準の推論の方がアシスト生成より速い場合があります。
パフォーマンスベンチマーク
ベンチマークは NVIDIA A10 GPU 上で、メインモデルに openai/whisper-large-v3、アシスタントモデルに distil-whisper/distil-large-v3 を使用して実施され、投機的デコードが短い音声クリップでは非常に効果的である一方、長い音声では効率が低下することが示されました:
- 短音声 (8秒): アシスト生成の平均時間は 326.96ms で、非アシスト生成は 784.35ms でした。
- 長音声 (60秒): 非アシスト生成の平均は 3.48秒、アシスト生成は 4.15秒でした。
この性能差は、長い音声が自動的にバッチに分割されるためであり、投機的デコードのバッチサイズ 1 の制限と矛盾します。
デプロイと構成
デプロイは、handler.py(初期化と推論)、diarization_utils.py(前処理・後処理)、config.py(設定)という 3 つの主要ファイルからなるカスタムハンドラで管理されます。
設定パラメータ
モデル設定は ModelSettings と InferenceConfig クラスで管理されます。ユーザーはエンドポイント作成時に環境変数または API 呼び出しでパラメータを調整できます。主なパラメータは以下の通りです:
- Task:
transcribeとtranslateのいずれかを選択します。 - Batch Size: デフォルトは 24 ですが、アシスト生成の場合は 1 にする必要があります。
- Assisted Flag: 投機的デコードを使用するかどうかを示すブール値です。
- Speaker Constraints: ダイアリゼーション パイプラインの
num_speakers、min_speakers、max_speakersを定義するオプションです。
API 統合
デプロイ後、エンドポイントは base64 エンコードされた音声ファイルを受け取ります。リクエストは、inputs フィールドに音声を含む JSON ペイロードと、InferenceConfig 設定を調整するための parameters 辞書で送信されます。これは標準の Python requests または Hugging Face の InferenceClient を使用して実装できます。