Awtomatikong salin · Orihinal sa Ingles

Nakapangingilabot na Pagtitina

Ang Parakeet-EOU-120M ay isang maliit na RNN-T streaming ASR model na may maliwanag na dulo-of-bigkas (EOU) na ulo, na itinayo para sa real-time dictation sa Apple Silicon's Neural Engine. Ang gabay na ito ay sumasaklaw rin sa ZXXZ. Diktadong Katiwala, ang macOS menu-bar na tumutukoy sa app na nag - aalis sa umaagos na modelo kasama ng Silero VAD para sa hand-free, paste-anyhere dictation.

Kung ano ito

Arkitektura

Tatlong modelong CoreML ang naka - pipeline sa bawat audio function:

Nakikipagtulungan Paglalarawan
Mang - aakit Ang Cach-aware recoper. ay kumukuha ng 64-frame mel flume (640 ms) pati na ang anim na tensor ng estado — atensiyon KV cache, deepwise conv cache, at isang anim na tenor ng estado — ang atensiyon ng KV pre_cache mel loopback na nagrereresulta sa kamakailang-paspas na audio kaya ang FFT ay nakakakita ng patuloy na signal sa ibayo ng mga hangganang stratehiya.
Decoder Ang single-steep LSTM promision network.ay sinasakop ang nakaraang non-blank na token, ay naglalabas ng isang embelding plus reaptured (h, c) na estado.
Magkasama + EOU headFuses calcer at decoder outputs in logits sa ibabaw ng vocab + blank + EOU. Ang EOU class ay ang matigas na signal ng modelo na ang isang sinabi ay tapos na.

Kung Bakit ang isang hiwalay na EOU

Ang Plain RNNT ay naglalabas ng mga blanko sa panahon ng katahimikan, na masayang sinisipsip ng decoder nang hindi nagbibigay ng hudyat na "natapos na ang pagpapahayag." isang dedikadong EOU head ay hinahayaan ang modelo na gumawa ng isang matigas na hiwa para sa paggawa ng partisyon sa isang pangwakas, resetting bantas/constructization state, at nag-udyok ng mga kilos na pababa tulad ng paste-to-app.

SI EOU ay maingay sa tunay na daigdig

Ang mga tipaan ng teklado, galaw ng daga, at tono ng silid sa panahon ng isang "tahimik" na paghinto ay maaaring gumawa sa kasukasuan na paminsan-minsang maglabas ng isang non-blank na token, muling pag-setting sa EOU debounce timer at pushing the avement. Ang mga tubo ng production ay nagtutugma sa joint EOU sa pamamagitan ng isang panlabas na VAD-CORD. forceEndOfUtterance() Packstop — tingnan ang DictateDomo sa ibaba.

Huwaran

Huwaran LakiHuggingFace
Parakeet-EOU-120M (CoreML INT8)°120 MB Aufklarer/Parakeet-EOU-120M-CoreML-INT8

Pag - aasikaso

Masalimuot Halaga
Mabigat na memoryaE&120 MB (INT8)
Pinakamataas na kabuuang memorya°200 MB
Chenk latency (M-series)EX30 ms comute / 640 ms of audio (RTF °0.056)
Hindi kumpletong latency end-to-end°340 ms (isang tipak)
Magtakda ng latency (VAD path)°1 s pagkatapos huminto ng pagsasalita
Tumusunod na targetNeural Engine (CoreML)

Mabilis na pasimula — Pagsalin ng talaksan

Ang dumadaluyong na modelo ay umaayon din sa SpeechRecognitionModel, kaya't gumagana ito bilang drop-in para sa anumang kodigo na kumukuha ng modelong generic STT:

import ParakeetStreamingASR

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

Mabilis na pagsisimula — pag - agos ng async

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

Bawat Isa PartialTranscript nagdadala text, isFinal, confidence, eouDetected (joint fire vs force-finalized), at isang monotonic segmentIndex.

Mahabang-buhay na sesyon API (mic input)

Para sa live dictation, gumawa ng isang sesyon minsan at pakanin ito ng mga tipak habang ang mga ito ay dumarating mula sa mic.

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 force-finalize pattern

Kapag ang Silero VAD ay tumatakbo na sa iyong tubo, gamitin ito upang itulak ang isang fallback na gumawa ng gayong ingay sa paligid ay hindi makapipigil sa 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
}

DictateDomo — macOS menu-bar reference app

Diktadong Katiwala ay isang kumpletong macOS menu-bar agent na itinayo sa ibabaw ng sesyon ng pag-agos. ito ay tumatakbo bilang background app, mga transcript mula sa mik na may live partices, auto-committs na mga speech sa EOU o VAD katahimikan, at ang mga paste ay nagbubunga sa front app.

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

Ang ganap na pagpapatupad ay nabubuhay sa Examples/DictateDemo/DictateDemo/DictateViewModel.swift: isang off-main audio sink na may lock-protective neutral, isang 300 ms timer garapata na nagreresulta dito, Silero VAD na may tira-tira-sample carries-over, at isang binabantayang force-finalize. Ang mga kapares na regression tests sa mga quart regressiyon sa mga regresyon tests sa natitirang-sample. Examples/DictateDemo/Tests/DictateDemoTests.swift ay sumasaklaw sa multi-bigkasan, stick-EOU, at maiingay na mga senaryong pang-salapi.

Pag - iimbak ng vs Parakeet

Parakeet-EOU-120M (pampasa)Parakeet T 0.6B (batch)
Gamitin ang caseLive dictation, real-time kapsiyon Pagsulat ng talaksan, trabaho sa labas
DecoderRNN-T + EOU headToken-and- Duration Transducer
Maliit na sukat640 m ang humuhugos Buong-file na talaksan
Mabigat na memorya°120 MB500 MB
Sa Pamamagitan ng PagpustaEi18x real-timeEpic32x real-time
Pagiging Latente Mga partikulong ₱340 ms Wakas-of-file lamang
Pumili ng modelong pandalos kapag...

...[kailangan mo ng mga partials bago matapos ang user na magsalita. para sa distribusyon ng mga audio file, ang mas malaking Parakeet TDT 0.6B ay mas mabilis na dulo-to-end at mas tumpak. Ang dalawang modelo ay parehong nag-iisa ng bokabularyo ng judgePiece, kaya maaari mong palitan ang pagitan ng mga ito ng hindi nagbabagong tokenization.