Tłumaczenie automatyczne · Oryginał angielski

Dyktowanie strumieniowe

Parakeet-EOU-120M to mały model strumieniowania RNN- T ASR z wyraźną głowicą end- of- utterance (EOU), zbudowany dla real- time dictation na Apple Silicon Neural Engine. Ten przewodnik obejmuje również DictateDemo, aplikacja referencyjna macOS, która podłącza model strumieniowy wraz z Silero VAD dla dyktando wolnego od dłoni, pasty gdziekolwiek.

Co to jest?

Architektura

Trzy modele CoreML wbudowane na dźwięk:

SkładnikOpis
EnkoderKonformista Cache- eware. Bierze 64- frame mel chunk (640 ms) plus sześć stresorów stanu - uwaga KV cache, depthwise conv cache, i pre_cache Mel loopback, który prepends revent- pass audio, więc FFT widzi ciągły sygnał przez granice kawałka.
DekoderSingle- step LSTM sieć prognozowania. Spożywa poprzedni nie-pusty token, emituje osadzanie plus zaktualizowane (h, c) Stan.
Wspólny + głowa EOUBezpiecze wyjścia kodujące i dekodujące do logitów over vocab + blank + EOU. Klasa EOU jest twardym sygnałem modelu, że wypowiedź jest zakończona.

Dlaczego oddzielny symbol EOU

Plain RNNT emituje ślepaki podczas ciszy, które dekoder z radością absorbuje bez sygnalizowania "wymowy zakończone". Specjalna głowa EOU pozwala modelowi na trudne cięcie do zobowiązania częściowej do końcowego, resetowanie interpunkcji / kapitalizacji stanu, i uruchamianie dalszych działań, takich jak pasta-to- app.

EOU jest głośne w prawdziwym świecie

Klawiatura kliknięcia, ruch myszki, i dźwięk pokoju podczas "cichy" pauzy może sprawić, że joint czasami emitować niepusty token, resetting EOU debuunce timer i opóźnianie commit. forceEndOfUtterance() backstop - patrz DictateDemo poniżej.

Wzór

WzórRozmiarHuggingFace
Parakeet-EOU-120M (CoreML INT8)120 MBaufklarer / Parakeet-EOU-120M-CoreML-INT8

Wydajność

MetricWartość
Pamięć wagowa- 120 MB (INT8)
Pamięć pełnego wywołania200 MB
Latencja w kawałkach (seria M-)30 ms comcute / 640 mas of audio (RTF ~ 0.056)
Częściowa przerwa na koniec- 340 ms (jeden kawałek)
Opóźnienie (ścieżka VAD)~ 1 s po przerwie mowy
Oblicz celNeural Engine (CoreML)

Szybki start - transkrypcja partii

Model strumieniowania jest również zgodny z SpeechRecognitionModel, więc działa jako drop- w dla każdego kodu, który wymaga generycznego modelu STT:

import ParakeetStreamingASR

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

Szybki start - strumieniowanie async

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

Każdy PartialTranscript przewożone text, isFinal, confidence, eouDetected (zapalenie stawów vs force- finalized), i monotoniczny segmentIndex.

Sesja długowieczna API (wejście mikrofonu)

Dla dyktando na żywo, stworzyć sesję raz i karmić go kawałki, jak przybywają z mikrofonu. Sesja buforuje wewnętrznie i działa koder, gdy ilość próbek gromadzi się, więc można nacisnąć arbitralne rozmiary kawałka:

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 formuła finalizacji siły

Kiedy Silero VAD jest już uruchomiony w twoim rurociągu, użyj go do napędzenia fallbacka commit, aby hałas tła nie mógł opóźnić zegara EOU debuunce:

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 menu- bar aplikacji referencyjnej

DictateDemo jest kompletnym agentem menu- bar macOS zbudowanym na szczycie sesji strumieniowej. Działa jako aplikacja w tle, transkrypcje z mikrofonu z live partials, autocommits utterances na EOU lub VAD milczenie, i pasty wyniki w pierwszej aplikacji.

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

Pełne wdrożenie pozostaje w Examples/DictateDemo/DictateDemo/DictateViewModel.swift: off- main umywalka audio z blokadą bufora chronionego, timer 300 ms timer, który go wysysa, Silero VAD z resztkami-próbki carry- over, i strzeżony force- finalize. Examples/DictateDemo/Tests/DictateDemoTests.swift pokrywają scenariusze multi- wymowy, Stuck- EOU i ciszy hałasów.

Streaming vs partia Parakeet

Parakeet-EOU-120M (streaming)Parakeet TDT 0.6B (partia)
Przypadek użyciaDyktowanie na żywo, podpisy czasu rzeczywistegoTranskrypcja plików, zadania offline
DekoderRNN- T + głowa EOUPrzetwornik tokenai czasu trwania
Rozmiar kawałka640 ms streamingPartia plików pełnoplikowych
Pamięć wagowa120 MB500 MB
Troughput- 18x real- time- 32x real- time
Opóźnienie~ 340 ms partialsTylko plik end- of-
Wybierz model strumieniowy, kiedy...

... trzeba partyjne przed zakończeniem rozmowy przez użytkownika. Do zapisu partii plików audio, większy Parakeet TDT 0.6B jest szybszy end- to- end i bardziej dokładne. Dwa modele mają ten sam słownik SentencePiece, więc można zamienić się między nimi bez zmiany tokenizacji.