Maskinöversättning · Engelskt original

Streaming Diktation

Parakeet-EOU-120M är en liten RNN-T streaming ASR modell med en explicit end-of-utterance (EOU) huvud, byggd för realtid diktation på Apple Silicon Neural Engine. Denna guide täcker också DictateDemo, macOS meny-bar referens app som trådar streaming modell tillsammans med Silero VAD för handsfree, paste-anywhere diktation.

Vad det är

Arkitektur

Tre CoreML modeller pipelined per audio chunk:

KomponentBeskrivning
EncoderCache-aware Conformer. Ta en 64-rams mel chunk (640 ms) plus sex statliga tensorer - uppmärksamhet KV cache, genast konv cache och en pre_cache mel loopback som prepends senaste-förflutet ljud så FFT ser kontinuerlig signal över chunk gränser.
DecoderSingle-steg LSTM-prediktionsnätverk. Konsumerar den tidigare icke-blank-token, avger en inbäddning plus uppdaterad (h, c)-status.
Joint + EOU huvudFuses kodare och avkodare utgångar i logiter över vocab + blank + EOU. EOU-klassen är modellens hårda signal att en yttrande är klar.

Varför en separat EOU-token

Plain RNNT avger tomma under tystnad, som avkodaren glatt absorberar utan att signalera "utterance färdig." Ett dedikerat EOU-huvud låter modellen göra en hård nedskärning för att begå partiell till en slutlig, återställa punktering / kapitalisering tillstånd och utlösa nedströms åtgärder som pasta-till-app.

EOU är bullriga i den verkliga världen

Tangentbordsklick, musrörelse och rumston under en "tyst" paus kan göra det gemensamma ibland avger en icke-svart token, återställa EOU-avstängningstimer och stoppa begåvningen. Produktionsledningar parar den gemensamma EOU med en extern VAD-driven forceEndOfUtterance() backstop - se DictateDemo nedan.

Modell

ModellStorlekHuggingFace
Parakeet-EOU-120M (CoreML INT8)120 MBaufklarer/Parakeet-EOU-120M-CoreML-INT8

Prestanda

MetricVärde
Viktminne~120 MB (INT8)
Peak inference minne~200 MB
Chunk latency (M-serie)~30 ms compute / 640 ms ljud (RTF ~0.056)
Partiell latens end-to-end~340 ms (en bit)
Begå latens (VAD väg)~1 s efter att tal stannar
BeräkningsmålNeural Engine (CoreML)

Snabbstart - batch transcription

Den streaming modellen överensstämmer också med SpeechRecognitionModel, så det fungerar som en drop-in för alla kod som tar en generisk STT-modell:

import ParakeetStreamingASR

let model = try await ParakeetStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000)

Snabbstart - Async streaming

for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
    if partial.isFinal { print("FINAL: \(partial.text)") }
    else               { print("... \(partial.text)") }
}

Var och en PartialTranscript Bilder från text, isFinal, confidence, eouDetected (gemensamt sparkat vs force-finalized), och en monotonic segmentIndex.

Långlivad session API (mikinput)

För levande diktation, skapa en session en gång och mata det bitar när de kommer från mikrofonen. sessionen buffrar internt och kör kodaren när tillräckligt med prover ackumuleras, så att du kan trycka godtyckliga bitar storlekar:

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 kraftfinalisera mönster

När en Silero VAD redan körs i din pipeline, använd den för att driva en nedgång begå så bakgrundsljud kan inte stoppa EOU-avstängningstimern:

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 meny-bar referens app

DictateDemo är en komplett macOS meny-bar agent byggd ovanpå streamingsessionen. Den körs som en bakgrundsapp, transkriberar från mic med levande partialer, auto-commits yttranden på EOU eller VAD tystnad och pastor resulterar i den främre appen.

cd Examples/DictateDemo
swift build
.build/debug/DictateDemo

Det fullständiga genomförandet lever i Examples/DictateDemo/DictateDemo/DictateViewModel.swift: en off-main ljudsänka med en låsskyddad buffert, en 300 ms timer tick som dränerar den, Silero VAD med överbliven-sampel överföring, och en bevakad kraftfinalisera. De matchande regressionstesterna i Examples/DictateDemo/Tests/DictateDemoTests.swift täcka multi-utterance, fast-EOU och bullriga tystnadsscenarier.

Streaming vs batch Parakeet

Parakeet-EOU-120M (streaming)Parakeet TDT 0.6B (batch)
Använd fallLevande diktation, realtidsinlämningFil transkription, offline jobb
DecoderRN-T + EOU-huvudetToken-and-Duration Transducer
Chunk storlek640 ms streamingHelfile batch
Viktminne120 MB500 MB
Genomströmning~18x realtid~32x realtid
Latency~340 ms partiellaEnd-of-file endast
Välj streamingmodellen när...

...du behöver partiella innan användaren slutar tala. För batch transkription av ljudfiler, den större Parakeet TDT 0.6B är snabbare änden och mer exakt. De två modellerna delar samma SentencePiece ordförråd, så att du kan byta mellan dem utan att ändra tokenization.