Akış Diktesi

Parakeet-EOU-120M, açık bir konuşma-sonu (EOU) başlığına sahip küçük bir RNN-T akış ASR modelidir; Apple Silicon'un Neural Engine'inde gerçek zamanlı dikte için tasarlanmıştır. Bu kılavuz ayrıca, akış modelini eller serbest, her yere yapıştırılabilir dikte için Silero VAD ile bir araya getiren macOS menü çubuğu referans uygulaması DictateDemo'yu da kapsar.

Nedir

Mimari

Her ses parçası için pipeline halinde çalışan üç CoreML modeli:

BileşenAçıklama
KodlayıcıCache-aware Conformer. 64 çerçeveli bir mel parçası (640 ms) ile altı durum tensörü alır — attention KV cache, depthwise conv cache ve son geçmiş sesi öne ekleyen bir pre_cache mel loopback'i; böylece FFT, parça sınırları boyunca sürekli sinyal görür.
Kod çözücüTek adımlı LSTM tahmin ağı. Önceki non-blank token'ı alır, bir embedding ile güncellenmiş (h, c) durumunu üretir.
Joint + EOU başlığıKodlayıcı ve kod çözücü çıktılarını vocab + blank + EOU üzerinde logit'lere kaynaştırır. EOU sınıfı, bir konuşmanın bittiğine dair modelin sert sinyalidir.

Neden ayrı bir EOU token'ı

Düz RNNT, sessizlik sırasında blank üretir; kod çözücü bunları "konuşma bitti" sinyali vermeden mutlu mesut emer. Özel bir EOU başlığı, modelin kısmi sonucu nihai sonuca commit etmek, noktalama/büyük harf durumunu sıfırlamak ve uygulamaya yapıştır gibi alt süreçleri tetiklemek için sert bir kesim yapmasını sağlar.

EOU gerçek dünyada gürültülüdür

Klavye tıklamaları, fare hareketi ve "sessiz" bir duraklamadaki oda tonu, joint'in arada bir non-blank token üretmesine, EOU debounce sayacının sıfırlanmasına ve commit'in takılmasına yol açabilir. Üretim pipeline'ları, joint EOU'yu harici bir VAD güdümlü forceEndOfUtterance() güvencesiyle birleştirir — aşağıdaki DictateDemo'ya bakın.

Model

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

Performans

MetrikDeğer
Ağırlık belleği~120 MB (INT8)
Zirve çıkarım belleği~200 MB
Parça gecikmesi (M serisi)~30 ms hesaplama / 640 ms ses (RTF ~0.056)
Uçtan uca kısmi gecikme~340 ms (bir parça)
Commit gecikmesi (VAD yolu)Konuşma bittikten sonra ~1 s
Hesaplama hedefiNeural Engine (CoreML)

Hızlı başlangıç — toplu yazıya dökme

Akış modeli ayrıca SpeechRecognitionModel protokolüne de uyar, böylece genel bir STT modeli alan herhangi bir kodda doğrudan yerine geçer:

import ParakeetStreamingASR

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

Hızlı başlangıç — asenkron akış

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

Her PartialTranscript; text, isFinal, confidence, eouDetected (joint mi yoksa zorla sonlandırma mı tetikledi) ve monotonik bir segmentIndex taşır.

Uzun ömürlü session API'si (mikrofon girişi)

Canlı dikte için bir kez session oluşturun ve mikrofondan geldikçe parçaları ona besleyin. Session dahili olarak tamponlar ve yeterli örnek biriktiğinde kodlayıcıyı çalıştırır; böylece istediğiniz boyutta parçalar gönderebilirsiniz:

let session = try model.createSession()

// her mikrofon parçası:
let partials = try session.pushAudio(float32Chunk16kHz)
for p in partials {
    if p.isFinal { commit(p.text) }
    else          { showPartial(p.text) }
}

// akış sona erdiğinde:
let trailing = try session.finalize()

VAD zorla sonlandırma deseni

Pipeline'ınızda zaten bir Silero VAD çalışıyorsa, arka plan gürültüsünün EOU debounce sayacını takmasını engellemek için onu yedek commit'i tetiklemek üzere kullanın:

if hasPendingUtterance && !vadSpeechActive && vadSilentChunks >= 30 {
    // Silero'ya göre ~960 ms sürekli sessizlik
    if let forced = session.forceEndOfUtterance() {
        commit(forced.text)
    }
    hasPendingUtterance = false
}

// güvenlik önlemi: joint zaten EOU tetiklediyse iki kez commit etme
if partials.contains(where: { $0.isFinal }) {
    hasPendingUtterance = false
}

DictateDemo — macOS menü çubuğu referans uygulaması

DictateDemo, akış session'ı üzerinde inşa edilmiş eksiksiz bir macOS menü çubuğu ajanıdır. Arka plan uygulaması olarak çalışır, mikrofondan canlı kısmi sonuçlarla yazıya döker, EOU veya VAD sessizliği üzerine konuşmaları otomatik commit eder ve sonuçları öndeki uygulamaya yapıştırır.

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

Tam uygulama Examples/DictateDemo/DictateDemo/DictateViewModel.swift içindedir: main olmayan bir ses sink'i, lock korumalı bir buffer, onu boşaltan 300 ms'lik bir timer tick'i, taşan örnek aktarımıyla Silero VAD ve korumalı bir zorla sonlandırma. Eşleşen regresyon testleri Examples/DictateDemo/Tests/DictateDemoTests.swift içinde çoklu konuşma, takılı-EOU ve gürültülü-sessizlik senaryolarını kapsar.

Akış ve toplu Parakeet karşılaştırması

Parakeet-EOU-120M (akış)Parakeet TDT 0.6B (toplu)
Kullanım durumuCanlı dikte, gerçek zamanlı altyazıDosya yazıya dökme, çevrimdışı işler
Kod çözücüRNN-T + EOU başlığıToken-and-Duration Transducer
Parça boyutu640 ms akışTüm dosya toplu
Ağırlık belleği~120 MB500 MB
Verim~18x gerçek zamanlı~32x gerçek zamanlı
Gecikme~340 ms kısmi sonuçlarYalnızca dosya sonu
Akış modelini şu durumda seçin…

…kullanıcı konuşmayı bitirmeden kısmi sonuçlara ihtiyacınız varsa. Ses dosyalarının toplu yazıya dökülmesi için daha büyük Parakeet TDT 0.6B uçtan uca daha hızlı ve daha doğrudur. İki model aynı SentencePiece vocabulary'sini paylaşır, böylece tokenization'ı değiştirmeden aralarında geçiş yapabilirsiniz.