音声AIの割り込み: VAD限界とKrisp 6M
音声AIエージェントを触ったことがある人なら、一度は思ったはずです。「なんでこいつ、まだ話してるのに答え始めるんだよ」と。
私も同じ苛立ちを何度も味わってきました。原因はほぼ全部同じでした。VAD (Voice Activity Detection) というモジュールが、「音が止まった」=「発話が終わった」と判定している。この判定の単純さが問題でした。
Krisp が 2025 年に公開した 6M パラメータの軽量 turn-taking モデルは、ここに別の答えを出しています。音声信号だけから、意図的な発話・思考中のポーズ・フィラー・割り込みといった入力パターンを踏まえて、Shift (ターンを渡す) / Hold (ターンを続ける) の二値を出す。しかも 65MB。エッジで動く。
VAD は「音が鳴っているか」しか見ていない
現在の音声AIパイプラインの大半は、ユーザーの発話終了を VAD で判定しています。
VAD の仕事はシンプルです。マイク入力を短いフレームに区切り、各フレームに音声が含まれているかを二値で返す。閾値を超える音があれば「発話中」、下回れば「無音」。無音が一定時間 (300-500ms) 続けば「発話終了」と結論します。
これは音の ON/OFF であって、話者の意図ではありません。
ここが根本的なズレを生んでいます。人間の会話では、音の途切れが必ずしもターン終了を意味しません。文中のちょっとした息継ぎ、「えーと」の後の考え込み、次のフレーズを組み立てている数百ミリ秒の間。これらは全部「話者はまだ話している」状態です。VAD にはこの区別ができません。
VAD が誤判定する 3 つのパターン
書籍『音声AIの300ms UX』の第 9 章では、VAD が誤判定する典型を 3 つに整理しています。
文中の自然なポーズを発話終了と誤判定する。 「今日の天気は……晴れです」の「……」の部分は、人間なら誰も遮りません。VAD には止まった音にしか見えないからです。
フィラーワードの後を発話終了と誤判定する。 「えーと、あの、要するに」と考えているユーザーに、AI は「えーと」の後の 200ms の沈黙で応答を返し始めます。会話が壊れる。
咳やため息を発話と誤判定する。 逆方向の失敗もあります。ユーザーが話し終わっていても、その後の吐息や咳を「まだ話している」と判定して、AI は応答を遅らせる。
3 つとも、原因は同じです。VAD は音の物理量しか見ていない。話者が何をしようとしているかは見ていない。
Krisp 6M モデルが Shift/Hold を判別する 4 つの入力パターン
Krisp が 2025 年に公開した Audio-only Turn-Taking model は、音声信号のみから Shift (ターンを渡す) / Hold (ターンを続ける) の二値を判別します。この二値判定は、以下の 4 つの入力パターンを手がかりにしています。
- 意図的な発話 — 話者が実際に情報を伝えている
- 思考中のポーズ — 次の言葉を組み立てている一時停止
- フィラーワード — 「えーと」「あのー」など、話者がまだ発話継続の意思を持っているサイン
- 割り込み — AI の発話中にユーザーがターンを取り返そうとする動き
VAD が音の物理量 (発話中 or 無音) だけで判別するのに対し、Krisp モデルは意図の層で判別します。「音が止まった」だけでは応答を始めない。
面白いのは、これが 音声のみで動く という点です。ASR (音声認識) の結果に依存しません。多言語対応も ASR を言語ごとに用意する必要がない。プロソディ (声の抑揚) とポーズパターンだけで判別しています。
Krisp はその後 v2 と v3 を出しており、v2 はより高精度で低遅延、v3 はさらに multilingual 化と精度・速度改善が加わっています。核となる考えは同じで、音を意図の層で読む。
6M パラメータ・65MB という軽さの意味
Krisp モデルの規模を見て私が驚いたのは、その小ささでした。
6M パラメータ・モデルサイズ約 65MB (Krisp 公式値)。GPT-3 の 175B や Llama 3 8B と比較すると、数万分の 1 のサイズです。
これがなぜ効くかというと、エッジで動くから です。ユーザーのマイク入力を、サーバーに送る前にローカルで解析できる。GPU は要りません。CPU で足ります。
音声AIの遅延バジェットを 300ms に収めるためには、送信前の判定が実質必須になります。100ms でネットワーク往復すると、あとは 200ms しか残らない。Krisp の 6M モデルはこのフットプリントで CPU リアルタイム推論を実現しています。
エッジで動く turn-taking モデルは、300ms UX の最後のピースでした。他のピース (TTFB、streaming、TTS の buffered start) はここ 2 年で揃ってきていたのですが、「発話終了の判定」だけが VAD のままだった。ここが変わると、応答遅延の分布がまるごとシフトします。
VAD だけで足りるとき、足りないとき
とはいえ、全ての音声AIに軽量 turn-taking モデルが必要かというと、そうではありません。
書籍第 9 章の実運用データによれば、VAD のサイレンス閾値を 300-500ms に設定すれば、多くのケースで自然な会話テンポが実現できます。閾値を下げれば誤検出が増え、上げれば応答遅延が目立つ。
問題は、ユースケースによって最適閾値が違うことです。コールセンター用途は 400-500ms (ユーザーが考えながら話す)、コマンド認識は 200-300ms (短い発話が多い)、物語・説明系は 500-600ms。
ここで、閾値のチューニングだけで対応できない領域が出てきます。
- 同一セッション内でユーザーの発話パターンが変わる (短い返事と長い説明が混在)
- フィラーワードが多い話者と少ない話者が同時に来る
- 業務ドメイン特有の思考ポーズが長い (法律相談、医療問診など)
こうした場面では、VAD のパラメータをどう調整しても両立できません。「文中で遮る」と「無音で待たされる」のどちらかが必ず出る。Krisp 6M のようなモデルは、この両立できない領域を潰します。
200-300ms 意図的遅延で「考えている感」を作る
もう 1 つ、書籍の第 3 章で触れられている「速すぎる応答は bot 感を増す」パラドックスに触れておきます。
Turn-taking モデルで発話終了を検出しても、そこから 0ms で応答を始めると、逆に不自然になる。人間同士の会話では、平均 200ms のターン遷移があります。そこにさらに 100-200ms の思考時間らしいポーズがあると、「考えて答えている感」が出る。
私が実装で使っている型は、200-300ms の意図的な遅延を挿入する。ただし、その間も LLM 推論は進めておく です。ユーザーが話し終わってから 200ms 後に応答を開始することで、体感の自然さと実際の TTFB を両立させる。
技術的にはただの待機なのに、UX 上は大きく効きます。300ms UX を作るときの最後の仕上げです。
まとめ
- VAD は音の物理量しか見ていないので、文中のポーズ・フィラー・咳を誤判定する
- Krisp の 6M パラメータ turn-taking モデルは、音声信号のみから意図的発話・思考ポーズ・フィラー・割り込みといった入力パターンを踏まえて Shift/Hold の二値を判別する
- 6M パラメータ・65MB でエッジ推論できるサイズ。CPU で動く
- 多くのユースケースは VAD の 300-500ms 閾値で十分。判定不可能な領域があるときだけ turn-taking モデルを追加する
- 発話終了を検出しても、200-300ms の意図的遅延で「考えている感」を作ると自然になる
音声AIの応答の自然さは、モデルの賢さより「話者の意図をどこまで読めるか」で決まります。「音が止まった」で答え始める AI から、「考えを終えたか」で答え始める AI へ。この差はコードの数行の話ではなく、判定モデルの層を 1 つ増やすかどうかで決まります。
関連記事
本記事の内容は書籍『音声AIの300ms — 人はなぜAIとの会話に違和感を覚えるのか』第 9 章「ターンテイキング」を元にしています。VAD 閾値のチューニング、Deepgram Flux、グレースフルアボートなど、本記事で触れなかった turn-taking の実装トピックは書籍側で扱っています。
関連書籍 音声AIの300ms 音声AI レイテンシ 設計 | 話し終えてから最初の音までを縮める 書籍ページを見る → この記事は役に立ちましたか?