Automatische vertaling · Engels origineel

Streaming Dictation

Parakeet-EOU-120M is een kleine RNN-T-streaming ASR-model met een expliciete eind-van-toettering (EOU) hoofd, gebouwd voor real-time dictering op Apple Silicon's Neural Engine. Deze gids omvat ook DictateDemo, de macOS menu-bar referentie-app die het streaming model bedraadt met Silero VAD voor hands-free, plak-anywhere diction.

Wat het is.

Architectuur

Drie CoreML modellen die per audioblok worden gepipelined:

Onderdeel Omschrijving
EncoderCache-aware Conformer. Neemt een 64-frame mel chunk (640 ms) plus zes state tensors .. aandacht KV cache, deepwise conv cache, en een pre_cache mel loopback dat prepends recent-verleden audio, zodat de Fiat ziet continue signaal over brok grenzen.
Decoder Een-stap LSTM voorspelling netwerk. Consumeert de vorige niet-blanco token, zendt een inbedding plus bijgewerkt (h, c) status.
Gewricht + GOO-hoofdDe encoder en decoder worden gebruikt in logits over vocab + blank + EOU. De EGU klasse is het harde signaal van het model dat een uitdrukking is voltooid.

Waarom een aparte EOU token

Een speciale EOU-kop laat het model een harde snit maken voor het committen van de gedeeltelijke naar een definitieve, resetting punctuation/capitalization state, en het activeren van downstream acties zoals pasta-to-app.

EOU is luidruchtig in de echte wereld

Toetsenbordklikken, muisbeweging en roomtone tijdens een "stille" pauze kunnen het gewricht af en toe een niet-blank token laten uitstoten, de EOU debounce timer resetten en de commit vertragen. Productiepijpleidingen koppelen de gezamenlijke EOU aan een externe VAD-gedreven forceEndOfUtterance() backstop

Model

Model GrootteHuggingFace
Parakeet-EOU-120M (CoreML INT8)120 MBaufklarer/Parakeet-EOU-120M-CoreML-INT8

Prestaties

Metrisch Waarde
Gewichtsgeheugen~120 MB (INT8)
Piek-inferentiegeheugen200 MB
Chunk latency (M-serie)~30 ms compute / 640 ms audio (RTF ~0,056)
Gedeeltelijke latentie eind-tot-eind~340 ms (één stuk)
Commit latency (VAD pad)~1 s na het stoppen van de spraak
Doel berekenenNeural Engine (CoreML)

Snel starten met een batch transcriptie

Het streamingmodel voldoet ook aan SpeechRecognitionModel, dus het werkt als een drop-in voor elke code die een generiek STT-model neemt:

import ParakeetStreamingASR

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

Snel starten met een async-streaming

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

Elk PartialTranscript draagt text, isFinal, confidence, eouDetected (gezamenlijk afgevuurd vs. kracht-afgerond), en een monotone segmentIndex.

Langlevende sessie API (mic input)

Voor live diction, maak een sessie eenmaal en voer het brokken als ze komen uit de microfoon. De sessie buffert intern en draait de encoder wanneer genoeg samples zich ophopen, zodat je willekeurige brok maten kunt duwen:

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 krachtafrondingspatroon

Als een Silero VAD al in je pijplijn draait, gebruik het dan om een terugval commit te sturen zodat achtergrondruis de EOU debounce timer niet kan vertragen:

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 menubalkreferentie-app

DictateDemo is een complete macOS menubalk die bovenop de streamingsessie is gebouwd. Het draait als een achtergrondapp, transcribeert vanuit de microfoon met live partials, automatisch committeert uitingen op EGO of VAD stilte, en past de pasta's resulteert in de meest front app.

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

De volledige implementatie leeft in Examples/DictateDemo/DictateDemo/DictateViewModel.swift: een off-main audio-spoelbak met een afgesloten buffer, een 300 ms timer vink die het afvoert, Silero VAD met restsample carry-over, en een bewaakte kracht-afronding. De bijbehorende regressietests in Examples/DictateDemo/Tests/DictateDemoTests.swift dekken multi-utterance, fixed-EOU, en noisy-silence scenario's.

Streaming vs batch Parakeet

Parakeet-EOU-120M (streaming)Parakeet TDT 0,6B (batch)
Use caseLive diction, real-time ondertiteling Bestand transcriptie, offline taken
DecoderRNN-T + EOU-hoofdToken-and-Duration Transducer
Chunk-grootte640 ms streamingGeheel bestandspartij
Gewichtsgeheugen120 MB500 MB
Doorvoer~18x real-time~32x real-time
Matigheid~340 ms gedeeltelijke Alleen einde van bestand
Kies het streamingmodel wanneer...

...voordat de gebruiker het woord afsluit. Voor batch transcriptie van audiobestanden is de grotere Parakeet TDT 0.6B sneller end-to-end en nauwkeuriger. De twee modellen delen dezelfde SentencePiece woordenschat, zodat je tussen hen kunt wisselen zonder tokenization te veranderen.