Tłumaczenie automatyczne · Oryginał angielski
Qwen3-ASR
MLX i CoreML używają tych samych funkcji wejściowych w stylu Whisper- style: 128 znormalizowane w Slaney- Kosze z dokładnego STFT 400- punktu 16 kHz, z Hopem próbki 160-i okresowym oknem Hanna.
Qwen3-ASR jest to wielojęzyczny, wielojęzyczny model rozpoznawania mowy. Działa on przy użyciu urządzenia Metal GPU przyspieszenie poprzez MLX, z 4-bit, 5- bit, lub 8-bitowa kwantyzacja dla efektywnego wykorzystania pamięci. 0.6B i 1.7Warianty parametrów B. 5-bit to nowy punkt dokładności / pamięci słodki - zobacz wartości odniesienia.
Pipeline
Rurociąg do składania wniosków Qwen3-ASR przetwarza dźwięk przez cztery etapy:
| Etap | Opis |
|---|---|
| Wejście audio | Surowy dźwięk przestawiony na 16 kHz mono |
| Mel Spectrogram | 128- bin mel funkcje filterbank ekstrahowany z formy falowej |
| Enkoder audio | 18-warstwowy transformator z blokadą uwagi, przetwarza ramki melowe do osadzania dźwięku |
| Dekoder tekstu | 28- warstwa Qwen3 transformator z uwagi na zapytanie grupowe (GQA) i rotacyjne osadzanie pozycji (RoPE), automatycznie generuje żetony tekstowe |
Wydajność
| Wstecz | RTF | Pamięć szczytowa | Uwagi |
|---|---|---|---|
| Qwen3-ASR 1.7B MLX 5- bit | 0.027 | 1,92 GB | WER 1.32% (nowy lider dokładności) |
| Qwen3-ASR 1.7B MLX 8-bit | 0.033 | 2,7 GB | WER 1.52% |
| Qwen3-ASR 0.6B MLX 8-bit | 0.015 | 1.3 GB | WER 1.82% |
| Qwen3-ASR 0.6B MLX 5- bit | 0.014 | 1.03 GB | WER 1.74% (near-8-bit at ~ 4- bit RAM) |
| Qwen3-ASR 0.6B MLX 4-bit | 0.012 | 1,0 GB | WER 2.20% |
| Qwen3-ASR 0.6B CoreML INT8 | 0.098 | 1.4 GB | WER 3.02% (odbudowa chunked- attn) |
Apple M5 Pro, 48 GB. LibriSpeech test- clean n = 200, izolowany nadsilnik. RTF < 1.0 = szybciej niż w czasie rzeczywistym.
Warianty modelu
| Wzór | Wstecz | Rozmiar | HuggingFace |
|---|---|---|---|
| Qwen3-ASR-0.6B (4- bit) | MLX | 680 MB | aufklarer / Qwen3-ASR-0.6B-MLX-4bit |
| Qwen3-ASR-0.6B (5- bit) | MLX | 1,0 GB | aufklarer / Qwen3-ASR-0.6B-MLX-5bit |
| Qwen3-ASR-0.6B (8- bit) | MLX | 1,0 GB | aufklarer / Qwen3-ASR-0.6B-MLX-8bit |
| Qwen3-ASR-0.6B (CoreML INT8) | CoreML | 180 MB | aufklarer / Qwen3-ASR-CoreML |
| Qwen3-ASR-1.7B (4- bit) | MLX | 2.1 GB | aufklarer / Qwen3-ASR-1.7B-MLX-4bit |
| Qwen3-ASR-1.7B (5- bit) | MLX | 2.3 GB | aufklarer / Qwen3-ASR-1.7B-MLX-5bit |
| Qwen3-ASR-1.7B (8- bit) | MLX | 3.2 GB | aufklarer / Qwen3-ASR-1.7B-MLX-8bit |
Zastosowanie CLI
Transcribe plik audio z domyślnym modelem Qwen3-ASR:
.build/release/speech transcribe recording.wav
Opcje
# Use the larger 1.7B model
.build/release/speech transcribe recording.wav --model 1.7b
# Specify language
.build/release/speech transcribe recording.wav --language en
# Streaming mode with partial results
.build/release/speech transcribe recording.wav --stream --partial
Swift API
Użyj Qwen3ASR moduł do transkrypcji audio programmatycznie:
import Qwen3ASR
// Load the model (downloads from HuggingFace on first use)
let model = try await Qwen3ASRModel.fromPretrained()
// Transcribe audio samples (16 kHz mono Float)
let text = model.transcribe(audio: audioSamples, sampleRate: 16000)
print(text)
CoreML Encoder (Neural Engine)
Uruchom koder audio na Neural Engine przez CoreML, z włączonym dekoderem tekstowym GPU przez MLX. To podejście hybrydowe zmniejsza zużycie energii i uwalnia GPU dla równoległych obciążeń roboczych.
import Qwen3ASR
let encoder = try await CoreMLASREncoder.fromPretrained()
let model = try await Qwen3ASRModel.fromPretrained()
let text = try model.transcribe(
audio: samples, sampleRate: 16000,
coremlEncoder: encoder
)
# CLI
.build/release/speech transcribe recording.wav --engine qwen3-coreml
INT8 paletyzowane (180 MB, cosinus similarity > 0.999) jest domyślny. An INT4 wariant (90 MB) jest również dostępny dla dużych instalacji.
Tryb strumieniowania
Tryb strumieniowy wykorzystuje VAD (detekcję aktywności głosowej) do segmentacji dźwięku na kawałki i transkrypcji ich kolejno. Jest to przydatne do długich nagrań lub przetwarzania w czasie rzeczywistym.
# Stream with default segment size
.build/release/speech transcribe recording.wav --stream
# Control maximum segment duration
.build/release/speech transcribe recording.wav --stream --max-segment 15
# Show partial (in-progress) results as they arrive
.build/release/speech transcribe recording.wav --stream --partial
W --max-segment flaga kontroluje maksymalny czas trwania kawałka w sekundach. --partial flaga pozwala na częściowe wyjście wyniku, pokazując słowa, ponieważ są one dekodowane.
Obsługiwane formaty
Qwen3-ASR akceptuje następujące formaty audio. Wszystkie wejścia są automatycznie przestawiane do 16 kHz mono wewnątrz.
- WAV - nieskompresowane PCM
- M4A - AAC- encoded audio
- MP3 - MPEG Warstwa III
- CAF - Apple Core Audio Format
Modele są pobierane z HuggingFace przy pierwszym użyciu i buforowane ~/Library/Caches/qwen3-speech/. 4- bit 0.6B jest w przybliżeniu 1.5 GB.
Parakeet TDT przemówienie do tekstu · Klonowanie głosu CosyVoice3 · Kokoro-82M TTS
Potrzebujesz ukierunkowanego przewodnika decyzji? Qwen3-ASR vs Whisper: dokładność, prędkość i pamięć.
Anulowanie współpracy
dla transkrypcji MLX, Qwen3ASRModel.transcribeCheckingCancellation(audio:sampleRate:options:) rzuty CancellationError gdy anulowanie zadania jest obserwowane przed wydobyciem funkcji, kodowaniem, przedrostkiem dekodera lub krokiem dekodującym. GPU prace już złożone może zakończyć. Synchroniczne transcribe oraz transcribeBatch API zachowują swoje nierzucające zachowanie i ignorują anulowanie zadania. speech-server używa punktu wejścia dla Qwen3-ASR, który jest świadomy anulowania.
Budżet MLX cache
Wczytywanie Qwen3-ASR ogranicza szeroki proces MLX pulę buforów Metal wielokrotnego użytku: min(1 GiB, RAM / 8) dla 0.6B oraz min(4 GiB, RAM / 4) dla 1.7B. Inne modele MLX dzielą się tą pulą. Sufity odnoszą się do buforów do zarysowań, nie do aktywnych wag lub całkowitego śladu procesu.
Efektywny limit jest najniższym z istniejących dzwoniących MLX.Memory.cacheLimit i każdy załadowany sufit instancji ASR. Przypadki mogą się rozładować w dowolnej kolejności; ostatni rozładunek lub zniszczenie instancji przywraca budżet rozmówcy. Zachowana jest większa granica ustalona przez rozmówcę podczas wczytywania modeli.
Single- input transkrypcja oczyszcza bufory wielokrotnego użytku, gdy jego dekoder powraca lub rzuca, w tym anulowanie wewnątrz dekodera. Aktywne tablice i wagi modelu pozostają załadowane. transcribeBatch dekoder zachowuje ograniczoną pulę pomiędzy partiami. Brak opcji API lub flagi CLI się zmieniają.
Oczyszczenie puli buforów zmniejsza zachowaną pamięć, ale wymaga nowych przydziałów na późniejsze żądania, więc krótkie żądania mogą trwać dłużej. Czekanie na przedstawione prace dekodera do zakończenia sprawia, że czyszczenie deterministyczne, w tym anulowanie. Rzeczywiste opóźnienie i pamięć procesowa zależy od sprzętu, modelu i audio.
Opcjonalny model własności
SpeechRuntime zapewnia wspólne ładowanie, anulowalne wstęp FIFO i seryjne wykonanie. Qwen3ASRRuntime wybiera MLX lub pełne CoreML za pomocą wyraźnych deskryptorów; krajowe API i flagi CLI pozostają dostępne.
Serwer audio posiada jedno zezwolenie na wykonanie za pomocą każdego pełnego żądania, w tym wyjścia strumieniowego, z żądaniami do 32 oczekujących. Niepowodzenia ASR powodują błędy HTTP lub zdarzenia błędów WebSocket; prawidłowe puste transkrypcje pozostają skuteczne. Odtwarzanie zachowuje próbki przepełnienia.
Zarządzane transkrypcja CoreML uwalnia tymczasowe bufory po każdym wniosku, w tym powtarzające się wywołania z zadania tła.
import Qwen3ASRRuntime
let runtime = Qwen3ASRRuntime(descriptor: Qwen3ASRDescriptors.small)
let text = try await runtime.transcribe(audio: samples, sampleRate: 16000)
try await runtime.unload()