概要
ローカルだから速い。パイプラインが丁寧だから正確。
音声入力の宣伝では、パイプラインの話はたいてい省かれます。でも、パイプラインこそがプロダクトです。信号が悪い、バッチ処理が雑、実行環境が不安定。そのどれも、使えばすぐに伝わってしまいます。
要点
- 音声入力のパイプライン全体をオンデバイスで実行します。
- 認識の後で文字起こしを整えるだけでなく、認識の前に信号を整えます。
- バッチ単位でストリーミングするため、長い音声入力でも最後に止まりません。
- ネットワーク通信は最小限で、しかも任意です。
パイプライン
オンデバイスのパイプラインを順に見ていきます。
音声区間検出
ストリーミング対応の Silero 音声ゲートが、音声が届くたびに発話区間を見つけます。認識は発話を含む部分にだけ実行されます。
セグメント化
フレーズの境界にはパディングと結合を使うので、短い間があっても発話どうしの文脈が途切れません。
音声の調整
最初に 50 Hz のハイパスフィルタをかけ、続いて K 特性のラウドネス正規化を行います。ラウドネスの目標値は処理経路によって異なり、ファイルの文字起こしは −14 LUFS、ライブの音声入力は既定で −16 LUFS、代替トポロジでは −18 LUFS です。
リサンプリング
48 kHz の音声を 16 kHz に変換し、Whisper 系モデルが想定する形式に正確かつ安定して合わせます。
コンテキストのバッチ処理
音声入力は 29 秒を目標としたブロック単位でストリーミングされ、15 秒から 29 秒の範囲に収められます。そのため、長い発話も数秒ごとにリセットされず、まとまりを保てます。この目標は厳密な上限ではありません。目標より長い 1 つの発話区間は、分割せずそのまま保持されます。
Metal による推論
Whisper は Metal GPU バックエンドで動作します。前回の起動でモデルの初期化中にクラッシュした場合、アプリは CPU のみのセーフモードに固定されます。Core ML エンコーダの経路は、固定形状の入力では可変長の音声を扱えないため、ビルドで強制的に無効にしています。

速度
実際に速く感じる理由。
アップロードなし
音声が Mac の外に出ることはありません。ネットワークの遅延、圧縮によるノイズ、クラウド側の待ち行列とは無縁です。
限られた最終処理
ホットキーを離すと、録音全体ではなく現在のブロックだけが確定されます。そのため、停止からテキストが出るまでの時間は、音声入力が長くなっても増えません。ミリ秒単位の実測値は公開しておらず、ベンチマークがスクリプトとともに公開されるまでは公開しません。
連続ではなく断続的
推論が動くのはブロックを確定している間だけで、アプリを開いている間ずっと動くわけではありません。待機中のネットワーク接続も、無線を起こし続けるバックグラウンドのアップロードキューもありません。
精度
人間らしい雑多な環境でも精度が保てる理由。
信号を最優先で改善
認識の前に音声を整えます。出来の悪い文字起こしを、あとから強引なプロンプトの工夫で救おうとはしません。
ノイズへの強さ
Silero ゲートは、ファンの音を認識器に文字起こしさせるのではなく、音声以外をデコードに入れません。ゲートは発話を基準にするので、広帯域のノイズ抑制のように子音や歯擦音を潰すことがありません。
専門分野の語彙
カスタム単語リストは認識器に直接渡されます。専門用語や製品名が、最初の一度で正しく認識されやすくなります。
信頼性
プライバシーと検証のしやすさも、エンジニアリングの一部です。
Mac App Store での配布
Voice Type は、Apple の公証とサンドボックスを有効にして配布されています。
正直な透明性
App Store のレビューは、厳しい意見も含めてフィルタなしで表示しています。
最小限のネットワーク通信
通信するのは、レシートの確認で Apple に問い合わせるときと、有効にした場合の任意のリライトプロバイダだけです。
任意のリライト
音声入力はローカルのまま。リライトは任意です。
自分のキーを使うリライトを有効にすると、文字起こしを高速な LLM に渡して、整形、要約、下書きができます。大事なのは、音声入力そのものがその経路に頼らなくてもすぐに反応することです。
この切り分けには意味があります。まず音声の取り込みを確実にし、言葉の磨き上げは二の次の任意の機能にします。
