Maskinoversættelse · Engelsk original
Streaming Diktation
Parakeet-EOU-120M er en lille RNN-T streaming ASR model med en eksplicit end- of- ytterance (EOU) hoved, bygget til real-time diktation på Apple Silicon Neural Engine. Denne vejledning dækker også DictateDemo, macOS menu- bar reference app, der leder streaming model sammen med Silero VAD til håndfri, paste- overalt diktat.
Hvad er det?
- Levende dele - tekst opdateringer, som du taler, ~ 340 ms efter hver klump
- Explicit EOU - model beslutter, hvornår en udtale slutter, ingen manuel knap
- VAD- drevet kraft- finalize - Silero backstop forpligter sig til udtalelser, selv når EOU boder på baggrundsstøj
- 120 MB INT8 CoreML - kører på Neural Engine, efterlader GPU gratis for andre modeller
- 25 Europæiske sprog - samme ordforrådsfamilie som opstrøms NeMo Parakeet TDT
Arkitektur
Tre CoreML modeller caused per audio chunk:
| Komponent | Varebeskrivelse |
|---|---|
| Encoder | Cache- aware Conformer. Tager en 64- frame mel chunk (640 ms) plus seks tilstand tensorer - opmærksomhed KV cache, depthwise conv cache, og en pre_cache Mel smutback, der kommer før-forbi lyd, så FFT ser kontinuerligt signal på tværs af stykker grænser. |
| AfkoderStencils | Single- step LSTM forudsigelse netværk. Forbruger den tidligere non-blank token, udsender en indlejring plus opdateret (h, c) Stat. |
| Joint + EOU-leder | Sikrer encoder og dekoder udgange til logarits over vocab + blank + EOUEOU-klassen er modellens hårde signal om, at en udtalelse er færdig. |
Hvorfor en separat EOU-token
Plain RNT udsender løse under stilhed, som dekoderen med glæde absorberer uden at signalere "udtale færdig". En dedikeret EOU-hoved lader modellen gøre en hård cut for at forpligte den delvise til en endelig, nulstille punktuation / kapitalisering stat, og udløse downstream-handlinger som paste- to- app.
Tastaturklik, mus bevægelse, og room tone under en "tavs" pause kan gøre fælles lejlighedsvis udsende en ikke-blank token, nulstille EOU debounce timer og bremse commit. Produktion rørledninger parre den fælles EOU med en ekstern VAD-drevet forceEndOfUtterance() backstop - se DictateDemo nedenfor.
Model
| Model | Størrelse | HuggingFace |
|---|---|---|
| Parakeet-EOU-120M (CoreML INT8) | ~ 120 MB | aufklarer / Parakeet-EOU-120M-CoreML-INT8 |
Præstation
| Metric | Værdi |
|---|---|
| Vægthukommelse | ~ 120 MB (INT8) |
| Peak inferens hukommelse | ~ 200 MB |
| Chunk latency (M- serie) | ~30 ms beregne / 640 ms af lyd (RTF ~0.056) |
| Delvis latency end-to-end | ~ 340 ms (en klump) |
| Kommisionsevne (VAD sti) | ~ 1 s efter tale stopper |
| Beregn mål | Neural Engine (CoreML) |
Hurtig start - batch transskription
Den streaming model er også i overensstemmelse med SpeechRecognitionModel, så det virker som en drop-in for enhver kode, der tager en generisk STT model:
import ParakeetStreamingASR
let model = try await ParakeetStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000)
Hurtig start - async streaming
for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
if partial.isFinal { print("FINAL: \(partial.text)") }
else { print("... \(partial.text)") }
}
Hver PartialTranscript cars text, isFinal, confidence, eouDetected (fælles fyret vs kraft- færdiggjort), og en monotonic segmentIndex.
Long- lived session API (mic input)
For live diktat, oprette en session én gang og fodre det stykker, som de ankommer fra mikrofonen. Sessionen buffere internt og kører encoder, når nok prøver akkumuleres, så du kan skubbe vilkårlige stykker størrelser:
let session = try model.createSession()
// each mic chunk:
let partials = try session.pushAudio(float32Chunk16kHz)
for p in partials {
if p.isFinal { commit(p.text) }
else { showPartial(p.text) }
}
// when the stream ends:
let trailing = try session.finalize()
VAD kraft- finalisér mønster
Når en Silero VAD allerede kører i din rørledning, bruge det til at køre en fallback begå, så baggrundsstøj kan ikke holde EOU debounce timer:
if hasPendingUtterance && !vadSpeechActive && vadSilentChunks >= 30 {
// ~960 ms of sustained silence per Silero
if let forced = session.forceEndOfUtterance() {
commit(forced.text)
}
hasPendingUtterance = false
}
// guardrail: don't double-commit if joint already fired EOU
if partials.contains(where: { $0.isFinal }) {
hasPendingUtterance = false
}
DictateDemo - macOS menu- bar reference app
DictateDemo er en komplet macOS menu- bar agent bygget på toppen af streaming session. Det kører som en baggrund app, transskribere fra mikrofonen med levende partialer, auto-forpligter udtalelser på EOU eller VAD tavshed, og pace resultater i den forreste app.
- Menu- bar app med global
Cmd+Shift+DgenvejName - Levende dele med flydende HUD-indikator og lydindikator
- Vade-bevogtet kraft-finalize (produktionsmønster ovenfor)
- Paste- to- frontmost- app med
Cmd+Shift+V - Model auto- downloads ved første lancering (~ 120 MB)
cd Examples/DictateDemo
swift build
.build/debug/DictateDemo
Den fulde gennemførelse lever i Examples/DictateDemo/DictateDemo/DictateViewModel.swift: en off- main audio vask med en lock- beskyttet buffer, en 300 ms timer tick, der dræner det, Silero VAD med leptover- prøve carding-over, og en bevogtet kraft- finalize. Examples/DictateDemo/Tests/DictateDemoTests.swift dække multi- ytterance, stuck-EOU, og noisy- stilhed scenarier.
Streaming vs batch Parakeet
| Parakeet-EOU-120M (streaming) | Parakeet TDT 0.6B (batch) | |
|---|---|---|
| Brugstilfælde | Live-diktat, real- time captioning | Filtransskription, offline job |
| AfkoderStencils | RNN-T + EOU-hoved | Token-and-Varighed Transducer |
| Klunkstørrelse | 640 ms streaming | Whole- file batch |
| Vægthukommelse | ~ 120 MB | 500 MB |
| Deponering | ~ 18x real- time | ~ 32x real- time |
| LATEY | ~ 340 ms partialer | Kun Ende- of- file |
... du har brug for partialer, før brugeren slutter taler. For batch transskription af lydfiler, den større Parakeet TDT 0.6B er hurtigere end-to-end og mere præcis. De to modeller deler den samme SentencePiece ordforråd, så du kan bytte mellem dem uden at ændre additionalisation.