RealtimeVAD - 110ms早い発話終了検出を実現するVAD
Show HN: RealtimeVAD – trading false positives for 110ms earlier end-of-speech
RealtimeVADは、音声アシスタントがユーザーの発話終了をより早く検知できるようにする音声活動検出ライブラリです。Silero VADをベースに、10msごとの音量チェックを追加することで、Sileroより中央値で100ms早く「話し終えた」ことを通知します。これにより、音声認識やLLM呼び出し、音声出力の待ち時間を大幅に短縮できます。`pause`イベントは早すぎる代わりに頻繁に発火しますが、キャンセル可能な処理を先に始めることで、正しい場合に数百ミリ秒を節約できます。CPUスレッド1つで動作し、numpyとonnxruntimeのみに依存。LiveKit Agentsプラグインも提供しています。
話し手が止まったことを、Sileroより約100ms早く知る。
- nowittyusername
その問題自体を回避することもできますよ。私は「投機的再生成(speculative regeneration)」と勝手に呼んでいるパイプラインを数ヶ月前から使っていますが、とてもうまく動いています。基本的に推論サーバーにアクセスできれば問題ありません。アイデアはこうです。nミリ秒の無音(私の場合は通常300ms)ごとに、ASRの文字起こしをLLMに送ってすぐ処理させます。モデルに回答を開始させますが、ターン終了トークンに達する前にユーザーがまた話し始めたら生成をキャンセルし、再び300ms待ちます。これを繰り返します。また、推論速度に関係なく最終的なLLMの回答が確定するように、安全ウィンドウを設定する必要があります。これは魔法のようにうまくいきます。基本的にユーザーはその「無音」ウィンドウに対して最大300msのレイテンシしか受けません。したがって、レイテンシに関して心配する必要があるのは、LLMの推論速度とASR、TTSのレイテンシだけです。私のパイプラインでは、ユーザーが話し終えた瞬間に、モデルはすでに約900ms〜1.2秒以内に応答しています。私のgemma 26b moeモデル、4ビット量子化、thinkingオンで、mtpで毎秒約300トークン出ています。ASRとTTSは両方とも合計350ms未満です。とにかく、thinkingをオフにすれば速度は改善できますが、私の音声エージェントにはツール呼び出しがあり、thinkingをオフにすると常識能力が低下するので、賢いままでいてほしいのです。楽しい時代です!
- com2kid
これを投稿するのはこれで3回目くらいです。
超高速な小さなショボいLLMを動かしましょう。あるいは最近なら決定モデルを試すのがさらに良いでしょう。
前の会話ターンと、これまでに得られたすべてのSTT(ASR出力)を入力し、ユーザーが話し終えたかどうかの確率を尋ねるだけです。
その確率を使ってVAD時間を短縮します。
真の音声-to-音声モデルほどではありませんが、純粋なVADと比べて数百ミリ秒削減できます。おまけに、ユーザーがまだ話し終えていないときはより長く待つこともできます。