Konekäännös · Englanninkielinen alkuperäinen
Virtausvalinta
Parakeet-EOU-120M on pieni RNN-T-streaming ASR -malli, jossa on selvä nyöripää (EOU) ja joka on rakennettu reaaliaikaista sanelemista varten Apple Silicon's Neural Engine. Tämä opas kattaa myös DictateDemo -mallin, macOS -videosovelluksen, joka kytkee virtamallin yhdessä Silero VAD käsivapaan, liita-any-anywhere-anyondiktion.
Mitä se on?
- Elä osittainen Tekstipäivitys ~340 ms jokaisen palan jälkeen
- Erikoinen EOU ... malli päättää, milloin lause päättyy, ei manuaalista painiketta
- VAD-käyttöinen voima-finalisointi ... Silero backstop sitoutuu lausumaan myös silloin, kun EOU pysähtyy taustameluun
- 120 MB INT8 CoreML Neural Engine toimii, GPU on vapaa muille malleille.
- 25 eurooppalaiset kielet Sama sanastoperhe kuin ylävirtaan NeMo Parakeet TDT
Arkkitehtuuri
Kolme CoreML -mallia, jotka on liitetty äänikappaletta kohti:
| Osa | Tavaran kuvaus |
|---|---|
| Koodain | Cache-aware Conformer. Otaa 64- ruudun mel chunk (640 ms) plus kuusi tila tensoria . Huomio KV välimuisti, syvyyssuunnassa conv välimuisti, ja pre_cache mel loopback, joka preprepreprended viime-past audio niin FFT näkee jatkuvan signaalin yli pätkärajojen. |
| Purkaja | Yksivaiheinen LSTM-ennustusverkko. Koostaa edellisen tyhjän tunnuksen, lähettää upotuksen sekä päivitetyn (h, c) tilan. |
| Joint + EOU-pää | Sulakkeet koodaaja ja dekooderilähdöt lokikirjastoihin yli vocab + blank + EOU. EOU-luokka on mallin kova signaali siitä, että lause on valmis. |
Miksi erillinen EOU-tunnusmerkki
Plain RNNT lähettää tyhjiä ääniä hiljaisuuden aikana, joka dekooderi imeytyy onnellisesti ilman signaalia "nuterance finished." Omistettu EOU pää antaa mallin tehdä vaikea leikkaus tehdä osittainen lopullinen, nollaus välimerkit / kapitalisointi tilassa, ja käynnistää jatkotoimet kuten pasta-to-app.
Näppäimistön klikkaukset, hiiren liikkeet ja huoneääni "hiljaisen" tauon aikana voi tehdä liitoksesta välillä emitoivan tunnuksen, palauttaa EOU:n bounce-ajastimen ja viivyttää toimitusta. Tuotantoputkistot yhdistävät liitosyksikön ulkoisella VAD-käyttöisellä forceEndOfUtterance() backstop . Katso DictateDemo alla.
Malli
| Malli | Koko | HuggingFace |
|---|---|---|
| Parakeet-EOU-120M (CoreML INT8) | ~120 Mt | aufklarer/Parakeet-EOU-120M-CoreML-INT8 |
Tulos
| Metrinen | Arvo |
|---|---|
| Painomuisti | ~120 MB (INT8) |
| Huippupäättelymuisti | ~200 Mt |
| Chunk latency (M-sarja) | ~30 ms laskea / 640 ms äänen (RTF ~0,056) |
| Osittainen latenssi päättyy loppuun | ~340 ms (yksi pala) |
| Toimitusviive (VAD polku) | ~1 s puheen jälkeen |
| Laske kohde | Neural Engine (CoreML) |
Nopea alku ... Erän transkriptio.
Striimausmalli on myös SpeechRecognitionModel -standardin mukainen, joten se toimii kaikkien sellaisten koodien pudotuksena, joissa käytetään STT-mallia:
import ParakeetStreamingASR
let model = try await ParakeetStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000)
Nopea käynnistys async- streaming
for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
if partial.isFinal { print("FINAL: \(partial.text)") }
else { print("... \(partial.text)") }
}
Kukin PartialTranscript kuljettaa text, isFinal, confidence, eouDetected (yhteinen ammuttu vs voima lopullinen), ja yksitoikkoinen segmentIndex.
Pitkäaikainen istunto API (mic input)
Live sanella, luoda istunnon kerran ja syöttää se paloi kun ne saapuvat mikki. Istunnon puskurit sisäisesti ja toimii koodaaja, kun tarpeeksi näytteitä kertyy, jotta voit työntää mielivaltaisia paloja koko:
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 voiman viimeistelykuvio
Kun Silero VAD on jo käynnissä, käytä sitä varalaitteena, jotta taustamelu ei voi pysäyttää EOU-debounce-ajastinta:
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 valikkopalkin viitesovellus
DictateDemo on täydellinen macOS valikkotanko, joka on rakennettu streaming-istunnon päälle. Se toimii tausta-sovelluksena, kirjoittaa mikrofonista live-osuuksia, automaattisesti lauseita EOU:ssa tai VAD hiljaisuus, ja pastaa tulostaa etusovellukseen.
- Valikkopalkkisovellus, jossa on maailmanlaajuinen
Cmd+Shift+Dhotkey - Live-osuuksia, joissa on kelluva HUD- ja äänitason ilmaisin
- VAD-vartioitu voimaloitsu (edellä oleva tuotantomalli)
- Liitä mahdollisimman pitkälle app, jossa
Cmd+Shift+V - Mallin auto-lataukset ensimmäisellä lanseerauksella (~120 MB)
cd Examples/DictateDemo
swift build
.build/debug/DictateDemo
Täysi täytäntöönpanoaika on Examples/DictateDemo/DictateDemo/DictateViewModel.swift: off-main-audioallas, jossa on lukkosuojattu puskuri, 300 ms ajastin, joka tyhjentää sen, Silero VAD ja jäännösnäytteen siirto ja suojattu voimaloitsu. Vastaavat regressiotestit Examples/DictateDemo/Tests/DictateDemoTests.swift kattavat monivuorauksen, just-EOU:n ja melun.
Virtaus vs. erä Parakeet
| Parakeet-EOU-120M (streaming) | Parakeet TDT 0,6B (erä) | |
|---|---|---|
| Käyttötapa | Elävä sanelu, reaaliaikainen kuvateksti | Tiedoston transkriptio, offline-työt |
| Purkaja | RNN-T + EOU-pää | Token-and-Duration-anturi |
| Chunk-koko | 640 ms suoratoisto | Koko tiedostoerä |
| Painomuisti | ~120 Mt | 500 Mt |
| Läpivienti | ~18x reaaliaikainen | ~32x reaaliaikainen |
| Latenssi | ~340 ms osittainen | Vain tiedoston loppu |
... Tarvitset osittaisia ennen käyttäjän puhumista. Äänitiedostojen erän transkriptiota varten suurempi Parakeet TDT 0.6B on nopeampi päästä loppuun ja tarkempi. Kaksi mallia jakavat saman SenencePiece -sanaston, joten voit vaihtaa niiden välillä ilman että muutat tokenointia.