KWS??????ONNX????????????

September 2026 · Keyword spotting · ONNX

音声操作を実現するために、常に音声認識、クラウドAPI、大規模言語モデルが必要とは限りません。

「オン」「オフ」「次へ」「写真を撮る」のような、あらかじめ決めた短いフレーズにだけ反応する機器なら、そのキーワードが話されたかどうかを検出するだけで足りる場合があります。これを キーワードスポッティング(KWS) と呼びます。

KWSは目的を絞った音声分類モデルです。短い音声区間を調べ、学習したキーワードが含まれているかを推定します。発話全体を文字起こししたり、自由な質問を理解したりするものではありません。

主な用途はウェイクワード。固定コマンドにも使える

KWSはウェイクワードの検出によく使われます。小さな検出器が「ねえ、デバイス」のようなフレーズを端末内で待ち受け、検出後に本格的な音声認識や音声アシスタントを起動します。

一方、少数のコマンドだけで完結する機器では、KWSから直接操作できます。照明なら「点灯」「消灯」、プレゼン用リモコンなら「次のスライド」「戻る」といった命令を認識し、そのまま動作につなげられます。

決められた数個のコマンドを使う場合に適しており、モデルやフレーズ同士の似かた、対象機器によっては十数個程度まで扱えることもあります。ただし一律の上限はありません。実際の語彙と誤検出率を測って判断します。

KWSとASRの違い

自動音声認識(ASR)は音声をテキストに変換します。さまざまな言い方を受け付け、発話内容そのものが必要な場合に向いています。

KWSが答えるのは、より限定された質問です。登録済みのフレーズのどれかが今話されたか? 対象を絞ることでモデルを小さくでき、ストレージ、計算資源、通信環境、音声データの取り扱いに制約のある機器でもローカル実行を検討できます。

やりたいこと検討しやすい方式
ウェイクワードで音声対話を開始するKWSの後にASRやアシスタント
少数の固定コマンドで機器を操作するKWS単体で対応できる場合がある
文字起こし、自由な言い回し、未知の語彙ASR
意図を柔軟に推論するASRとアプリ側の処理、またはLLM

小さなKWSモデルは小型のチャットボットではありません。認識対象は学習したフレーズに限られるため、利用環境に合わせて検証が必要です。

ONNXのローカル推論とは

ONNXは機械学習モデルを表現するための移植性のある形式です。対応するランタイムがあれば、サポート対象の機器でモデルを読み込み、音声認識サービスに送信せずに推論できます。

マイク音声
  → 音声を整え、短いフレームに分割
  → モデルが期待する特徴量を抽出
  → ONNXで推論
  → スコアを平滑化し、検出ルールを適用
  → キーワード検出イベントを発行
  → アプリや機器の動作を実行

モデルとランタイムを導入した後は、インターネット接続なしで推論できる構成にできます。通信への依存を減らし、音声を端末内に保つ設計に役立ちます。ただしローカル実行だけでプライバシーや低消費電力が保証されるわけではありません。マイク権限、音声取得、ランタイム、消費電力を適切に扱う必要があります。

また、ONNXならどのモデルもあらゆるチップでそのまま動く、という意味ではありません。対象機器に対応ランタイムと十分なメモリ・計算能力が必要です。マイコンではTensorFlow Lite Microなど別形式や最適化済みランタイムが必要なこともあります。実機でパイプライン全体を確認してください。

モデルファイルだけでは検出器にならない

モデルは通常、音声フレームごとのスコアを出力し、どの時点でコマンドと判定するかはアプリ側で決めます。1回のスコアがしきい値を超えただけで反応させると、認識漏れ、連続動作、誤検出が起こることがあります。

複数フレームでの確認、検出直後のクールダウン、通常の会話や環境音を使ったしきい値調整などが実用的です。音が似たコマンドほど区別が難しくなります。短く、音の違いが明確なフレーズを選ぶと検出しやすくなります。

製品で使うマイク、話者、距離、室内ノイズ、アクセントでテストし、認識漏れと誤検出の両方を記録してください。合成音声での結果が、実際の筐体や騒がしい場所でも再現されるとは限りません。

小型KWSモデルが向いているケース

コマンド一覧が短く事前に決まっている、各フレーズに明確な動作を割り当てる、オフライン動作や音声のローカル処理が重要、といった場合はKWSを検討できます。

文章の文字起こし、自由な言い回し、想定外の内容への対応にはASRが適しています。よくある構成は、KWSでウェイクワードを待ち受け、検出後にASRを起動して自由な発話を処理する方法です。

試作を始める手順

まずコマンドと対応する動作を書き出します。聞き分けやすいフレーズを選び、対象プラットフォームに合うランタイムを決めます。検出イベントをアプリの処理につなぎ、正常な認識だけでなく誤検出も丁寧に確認します。

独自の語彙を使う場合は、必要なフレーズでKWSモデルを学習し、ONNXなどの形式で出力できます。オープンソースのonnx-wakewordランタイムは複数プラットフォームの推論連携を提供しています。Voicuteではカスタムキーワードモデルを作成できます。

開示:私はVoicuteの開発者で、onnx-wakewordのメンテナーです。