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:

FaseDesignazione
Ingresso audioRivendita audio grezzo a 16 kHz mono
Mel Spectrogram128-bin mel filterbank caratteristiche estratti dalla forma d'onda
Encoder audioTrasformatore a 18 strati con l'attenzione del blocco, elabora cornici mel in incorporazioni audio
Decoder di testoTrasformatore a 28 strati Qwen3 con attenzione raggruppata (GQA) e incorporazione della posizione rotativa (RoPE), genera automaticamente token di testo

Prestazioni

IndietroRTFMemoria di piccoOsservazioni
Qwen3-ASR 1.7B MLX 5-bit0.0271.92 GB WER 1.32% (nuovo leader di accuratezza)
Qwen3-ASR 1.7B MLX 8bit0.0332,7 GBWER 1.52%
Qwen3-ASR 0.6B MLX 8bit0.0151.3 GBWER 1.82%
Qwen3-ASR 0.6B MLX 5-bit0.0141.03 GBWER 1,74% ( near-8-bit a ~4-bit RAM
Qwen3-ASR 0.6B. MLX 4- Abitazione0.0121,0 GBWER 2.20%
Qwen3-ASR 0.6B. CoreML INT80.0981.4 GBWER 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

ModelloIndietroDimensioneHuggingFace
Qwen3-ASR-0.6B (4-bit)MLX680 MBaufklarer/Qwen3-ASR-0.6B-MLX-4bit
Qwen3-ASR-0.6B ( 5-bit )MLX1,0 GBaufklarer/Qwen3-ASR-0.6B-MLX-5bit
Qwen3-ASR-0.6B (8-bit)MLX1,0 GBaufklarer/Qwen3-ASR-0.6B-MLX-8bit
Qwen3-ASR-0.6B (CoreML INT8)CoreML180 MBaufklarer/Qwen3-ASR-CoreML
Qwen3-ASR-1.7B (4-bit)MLX2.1 GBaufklarer/Qwen3-ASR-1.7B-MLX-4bit
Qwen3-ASR-1.7B ( 5-bit )MLX2.3 GBaufklarer/Qwen3-ASR-1.7B-MLX-5bit
Qwen3-ASR-1.7B (8-bit)MLX3.2 GBaufklarer/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.

Importante

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.

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()