Konekäännös · Englanninkielinen alkuperäinen
Smart Turn ...
Smart Turn v3.2 vastaa yhteen kysymykseen sen jälkeen VAD raportoi tauko: onko puhuja valmis, vai ovatko ne puolivälissä sentence? Se kuuntelee äänen itse prosodia, vauhti, intonaatio ... 23 kielet, ja kulkee kerran per tauko viime 8 painot ovat virallinen Pipecat Smart Turn v3.2 Julkaisu (BSD-2-Clause), joka on laadittu CoreML Apple-alustojen osalta ja viety ONNX Puheen ytimeen.
Äänen toiminnan ilmaisin kuulee vain hiljaisuuden. Ihmiset pysähtyvät ajattelemaan kesken lauseen, joten vain VAD-agentti joko katkaisee ne tai odottaa pitkää, kiinteää aikakatkaisua jokaisen lauseen jälkeen. Smart Turn vahvistaa jokaisen tauon: valmis lause saa välittömän vastauksen, välilauseen tauko pitää agentin kuuntelemassa.
Miten se toimii?
Smart Turn ei ole VAD eikä havaitse puhetta yksinään. Se on yhdistetty streamaukseen Silero VAD, joka päättää milloin kysyä. Kun siihen on liitetty luokituslaite, vahvistettu tauko muuttuu kysymykseksi eikä tuomioksi:
- Kysy kerran taukoa kohti. Kun Silero vahvistaa tauon (
minSilenceDurationoffset-kynnyksen jälkeen), prosessori ohjaa käännöksen äänen tähän mennessä 0,5 sekunnista ennen VAD -nousua nykyiseen osaan asti, joka on rajattu 8 sekunniksi. - Täydellinen. Todennäköisyys
threshold(0,5):.speechEndedtulipalot kuten tavallisesti. - Pidä. Kynnysrajan alapuolella segmentti pysyy auki. Jos puhuja jatkaa, sama segmentti jatkuu: ei sekunti
.speechStarted. - Hiljainen korkki. Jos hiljaisuus saavuttaa
maxSilenceDuration(2.0 s, mitattuna tauon alusta), segmentti loppuu joka tapauksessa, joten pois jäänyt puhuja saa silti vastauksen.endTimeei silloin, kun korkki on vanhentunut.
flush() selvittää hallussa segmentin lopussa stream ja reset() Heittoa kuvaava luokittelu on "täydellinen," joten epäonnistunut malli ei koskaan viivytä keskustelua. isHoldingTurn ilmoittaa, että tila on kunnossa ja lastTurnCompletionProbability viimeisin vastaus.
Malli
| Omaisuus | Arvo |
|---|---|
| Arkkitehtuuri | Whisper-Tiny kooder + huomiota sammio + MLP pää kanssa sigmoid ulostulo |
| Parametrit | 8,0M |
| Syöte | Viimeiset 8 s 16 kHz:n monoääni (128,000-näytteet); lyhyemmät käännökset on nollattu edessä, muut näytemäärät otetaan uudelleen |
| Tuotos | Todennäköisyys [0, 1], että kierros on täydellinen; oletusarvo 0,5 |
| Kieli | 23 ... arabia, bengali, kiina, tanska, hollanti, englanti, suomi, ranska, saksa, hindi, indonesia, italia, japani, korea, marathi, norja, puola, portugali, venäjä, espanja, turkki, ukraina, vietnam |
| Lisenssi | BSD-2-Clause |
Viennin upottaa Whisper log-mel etupää, mukaan lukien aaltomuoto normalisointi ylämallin oli koulutettu, joten soittajat siirtää raaka audio ... ei ole ominaisuus uuttaminen Swift tai C++.
Tulos
| Vie | Koko | Tarkkuus | Latenssi 8 sekunnin ikkunaa kohti |
|---|---|---|---|
| CoreML (CPU + Neural Engine) | 16.8 MB | 92.9% | 3,5 ms |
| ONNX fp32 (ONNX Runtime, CPU) | 33 Mt | 92.9% | ~36 ms 2langalla, 20 ms 4 |
| ONNX int8 (ONNX Runtime, CPU) | 11,1 Mt | 93.0% | ~36 ms 2langalla, 20 ms 4 |
Tarkkuus mitataan 1,000-leikkeitä ylävirtaan testi setti; CoreML ja fp32 ONNX vienti vastaa ylävirtaan fp32 malli täsmälleen näissä leikkeissä. Latenssi on yksi 8 sekunnin ikkuna Apple M5 Pro. Yksi puhelu per tauko lisää mitään huomaamatonta tauko VAD jo odottanut.
Swift API
Yhden shotin tarkistus nauhoitettuun lauseeseen:
import SpeechVAD
let turn = try await SmartTurnModel.fromPretrained()
try turn.prewarm() // compile the graph before the first real pause
let probability = try turn.turnCompleteProbability(
audio: utterance, sampleRate: 16_000)
if probability >= SmartTurnModel.defaultThreshold {
// finished turn — reply now
}
Striimaukseen VAD kiinnitettynä, joten jokainen vahvistettu tauko tarkistetaan ennen segmentin päättymistä:
let vad = try await SileroVADModel.fromPretrained(engine: .coreml)
let turn = try await SmartTurnModel.fromPretrained()
let processor = StreamingVADProcessor(
model: vad,
config: .sileroDefault,
turnCompletion: turn,
turnCompletionConfig: TurnCompletionConfig(threshold: 0.5, maxSilenceDuration: 2.0))
for chunk in microphoneChunks { // Float32 @ 16 kHz
for event in processor.process(samples: chunk) {
switch event {
case .speechStarted(let time): print("speech at \(time)s")
case .speechEnded(let segment): print("turn \(segment.startTime)–\(segment.endTime)s")
}
}
}
let remaining = processor.flush()
SmartTurnModel on TurnCompletionProvider -protokollassa AudioCommon, joten kaikki muut samanmuotoiset luokittelut voidaan liittää. fromPretrained(cacheDir:offlineMode:) noudattaa samoja välimuisti- ja offline-sääntöjä kuin muissa malleissa.
Äänipipeliini
VoicePipeline ottaa saman kategorian, joten ääniagentti lopettaa ihmisten katkaisemisen ilman muutoksia sen STT, TTS tai VAD asetukset. Kaksi PipelineConfig kentät ja yksi menetelmä kytkeä se; ne vaativat speech-swift v0.0.27 tai myöhemmin (SpeechCore.xcframework alkaen speech-core v0.0.14).
import SpeechCore
import SpeechVAD
let smartTurn = try await SmartTurnModel.fromPretrained()
try smartTurn.prewarm()
var config = PipelineConfig()
config.turnCompletionThreshold = 0.5 // pause ends the turn when p >= this
config.turnCompletionMaxSilence = 2.0 // seconds of silence that end a held turn anyway; 0 = never
let pipeline = VoicePipeline(stt: stt, tts: tts, vad: vad, config: config, onEvent: { print($0) })
pipeline.setTurnCompletion(smartTurn) // before start(); nil detaches
pipeline.start()
| API | Oletus | Vaikutus |
|---|---|---|
turnCompletionThreshold | 0.5 | Täydentymistodennäköisyys, jonka yläpuolella VAD -tauko päättää käyttäjän vuoron. Käytetään vain, kun luokituslaite on kiinnitetty. |
turnCompletionMaxSilence | 2,0 s | Hiljaisuuden sekunteja mitattuna tauon alusta, jonka jälkeen kategorian veto-oikeus päättyy joka tapauksessa. 0 = ei koskaan. |
setTurnCompletion(_:) | — | Kiinnittää kaikki TurnCompletionProvider. Soita ennen start(); välitä nil irrota. Luokituslaite, joka heittää lasketaan kokonaan, joten epäonnistuva malli ei koskaan keskeytä keskustelua. |
Kun luokittelulaite on kiinnitettynä, käyttäjän kääntöpysäkki VAD päättyy vain, kun todennäköisyys saavuttaa kynnyksen; sen alapuolella putkisto kuuntelee, puhe, joka jatkuu samalla käännöksellä (ei sekunti speechStarted) ja turnCompletionMaxSilence päättää käännöksen joka tapauksessa. Eager STT kunnioittaa veto-oikeutta ja luokittelija toimii kerran taukoa kohti äänilangassa, joten soita prewarm() latauksen jälkeen.
Viritys
| Asetukset | Oletus | Vaikutus |
|---|---|---|
threshold | 0.5 | Alemmat arvot päättyvät nopeammin ja keskeytyvät useammin; korkeammat arvot odottavat kauemmin ennen vastaamista. Katso lastTurnCompletionProbability todellisista keskusteluista ennen niiden siirtämistä. |
maxSilenceDuration | 2,0 s | Vetotauko ei voi koskaan pitää kierrosta tätä pidempinä. 0 poistaa korkin käytöstä: pidetty segmentti odottaa sitten puhetta tai flush(). |
preRollDuration | 0.5 s | Ääni ennen VAD -alkua, joka sisältyy luokituslaitteen tuloon, joten ensimmäinen tavu on vielä mallissa. |
Silero's minSilenceDuration päättää edelleen, milloin tauko vahvistetaan, ja sen vuoksi, kun luokittelulaitetta pyydetään. Soita prewarm() ladattuasi, joten ensimmäinen todellinen tauko ei maksa kaavion kokoamista.
CLI-käyttö
# Probability, complete/incomplete verdict and inference time for one utterance
speech turn utterance.wav
# Custom threshold, JSON output
speech turn utterance.wav --threshold 0.7 --json
# Local bundle, no download
speech turn utterance.wav --model-dir ~/smart-turn-coreml
# Streaming VAD with Smart Turn confirming each pause; mid-sentence pauses merge
speech vad-stream call.wav --smart-turn
speech vad-stream call.wav --smart-turn --turn-threshold 0.6 --turn-max-silence 1.5
| Vaihtoehto | Komento | Tavaran kuvaus |
|---|---|---|
--threshold | turn | Todennäköisyys at tai yli, jonka kierros lasketaan täydellinen (oletus 0,5) |
--json | turn | Emit probability, threshold, complete sekä latency_ms JSONina |
--model, -m | turn | HuggingFace repo, jossa on sama ulkoasu (oletus aufklarer/Smart-Turn-v3.2-CoreML) |
--model-dir | turn | Paikallinen hakemisto, jossa smart_turn.mlmodelc ja config.json; jättää latauksen väliin |
--smart-turn | vad-stream | Vahvista jokainen tauko Smart Turn:lla ennen segmentin päättymistä |
--turn-threshold | vad-stream | Smart Turn valmistumiskynnys (oletusarvo 0,5) |
--turn-max-silence | vad-stream | Sekunteja hiljaisuuden jälkeen vetotauko, joka lopettaa segmentin joka tapauksessa (oletus 2.0) |
speech turn lataa tiedoston (mikä tahansa näytenopeus), tekee pisteet viimeisten 8 sekunnin aikana ja tulostaa todennäköisyyden, tyhjentääkö se kynnyksen, ja sen vaikutusajan. Käytä sitä omien äänitteiden kynnyksen viritykseen. Täysi lippuluettelo on CLI-viittauksessa .
C++ / Android
Puhe Ydinalukset saman mallin kuin OnnxSmartTurn Linux, Windows ja Android (vain ONNX Runtime; LiteRT-varianttia ei ole). VoicePipeline::set_turn_completion() Kiinnittää sen ennen start(); VAD-tauko päättyy käyttäjän vuoroon vain, kun todennäköisyys saavuttaa turn_completion_threshold (0.5) ja turn_completion_max_silence (2.0 s) päättää kuitenkin pidetyn käännöksen. C API paljastaa saman koukun kuin sc_turn_completion_vtable_t + sc_pipeline_set_turn_completion(), joten Kotlin tai Swift isännät voivat silta oman luokittelun VAD.
#include <speech_core/models/onnx_smart_turn.h>
speech_core::OnnxSmartTurn model("/models/smart-turn-v3.2-int8.onnx");
// Audio of the turn so far at any rate (resampled to 16 kHz internally).
float p = model.turn_complete_probability(turn.data(), turn.size(), rate);
// Or let the pipeline ask it on every VAD pause (before start()).
pipeline.set_turn_completion(&model);
speech CLI of Speech Core tekee nauhoituksen samalla tavalla kuin macOS:
speech download-models # fetches the int8 graph with the other ONNX models
speech turn recording.wav --threshold 0.5 --json
Mallitiedostot, C API -sopimus ja CLI-sopimus on dokumentoitu Puheydin -sivulla ja arkiston docs/models.md .
Mallilataukset
| Malli | Taustaosa | Koko | HuggingFace |
|---|---|---|---|
| Smart-Turn-v3.2 | CoreML | 16.8 MB | aufklarer/Smart-Turn-v3.2-CoreML |
| Smart-Turn-v3.2 | ONNX (fp32 + int8) | 33 MB / 11,1 MB | soniqo/Smart-Turn-v3.2-ONNX |
Lähde
- Sources/SpeechVAD ...
SmartTurnModelandStreamingVADProcessor - docs/models/smart-turn-v3.md mallihuomautukset
- docs/inference/smart-turn.md .
- speech-core docs/models.md ...
OnnxSmartTurn - Ylävirta: pipecat-ai/älykäännös / pipecat-ai / smart-turn-v3 (Pipecat, BSD-2-Clause)