Terjemahan mesin · Versi asli bahasa Inggris
Dictasi Streaming
Parakeet-EOU-120M adalah sebuah streaming RNN-T kecil ASR model dengan eksplisit end-of-vervance (EOU) head, built for real-time dikte on Apple Silicon's Neural EnginePanduan ini juga mencakup DiktateDemo, aplikasi referensi macOS yang menghubungkan model streaming bersama dengan Silero VAD untuk hands- bebas, paste- di mana saja dikte.
Apa ini?
- Parsial hidup - update teks saat Anda berbicara, ~ 340 ms setelah setiap potongan
- Explisit EOU - Model memutuskan ketika ucapan berakhir, tidak ada tombol manual
- Kekuatan yang didorong VAD-finalize - Silero backstop melakukan pernyataan bahkan ketika EOU stalls pada latar belakang kebisingan
- 120 MB INT8 CoreML - berjalan di Neural Engine, meninggalkan GPU gratis untuk model lain
- 25 Bahasa Eropa - sama kosakata keluarga sebagai upstream NeMo Parakeet TDT
Arsitektur
Tiga CoreML model pipelined per potongan audio:
| Komponen | Deskripsi |
|---|---|
| Enkoder | Cache-aware Conformer. Membawa potongan frame 64-frame mel (640 ms) plus enam tensors negara - perhatian singgahan KV, depthwise conv, dan pre_cache mel loopback yang paling mungkin audio terakhir-masa lalu sehingga FFT melihat sinyal terus-menerus melintasi batas-batas potongan. |
| Decoder | Single-step LSTM prediksi jaringan. Mengkonsumsi sebelumnya bukan-kosong token, memancarkan sebuah embedding plus diperbarui (h, c) Negara. |
| Kepala Gabungan + EOU | Fusses encoder and decoder outputs into logits over vocab + blank + EOUKelas EOU adalah model sinyal keras bahwa pidato selesai. |
Mengapa terpisah EOU token
Polos RNNT mengeluarkan kekosongan selama keheningan, yang dengan senang hati diserap decoder tanpa memberi tanda "ucapan selesai". Kepala EOU yang berdedikasi memungkinkan model membuat potongan keras untuk melakukan parsial ke, pengaturan ulang tanda baca / negara kapitalisasi, dan memicu aksi hilir seperti paste- to- app.
Klik papan tik, pergerakan mouse, dan nada ruang selama jeda "diam" dapat membuat sendi ini kadang-kadang memancarkan token yang tidak kosong, mengatur ulang timer debounce EOU dan mengulur-ulur commit. Pemrosesan jaringan pipa gabungan EOU dengan VAD-didorong eksternal forceEndOfUtterance() backstop - lihat DiktateDemo bawah.
Model
| Model | Ukuran | HuggingFace |
|---|---|---|
| Parakeet-EOU-120M (CoreML INT8) | ~ 120 MB | aufklarer / Parakeet-EOU-120M-CoreML-INT8 |
Penampilan
| Metrik | Nilai |
|---|---|
| Berat memori | ~ 120 MB (INT8) |
| Memori inferensi puncak | - 200 MB |
| Latensi Chunk (M- seri) | ~30 ms kompute / 640 ms audio (RTF ~0.056) |
| Partial latency end-to-end | ~ 340 juta (satu potong) |
| Latensi Commit (path VAD) | ~ 1 setelah pidato berhenti |
| Target komputer | Neural Engine (CoreML) |
Cepat mulai - batch transkripsi
Model streaming juga konform ke SpeechRecognitionModel, sehingga bekerja sebagai drop-in untuk kode apapun yang mengambil model STT generik:
import ParakeetStreamingASR
let model = try await ParakeetStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000)
Awal cepat - streaming async
for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
if partial.isFinal { print("FINAL: \(partial.text)") }
else { print("... \(partial.text)") }
}
Setiap orang PartialTranscript membawa text, isFinal, confidence, eouDetected (Bersama dipecat vs paksa-finalisasi), dan monotonic segmentIndex.
Sesi panjang API yang hidup (masukan mic)
Untuk diktasi langsung, buat sebuah sesi sekali dan berikan potongan saat mereka tiba dari mic. Pengawet sesi secara internal dan menjalankan penyandi ketika sampel yang cukup terakumulasi, sehingga Anda dapat mendorong ukuran potongan yang sewenang-wenang:
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 paksa -finalisasi pola
Ketika Silero VAD sudah berjalan dalam pipelmu, gunakan itu untuk mendorong suatu commit fallback sehingga kebisingan latar belakang tidak dapat menunda waktu debounce 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
}
DiktateDemo - aplikasi referensi macOS menu- bar
DiktateDemo adalah lengkap macOS menu-bar agen yang dibangun di atas dari sesi streaming. Ini berjalan sebagai aplikasi latar belakang, transparting dari mic dengan parsial hidup, auto- melakukan pernyataan pada EOU atau VAD diam, dan pastes menghasilkan aplikasi paling depan.
- Aplikasi Menu-bar dengan global
Cmd+Shift+Dhotkey - Parsial live dengan HUD yang mengambang dan indikator level audio
- VAD- dijaga gaya -finalisasi (pola produksi di atas)
- Paste- to-frontmost-app dengan
Cmd+Shift+V - Model auto- unduhan pada peluncuran pertama (~ 120 MB)
cd Examples/DictateDemo
swift build
.build/debug/DictateDemo
Penerapan penuh hidup di Examples/DictateDemo/DictateDemo/DictateViewModel.swift: sebuah muara audio off- main dengan buffer lock- protected, sebuah 300 m timer centang yang menguras itu, Silero VAD dengan sisa-sampel carry-over, dan dijaga paksa -finalize. Tes regresi yang cocok dalam Examples/DictateDemo/Tests/DictateDemoTests.swift Tutup multi- ucapan, stuck- EOU, dan noisy- skenario keheningan.
Streaming vs batch Parakeet
| Parakeet-EOU-120M (Streaming) | Parakeet TDT 0.6B (batch) | |
|---|---|---|
| Gunakan huruf besar kecil | Kutipan langsung, pencaporan real-time | Berkas transkripsi, tugas luring |
| Decoder | RNN-T + EOU head | Token-and-Durasi Transducer |
| Ukuran Chunk | Streaming 640 md | Berkas batch Whole- |
| Berat memori | ~ 120 MB | 500 MB |
| Sepanjang put | ~ 18x real-time | ~ 32x real-time |
| Latensi | ~ Pesta 340 mm | Hanya masukan -of-file |
... Anda perlu partial sebelum pengguna selesai berbicara. Parakeet TDT 0.6B lebih cepat berakhir dan lebih akurat. Kedua model ini memiliki kosakata SentencePiece yang sama, sehingga Anda dapat bertukar di antara mereka tanpa mengubah tokenisasi.