Qwen3-ASR

Qwen3-ASR — это современная многоязычная модель автоматического распознавания речи. Она работает на устройстве с ускорением на Metal GPU через MLX и использует 4-битную квантизацию для эффективного расхода памяти. Доступна в вариантах на 0.6B и 1.7B параметров.

Пайплайн

Пайплайн инференса Qwen3-ASR обрабатывает аудио в четыре этапа:

ЭтапОписание
АудиовходИсходное аудио ресемплируется в моно 16 кГц
Мел-спектрограмма128-канальные признаки мел-фильтрбанка, извлечённые из сигнала
Аудиоэнкодер18-слойный трансформер с блочным вниманием, преобразует мел-фреймы в аудиоэмбеддинги
Текстовый декодер28-слойный трансформер Qwen3 с grouped-query attention (GQA) и rotary position embeddings (RoPE), авторегрессивно генерирует текстовые токены

Производительность

БэкендRTFПиковая памятьПримечания
Qwen3-ASR 1.7B MLX 8-bit0.0332.7 GBWER 1.52%
Qwen3-ASR 0.6B MLX 8-bit0.0151.3 GBWER 1.82%
Qwen3-ASR 0.6B MLX 4-bit0.0121.0 GBWER 2.20%
Qwen3-ASR 0.6B CoreML INT80.0981.4 GBWER 3.02% (chunked-attn rebuild)

Apple M5 Pro, 48 ГБ. LibriSpeech test-clean n=200, по одному движку на процесс. RTF < 1.0 = быстрее реального времени.

Варианты модели

МодельБэкендРазмерHuggingFace
Qwen3-ASR-0.6B (4-bit)MLX680 МБaufklarer/Qwen3-ASR-0.6B-MLX-4bit
Qwen3-ASR-0.6B (8-bit)MLX1.0 ГБaufklarer/Qwen3-ASR-0.6B-MLX-8bit
Qwen3-ASR-0.6B (CoreML INT8)CoreML180 МБaufklarer/Qwen3-ASR-CoreML
Qwen3-ASR-1.7B (4-bit)MLX2.1 ГБaufklarer/Qwen3-ASR-1.7B-MLX-4bit
Qwen3-ASR-1.7B (8-bit)MLX3.2 ГБaufklarer/Qwen3-ASR-1.7B-MLX-8bit

Использование CLI

Транскрибировать аудиофайл моделью Qwen3-ASR по умолчанию:

.build/release/speech transcribe recording.wav

Опции

# 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

Используйте модуль Qwen3ASR, чтобы транскрибировать аудио программно:

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

Запускайте аудиоэнкодер на Neural Engine через CoreML, а текстовый декодер — на GPU через MLX. Такой гибридный подход снижает энергопотребление и освобождает GPU для параллельных задач.

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 (180 МБ, косинусное сходство > 0.999) используется по умолчанию. Также доступен вариант INT4 (90 МБ) для развёртываний с ограничениями по размеру.

Потоковый режим

Потоковый режим использует VAD (детекцию голосовой активности), чтобы разбивать аудио на фрагменты и транскрибировать их инкрементально. Это удобно для длинных записей или обработки в реальном времени.

# 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

Флаг --max-segment задаёт максимальную длительность сегмента в секундах. Флаг --partial включает вывод частичных результатов, показывая слова по мере их декодирования.

Поддерживаемые форматы

Qwen3-ASR принимает следующие аудиоформаты. Вся входная дорожка автоматически ресемплируется в моно 16 кГц.

Важно

Модели скачиваются с HuggingFace при первом использовании и кэшируются в ~/Library/Caches/qwen3-speech/. 4-битная модель 0.6B весит примерно 1.5 ГБ.