ローカル優先 ASR パイプラインの設計 — エンジニアリング原則
これはデスクトップ向けにローカル優先の ASR パイプラインを構築する中で書き留めた作業ノートです。普遍的な規則だとは主張しません — 自分たちが繰り返し戻ってくる六つの原則であり、たいていは違反して時間を失った後に戻ってくるものです。どの間違いがどの教訓を生んだかを忘れる前に書き残しています。
原則一:ホットパスは狭く、同期に保つ。デスクトップ上の音声から文字へはインタラクティブなシステムです。利用者は話しながら画面を見ています。待ち時間を生むもの — ネットワーク呼び出し、モデルのロード、シリアライズ — はすべて、発話ごとのループの外に置かなければなりません。ループが行うべきは最小限 — 音声を取り、認識を走らせ、テキストを出す。それ以外(語彙学習、評価、テレメトリ)はすべて副経路です。
原則二:単一経路の検証付き挿入を選ぶ。音声入力が信頼できると感じられるのは、文字が利用者の期待した場所に確かに着地したときだけです。挿入はクリティカル操作として扱います — フォーカス中のフィールドに書き込む経路は一つだけ、その経路は成功が検証されること、「ほぼ成功」は完了状態ではない。検証が失敗したらシステムは失敗を報告し、わずかに違う結果で黙って再試行はしません。カーソルを信用できない利用者は道具を使うのをやめます。
Figure 01
ローカルファースト ASR パイプライン ── 六段階、ひとつの締まったループ
一発話あたりの全ステップはホットループの中に閉じ込め、学習・評価・テレメトリは外側の側道に追い出す。
ホットパス · 一発話単位
01
取得
AVFoundation · 48 kHz ローカルバッファ
02
音声認識
SenseVoice / Sherpa ランタイム(int8)
03
修正
事前句読点付け + 辞書ベース置換
04
整形
Qwen3-4B(ローカル MLX、約 420 ms)
05
挿入
クリップボード送信 + 上書き貼り付け
06
検証
強い検証 ── 失敗時は明示的に報告
サイドパス · 非同期
Target公開目標値:書き込み遅延 0.82 秒 · 強検証精度 97.4%。
原則三:学習する振る舞いを足す前に、補正を決定論的にする。パイプラインには認識後にテキストが変わりうる段が複数あります — 句読点復元、辞書による語の置換、履歴を見た補正、そしてモデルによる改善パス。経験から学んだのは、決定論的な段階が単独で信頼でき説明可能であって初めて、学習層に何かを許して良いということ。利用者が単純な段階を信頼していなければ、賢い段階も信頼しません。
原則四:改善はデフォルトで保守的に。パイプラインの最終段 — モデルによる仕上げ — は野心的になりたくなる場所です。抑えてください。この層の仕事は明らかな誤りを直すこと(明白な聞き間違い、入れ替わった同音語、誤った時制マーカー)であり、利用者の意図を書き換えることではありません。プロンプトはタイトに、温度は低く、否定・専門用語・固有名詞を保つよう明示的に指示します。攻撃的な改善は、利用者が言ったことを利用者が言わなかったものに「改良」する道具を作ります。これは何も改善しないより悪いです。
原則五:辞書は利用者のもの。使われるうちに、システムはベースモデルが知らない利用者の語彙パターン(ドメイン用語、プロジェクト名、よく並ぶ語)を見るようになります。これを後の認識改善に使いますが、新しい語は「保留」ゲートを通って入ります — システムが提案し、利用者が承認する。語が利用者の辞書に黙って入ることはありません。一部は正しさの問題(モデルの提案は時々間違う)、一部は利用者と道具の関係の問題です — 道具は常に説明可能であるべきです。
Figure 02
ORDO ホームダッシュボード ── ワンクリックで届く六つのモジュール
実装版 v3 のレイアウト。ステータス、当日活動、辞書、履歴、パイプライン詳細、簡易設定はすべてホームから 1 タップで到達できる。
エンジン状態
● Ready
Mainline + Enhance + Selection ── すべてホット、すべてローカル。
当日の活動
236
246 発話・ハンズフリー 4 時間、7 日平均比 +8.3%。
適応辞書
847
Code / Project / Daily ── リプレイから自動学習、ユーザー承認ゲート付き。
発話履歴
∞
生の ASR · 最終テキスト · 各段階のタイミングを発話ごとに保存。
パイプライン詳細
5 → 1
Capture → ASR → Correct → Enhance → Insert。各段差し替え可能。
クイック設定
⌥⌘
ホットキー · エンジン · 整形モデル ── すべて即時適用。
配置原則:重要なものは 1 クリック以内に配置する。ホームはステータスパネルであって、ランチャーではない。
原則六:評価は自分の素材で走らせる。社内ハーネスは録音済みフィクスチャをパイプライン全体で再生し、実際の利用者の仕事に近い素材で精度を追跡します。競技用ベンチマークではありません — 退行検知ネットです。公開ベンチマークはモデルを選ぶには有用ですが、本番で意味を持つ問いは「直近の変更で利用者の体験が悪くなっていないか」です。これに答えられるのは自分の素材だけです。
正直な注釈をいくつか。これらの原則のどれも、クラウドモデルの利用を排除しません — 個々の段がどこで走るかに関係なく、利用者向けのループを締めるよう主張しているだけです。どれも我々のオリジナルではありません。多くは異なる語彙で、よくできた信号処理系や、丁寧に作られたエディタの中に現れています。書き留めているのは、設計レビューのたびに各原則を破りたくなる誘惑が出てくるからで、誰にでも見える場所にリストを置く方が、同じ教訓を三回学び直すより安いからです。
一つだけ持ち帰るなら — 利用者がカーソルを信用し続けられること。残りは全てそこから出てきます。