Traducere automată · Originalul în engleză

Streaming Dictation

Parakeet-EOU-120M este un mic streaming RNN-T ASR model cu un cap explicit de sfârșit de ture (EOU), construit pentru dictare în timp real pe Apple Silicon's Neural Engine. Acest ghid acoperă, de asemenea, DictateDemo, aplicaţia macOS menu-bar de referinţă care leagă modelul de streaming împreună cu Silero VAD

Ce este?

Arhitectură

Trei modele de tip CoreML prevăzute pe bucată audio:

Componentă Descriere
CodorCache-aware Conformer. Ia o bucată de 64-frame mel (640 ms) plus șase tensori de stat. atenție KV cache, conv cache adâncime, și un pre_cache mel loopback care prepends audio recent trecut astfel încât FFT vede semnal continuu peste limitele bucății.
DecodorReţeaua de predicţie LSTM cu un singur pas. Consumă jetonul anterior nealbit, emite o înglobare plus starea actualizată (h, c).
Capul articulat + EOUFuses encoder și decodor iese în logits peste vocab + blank + EOU. Clasa EOU este semnalul dur al modelului că o declarație este terminată.

De ce un jeton EOU separat

Simpla RNNT emite goluri în timpul tăcerii, pe care decodorul le absoarbe fericit fără a semnala "absolut." Un cap EOU dedicat permite modelului să facă o tăietură grea pentru comiterea parţială a unei stări finale, resetarea punctualităţii/capitalizării, şi declanşarea acţiunilor din aval cum ar fi past-to-ap.

EOU este zgomotos în lumea reală

Clicuri tastatură, mișcarea mouse-ului, și ton de cameră în timpul unei pauze "silent" poate face articulația ocazional emite un jeton non-blank, resetarea EOU debounce temporizorul și stagnarea comite. Conductele de producție perechea EOU comun cu un EOU extern VAD-drived forceEndOfUtterance() backstop . vezi DictateDemo mai jos.

Model

ModelDimensiuneHuggingFace
Parakeet-EOU-120M (CoreML INT8)~120 MOaufklater/Parakeet-EOU-120M-CoreML-INT8

Performanță

Metrică Valoare
Memorie greutate~120 MB (INT8)
Memorie de inferență maximă~200 MO
Latență în bucăți (M-serie)~30 ms calcul / 640 ms de audio (RTF ~0.056)
Latență parțială la sfârșit~340 ms (o bucată)
Comite latența (VAD cale)~1 s dupa ce discursul se opreste
Calculează țintaNeural Engine (CoreML)

Start rapid transcriere lot

Modelul de streaming este, de asemenea, conform cu SpeechRecognitionModel, astfel încât funcționează ca un drop-in pentru orice cod care ia un model STT generic:

import ParakeetStreamingASR

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

Start rapid

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

Fiecare PartialTranscript transportă text, isFinal, confidence, eouDetected (joint pounded vs force-finalized) și un monoton segmentIndex.

Sesiune de lungă durată API (mic input)

Pentru dictare live, creați o sesiune o dată și hrăniți-l bucăți în timp ce sosesc de la microfon. Tamponul sesiune intern și ruleaza codorul atunci când se acumulează suficiente probe, astfel încât să puteți împinge dimensiuni arbitrare bucăți:

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 model de finisare a forței

Atunci când un Silero VAD rulează deja în conducta dumneavoastră, utilizați-l pentru a conduce un accident de rezervă astfel încât zgomotul de fond nu poate bloca cronometrul debuunce EOU:

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 bază de referință macOS

DictateDemo este un agent complet macOS menu-bar construit pe partea de sus a sesiunii de streaming. Se execută ca o aplicație de fundal, transcrie de la microfon cu partiale live, declarații auto-commite pe EOU sau VAD tăcere și paste rezultate în aplicația cea mai din față.

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

Implementarea completă trăieşte în Examples/DictateDemo/DictateDemo/DictateViewModel.swift: o chiuvetă audio off-main cu un tampon protejat de blocare, o căpuşă temporizată de 300 ms care îl drenează, Silero VAD cu o încărcătură de eşantion rămasă şi o forţă de pază-finalizare. Testele de regresie corespunzătoare în Examples/DictateDemo/Tests/DictateDemoTests.swift acoperă multi-uterance, blocat-EOU, şi scenarii de tăcere zgomotoasă.

Streaming vs lot Parakeet

Parakeet-EOU-120M (streaming) Parakeet TDT 0,6B (batch)
Utilizați cazulDictare live, subtitrare în timp real Transcriere fișiere, locuri de muncă offline
DecodorRNN-T + EOU capTransductor de token și de Durație
Dimensiunea bucății640 ms streamingLot întreg
Memorie greutate~120 MO500 MO
Throughput~18x în timp real32x în timp real
Latitudine~340 ms partiale Numai sfârșitul fișierului
Alege modelul de streaming când...

... aveți nevoie de partiale înainte de a termina utilizatorul vorbind. Pentru transcrierea pe loturi de fișiere audio, mai mare Parakeet TDT 0.6B este mai rapid de la un capăt la altul și mai precis. Cele două modele împărtășesc același vocabular SentincePiece, astfel încât să puteți schimba între ele fără a schimba tokenizarea.