p99 et VAP — Modèles de prise de parole

p99 estime la probabilité de fin de tour à partir d’un canal audio. VAP prédit l’activité vocale à partir de canaux synchronisés de l’utilisateur et de l’agent. L’application décide quand répondre ou interrompre.

Compilez le SDK depuis les sources pour ces API. Swift utilise SpeechVAD ; C++ nécessite SPEECH_CORE_WITH_ONNX=ON. L’API Android utilise ONNX Runtime. Ces API indépendantes conservent les réglages par défaut du pipeline existant.

Modèles

p99 turn-1-mini5.3M · CoreML · Float3216 kHz · 160 ms · 1 chApache-2.0
VAP (otoSpeech)5.8M · CoreML / ONNX · Float3216 kHz · 20 s · 2 chCC BY 4.0 / MIT

Swift API

p99 conserve les pas incomplets. Chaque pas de 160 ms renvoie huit trames de 20 ms. Utilisez availableAfterSeconds pour dater la décision et réinitialisez la session entre les conversations.

import SpeechVAD

let p99 = try await P99TurnModel.fromPretrained()
let session = try p99.createSession()
let frames = try session.pushAudio(pcm16k)
for frame in frames {
    print(frame.probability, frame.availableAfterSeconds)
}
try session.reset()

let vap = try await VAPModel.fromPretrained()
let forecast = try vap.forecast(userAudio: userPcm, agentAudio: agentPcm)
print(forecast.pNow, forecast.pFuture, forecast.voiceActivity)

VAP utilise les 20 dernières secondes à 16 kHz. Les canaux doivent avoir la même longueur ; fournissez des zéros lorsque l’agent est silencieux. Les entrées courtes sont complétées au début. Chaque prédiction recalcule la fenêtre : choisissez une fréquence adaptée à l’appareil.

C++

#include <speech_core/models/onnx_vap.h>

speech_core::OnnxVap model("models/vap.onnx");
auto forecast = model.forecast(user.data(), agent.data(), user.size(), 16000);
// p_now[0]: user, p_now[1]: agent
// p_future and voice_activity use the same channel order.

Android

val directory = ModelManager.ensureVapModels(context)
withContext(Dispatchers.Default) {
    VoiceActivityProjection(VoiceActivityProjectionConfig(directory)).use { model ->
        val forecast = model.forecast(userPcm, agentPcm)
        println(forecast.userNearTerm)
        println(forecast.agentNearTerm)
    }
}

Téléchargements

Résultats des tests

TurnBench · Soniqo

Licences