Traduzione automatica · Originale inglese
Qwen3-ASR
MLX e CoreML utilizzare le stesse caratteristiche di input di Whisper: 128 Slaney-normalized mel bins da un preciso STFT da 400 punti a 16 kHz, con un hop da 160-sample e una finestra Hann periodica.
Qwen3-ASR è un modello di riconoscimento automatico multilingue all'avanguardia del linguaggio, che funziona su richiesta Metal GPU accelerazione tramite MLXCon 4- Bambina. 5-bit, o 8-bit quantization per un uso efficiente della memoria. 0.6B e 1.7Varianti dei parametri B. 5-bit è la nuova accuratezza/memoria dolce spot — vedi benchmark.
Pipeline
Il processo di inferenza Qwen3-ASR elabora l'audio attraverso quattro fasi:
| Fase | Designazione |
|---|---|
| Ingresso audio | Rivendita audio grezzo a 16 kHz mono |
| Mel Spectrogram | 128-bin mel filterbank caratteristiche estratti dalla forma d'onda |
| Encoder audio | Trasformatore a 18 strati con l'attenzione del blocco, elabora cornici mel in incorporazioni audio |
| Decoder di testo | Trasformatore a 28 strati Qwen3 con attenzione raggruppata (GQA) e incorporazione della posizione rotativa (RoPE), genera automaticamente token di testo |
Prestazioni
| Indietro | RTF | Memoria di picco | Osservazioni |
|---|---|---|---|
| Qwen3-ASR 1.7B MLX 5-bit | 0.027 | 1.92 GB | WER 1.32% (nuovo leader di accuratezza) |
| Qwen3-ASR 1.7B MLX 8bit | 0.033 | 2,7 GB | WER 1.52% |
| Qwen3-ASR 0.6B MLX 8bit | 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 a ~4-bit RAM |
| Qwen3-ASR 0.6B. MLX 4- Abitazione | 0.012 | 1,0 GB | WER 2.20% |
| Qwen3-ASR 0.6B. CoreML INT8 | 0.098 | 1.4 GB | WER 3,02% (riparazione a vuoto) |
Apple M5 Pro, 48 GB. LibriSpeech test-clean n=200, isolato per motore. RTF < 1.0 = più veloce del in tempo reale.
Varianti di modello
| Modello | Indietro | Dimensione | 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 |
Uso CLI
Trascrivere un file audio con il modello predefinito Qwen3-ASR:
.build/release/speech transcribe recording.wav
Opzioni
# 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
Utilizzare il modulo Qwen3ASR per trascrivere l'audio programmaticamente:
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
Eseguire l'encoder audio sul Neural Engine tramite CoreML, con il decoder di testo su GPU via MLX. Questo approccio ibrido abbassa il consumo di energia e libera lo GPU per carichi di lavoro concomitanti.
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 palettizzato (180 MB, similitudine del coseno > 0.999) è il default. An INT4 variante (90 MB) è disponibile anche per le distribuzioni di dimensioni limitate.
Modalità di streaming
La modalità di streaming utilizza VAD (rilevamento delle attività di voce) per segmentare l'audio in blocchi e trascriverli in modo incrementale.
# 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
Il --max-segment la bandiera controlla la durata massima del pezzo in pochi secondi. --partial flag consente l'uscita parziale del risultato, mostrando le parole come sono decodificate.
Formati supportati
Qwen3-ASR accetta i seguenti formati audio. Tutto l'ingresso viene riprodotto automaticamente a 16 kHz mono internamente.
- WAV — PCM non compresso
- M4A — audio codificato AAC
- MP3 — Livello MPEG III
- CAF — Formato dell'audio del core di Apple
I modelli vengono scaricati da HuggingFace al primo utilizzo e memorizzati nella cache ~/Library/Caches/qwen3-speech/. Il modello 4-bit 0.6B è approssimativamente 1.5 GB.
Parakeet TDT discorso-to-text · clonazione vocale CosyVoice3 · Kokoro-82M TTS
Hai bisogno di una guida a decisioni focalizzate? Vedi Qwen3-ASR vs Whisper: accuratezza, velocità e memoria
Cancellazione cooperativa
Per la trascrizione MLX, Qwen3ASRModel.transcribeCheckingCancellation(audio:sampleRate:options:) getti CancellationError quando la cancellazione dell'attività viene osservata prima dell'estrazione della caratteristica, codifica, prefill decoder, o un passo di decodifica. GPU il lavoro già presentato può finire. transcribe e transcribeBatch Le API mantengono il loro comportamento non rovesciante e ignorano la cancellazione delle attività. speech-server utilizza il punto di annullamento-consapevole per Qwen3-ASR.
MLX
Caricamento Qwen3-ASR delimita la piscina MLX di buffer Metal riutilizzabili: min(1 GiB, RAM / 8) per 0.6B e min(4 GiB, RAM / 4) per 1.7B. Altri modelli MLX condividono questa piscina. I soffitti si applicano ai buffer di graffi in cache, ai pesi non attivi o all'impronta totale del processo.
Il limite effettivo è il più basso del numero di chiamata esistente MLX.Memory.cacheLimit e il massimale di ogni istanza caricato ASR istanza. Gli istanze possono scaricare in qualsiasi ordine; l'ultima scarica o distruzione di istanze ripristina il bilancio del chiamante.
La trascrizione a singolo ingresso elimina i buffer riutilizzabili quando il suo decoder ritorna o lancia, inclusa la cancellazione all'interno del decoder. transcribeBatch decoder mantiene la piscina delimitata tra i lotti. No API opzioni o CLI bandiere cambiamento.
Cancellare il pool buffer abbassa la memoria conservata, ma richiede nuove allocazioni su richieste successive, così le richieste brevi possono richiedere più tempo. In attesa di lavoro di decoder inviato per finire rende deterministica pulizia, inclusa la cancellazione. Latenza effettiva e la memoria di processo dipendono dall'hardware, modello e audio.
Proprietà del modello opzionale
SpeechRuntime fornisce il caricamento condiviso, l'ammissione FIFO cancellabile e l'esecuzione serializzata. Qwen3ASRRuntime seleziona MLX o CoreML completo attraverso descrittori espliciti; le API native e le bandiere CLI rimangono disponibili.
Il server audio contiene un permesso di esecuzione per ogni richiesta completa, inclusa l'uscita in streaming, con fino a 32 richieste di attesa. ASR guasti producono errori HTTP o WebSocket
Gestito CoreML trascrizione rilascia buffer temporanei dopo ogni richiesta, comprese le chiamate ripetute da un'attività di sfondo.
import Qwen3ASRRuntime
let runtime = Qwen3ASRRuntime(descriptor: Qwen3ASRDescriptors.small)
let text = try await runtime.transcribe(audio: samples, sampleRate: 16000)
try await runtime.unload()