p99 и VAP — Модели смены реплик

p99 оценивает вероятность окончания реплики по одному аудиоканалу. VAP прогнозирует речевую активность по синхронным каналам пользователя и агента. Когда отвечать или перебивать, решает приложение.

Для этих API соберите SDK из исходников. Swift использует SpeechVAD; для C++ нужен SPEECH_CORE_WITH_ONNX=ON. Android API использует ONNX Runtime. Настройки существующего конвейера по умолчанию не меняются.

Модели

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 накапливает неполные шаги. Каждый шаг длиной 160 мс возвращает восемь кадров по 20 мс. Для времени решения используйте availableAfterSeconds. Сбрасывайте сессию между разговорами.

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 использует последние 20 секунд аудио с частотой 16 кГц. Длины каналов должны совпадать; для молчащего агента передавайте нули. Короткие входы дополняются тишиной в начале. Каждый прогноз заново вычисляет всё окно: выбирайте интервал под устройство.

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)
    }
}

Загрузка

Результаты тестов

TurnBench · Soniqo

Лицензии