תרגום מכונה · המקור באנגלית

p99 ו VAP - מודלים של Turn-take

p99 מעריך את ההסתברות מקצה-החזרה מערוץ אודיו אחד. VAP חיזוי פעילות דיבור מערוצי משתמשים וסוכנים מסונכרנים.היישום משתמש בציונים אלה כדי להחליט מתי לענות או להפריע.

לבנות את SDK מקור ל- API אלה. Swift שימוש ב-VAD; C++ דורש SPEECH_CORE_WITH_ONNX=ON. Android API שימושים ONNX Runtimeממשקי API אלה עומדים לעזוב את ברירת המחדל של הצינור הקיים.

מודלים

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

Swift API

p99 buffers לא שלמים.כל אחד 160 מ's צעד מחזיר שמונה 20 מ"מ מסגרות.שימוש זמין לאחר שניות לתזמון החלטות, ולאפס את המפגש בין שיחות.

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 kHz.אספקת ערוצים באורך שווה ואפס עבור סוכן לא פעיל. קלטות קצרות יותר מקבלות שתיקה מובילה.כל תחזית משנה מחדש את החלון; לבחור מרווח בקשה שמתאים למכשיר.

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

הורדות

תוצאות Benchmark

TurnBench · Soniqo

המונחים: