Traduzione automatica · Originale inglese

Dittatura di streaming

Parakeet-EOU-120M è un piccolo modello RNN-T in streaming ASR con una testa esplicita (EOU), costruita per la dittazione in tempo reale su Apple Silicon Neural Engine. DictateDemo, l'app di riferimento menu-bar macOS che collega il modello di streaming insieme a Silero VAD per la dittazione senza mani, senza pasta.

Che cosa è

Architettura

Tre modelli CoreML conduttivi per gruppo audio:

ComponentiDesignazione
EncoderConformer Cache-aware. Prende un 64-frame mel chunk (640 ms) più sei tensori di stato — l'attenzione KV cache, la cache di profondità conv, e un pre_cache mel loopback che prepende l'audio di recente-past in modo che il FFT vede il segnale continuo attraverso i confini di chunk.
DecoderConsuma il precedente token non-blank, emette un incorporamento più aggiornato (h, c) stato.
Giunzione + Testa EOUFusibili encoder e decoder uscite in logits over vocab + blank + EOU

Perché un token EOU separato

Plain RNNT emette vuoti durante il silenzio, che il decoder assorbe felicemente senza segnalare "l'autterance finita". Una testa EOU dedicata permette al modello di fare un taglio duro per commettere il parziale a uno stato finale, reimpostando la punteggiatura / capitalizzazione e innescando azioni a valle come pasta-app.

EOU è rumoroso nel mondo reale

Tastiera click, movimento del mouse e tono della stanza durante una pausa "silenziosa" può rendere il giunto occasionalmente emettere un token non-blank, resettando il timer di debounce EOU e bloccando il commit. forceEndOfUtterance() backstop — vedere DictateDemo qui sotto.

Modello

ModelloDimensioneHuggingFace
Parakeet-EOU-120M (CoreML INT8)~ 120 MBaufklarer/Parakeet-EOU-120M-CoreML-INT8

Prestazioni

MetricoValore
Memoria di peso~ 120 MB ( INT8)
Memoria di inferenza di picco~ 200 MB
Latenza del gambo (serie M)~30 ms compute / 640 ms di audio (RTF ~0.056)
Latenza parziale fine-fine~340 ms (un pezzo)
Avviare la latenza ( VAD path)~1 s dopo il discorso si ferma
Obiettivo di completamentoNeural Engine (CoreML)

Avvio rapido — trascrizione in lotto

Il modello di streaming è conforme anche a SpeechRecognitionModel, quindi funziona come drop-in per qualsiasi codice che prenda un modello STT generico:

import ParakeetStreamingASR

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

Avvio rapido — lo streaming asinc

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

Ciascuno PartialTranscript trasporta text, isFinal, confidence, eouDetected (congiunto sparato contro forza-finalizzata), e un monotonico segmentIndex.

Sessione di lunga durata API (input dinamico)

Per la dittazione dal vivo, creare una sessione una volta e alimentarlo chunks come arrivano dal microfono. I buffer di sessione internamente e gestisce l'encoder quando si accumulano campioni sufficienti, in modo da poter spingere arbitrarie dimensioni di pezzi:

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 modello di forza finale

Quando un Silero VAD è già in esecuzione nella vostra pipeline, usarlo per guidare un errore di ricaduta in modo che il rumore di fondo non può frenare il timer di 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
}

DictateDemo — macOS

DictateDemo è un completo macOS agente barra menu costruito sulla parte superiore della sessione di streaming. Funziona come app di sfondo, trascrive dal microfono con parziali vivi, auto-comandi pronuncia su EOU o VAD

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

L'attuazione completa vive in Examples/DictateDemo/DictateDemo/DictateViewModel.swift: un lavandino audio off-main con un buffer protetto da serratura, una zecca timer 300 che lo drena, Silero VAD con rientro a sinistra e una forza-finalizzata. Examples/DictateDemo/Tests/DictateDemoTests.swift coprono scenari multi-utterance, bloccato-EOU e rumoroso-silence.

Streaming vs batch Parakeet

Parakeet-EOU-120M (streaming)Parakeet TDT 0.6B (batch)
Caso di utilizzoLive dittazione, in tempo reale didascaliaTrascrizione di file, lavori offline
DecoderRNN-T + testa EOUTrasduttore Token e Duration
Dimensione del manubrio640 ms di streaminglotto intero
Memoria di peso~ 120 MB500 MB
Portata~18x in tempo reale~ 32x in tempo reale
Lattice~340 ms parzialiSolo la fine del file
Scegli il modello di streaming quando...

Per la trascrizione in batch di file audio, il più grande Parakeet TDT 0.6B è più veloce end-to-end e più accurato. I due modelli condividono lo stesso vocabolario SentencePiece, in modo da poter scambiare tra loro senza cambiare tokenizzazione.