RealtimeVAD - Schnellere Spracherkennung für Voice-Pipelines
Show HN: RealtimeVAD – trading false positives for 110ms earlier end-of-speech
RealtimeVAD ist eine Open-Source-Bibliothek, die Sprachassistenten dabei hilft, das Ende einer Äußerung deutlich früher zu erkennen als herkömmliche VADs. Sie kombiniert Silero VAD mit einer schnellen Pegelprüfung alle 10 ms und liefert so ein 'pause'-Event im Median 100 ms vor Silero. Das beschleunigt ASR, LLM-Aufrufe und Sprachausgabe erheblich. Die Bibliothek läuft auf einem CPU-Thread, benötigt nur numpy und onnxruntime und ist als Drop-in-Ersatz für Silero VADIterator sowie als LiveKit-Plugin verfügbar. Ideal für Entwickler, die ihre Voice-Assistant-Pipelines reaktionsschneller machen wollen.
RealtimeVAD erkennt das Ende einer Äußerung im Median 100 ms früher als Silero – und das bei nur einem CPU-Thread.
- nowittyusername
Du kannst das Problem auch komplett vermeiden. Ich habe eine „speculative regeneration“ gebaut – zumindest nenne ich das so – eine Pipeline, die ich seit vielen Monaten nutze und die hervorragend funktioniert. Im Grunde genommen bist du gut aufgestellt, solange du Zugriff auf den Inferenzserver hast. Die Idee ist folgende: Alle n Millisekunden Stille (bei mir normalerweise 300 ms) schickst du das ASR-Transkript sofort an das LLM zur Verarbeitung. Du lässt das Modell mit der Antwort beginnen, aber wenn der Nutzer wieder zu sprechen beginnt, bevor das End-of-Turn-Token erreicht ist, brichst du die Generierung ab und wartest erneut auf die 300 ms. Und so weiter und so fort. Du musst außerdem ein Sicherheitsfenster einrichten, damit die endgültige LLM-Antwort unabhängig von ihrer Inferenzgeschwindigkeit finalisiert wird. Funktioniert wie am Schnürchen. Im Grunde bekommt der Nutzer für dieses „Stille“-Fenster eine Latenz von höchstens 300 ms. Das Einzige, worum du dich in Sachen Latenz sonst noch kümmern musst, sind die Inferenzgeschwindigkeiten des LLM sowie die Latenzen von ASR und TTS. In meiner Pipeline antwortet das Modell, sobald der Nutzer aufhört zu sprechen, bereits innerhalb von etwa 900 ms bis 1,2 Sekunden. Es ist mein Gemma 26B MoE Modell, 4-Bit-Quantisierung, Thinking an … mit MTP kommen etwa 300 Token pro Sekunde raus … ASR und TTS liegen beide zusammen unter 350 ms … Wie auch immer, die Geschwindigkeiten könnten verbessert werden, wenn man Thinking ausschaltet, aber ich mag meinen Voice-Agenten schlau, da er Tool-Calling hat und die Fähigkeit zum gesunden Menschenverstand nachlässt, wenn Thinking aus ist … verrückte Zeiten!
- com2kid
Das ist ungefähr das dritte Mal, dass ich das poste –
Lass ein winziges, beschissenes LLM laufen, eines, das super schnell ist. Oder besser noch, probier heutzutage ein Decision-Modell aus.
Füttere es mit dem vorherigen Gesprächszug und allem STT (ASR-Ausgabe), das du bisher hast, und frag es einfach nach einer Wahrscheinlichkeit, dass der Nutzer mit dem Sprechen fertig ist.
Nutze diese Wahrscheinlichkeit, um deine VAD-Zeit zu verkürzen.
Es ist nicht so gut wie ein echtes Speech-to-Speech-Modell, aber das spart ein paar hundert Millisekunden im Vergleich zu reinem VAD. Oh, und als Bonus kannst du auch länger warten, wenn der Nutzer noch nicht fertig ist mit Sprechen.