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 | Пиковая память | Примечания |
|---|---|---|---|
| MLX (GPU) | ~0.06 | ~2.2 ГБ | По умолчанию, самый быстрый односетевой вариант |
| CoreML + MLX (гибрид) | ~0.09 | ~400 МБ (энкодер) | Энкодер на Neural Engine, декодер на GPU |
M2 Max, 64 ГБ. RTF < 1.0 = быстрее реального времени.
Варианты модели
| Модель | Бэкенд | Размер | HuggingFace |
|---|---|---|---|
| Qwen3-ASR-0.6B (4-bit) | MLX | 680 МБ | aufklarer/Qwen3-ASR-0.6B-MLX-4bit |
| Qwen3-ASR-0.6B (8-bit) | MLX | 1.0 ГБ | aufklarer/Qwen3-ASR-0.6B-MLX-8bit |
| Qwen3-ASR-0.6B (CoreML INT8) | CoreML | 180 МБ | aufklarer/Qwen3-ASR-CoreML |
| Qwen3-ASR-1.7B (4-bit) | MLX | 2.1 ГБ | aufklarer/Qwen3-ASR-1.7B-MLX-4bit |
| Qwen3-ASR-1.7B (8-bit) | MLX | 3.2 ГБ | aufklarer/Qwen3-ASR-1.7B-MLX-8bit |
Использование CLI
Транскрибировать аудиофайл моделью Qwen3-ASR по умолчанию:
.build/release/audio transcribe recording.wav
Опции
# Использовать более крупную модель 1.7B
.build/release/audio transcribe recording.wav --model 1.7b
# Указать язык
.build/release/audio transcribe recording.wav --language en
# Потоковый режим с частичными результатами
.build/release/audio transcribe recording.wav --stream --partial
Swift API
Используйте модуль Qwen3ASR, чтобы транскрибировать аудио программно:
import Qwen3ASR
// Загрузить модель (при первом использовании скачивается с HuggingFace)
let model = try await Qwen3ASRModel.loadFromHub()
// Транскрибировать аудиофайл
let result = try await model.transcribe(audioFile: "recording.wav")
print(result.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/audio transcribe recording.wav --engine qwen3-coreml
Палетизированный INT8 (180 МБ, косинусное сходство > 0.999) используется по умолчанию. Также доступен вариант INT4 (90 МБ) для развёртываний с ограничениями по размеру.
Потоковый режим
Потоковый режим использует VAD (детекцию голосовой активности), чтобы разбивать аудио на фрагменты и транскрибировать их инкрементально. Это удобно для длинных записей или обработки в реальном времени.
# Потоковый режим с размером сегмента по умолчанию
.build/release/audio transcribe recording.wav --stream
# Ограничить максимальную длительность сегмента
.build/release/audio transcribe recording.wav --stream --max-segment 15
# Показывать промежуточные (частичные) результаты по мере поступления
.build/release/audio transcribe recording.wav --stream --partial
Флаг --max-segment задаёт максимальную длительность сегмента в секундах. Флаг --partial включает вывод частичных результатов, показывая слова по мере их декодирования.
Поддерживаемые форматы
Qwen3-ASR принимает следующие аудиоформаты. Вся входная дорожка автоматически ресемплируется в моно 16 кГц.
- WAV — несжатый PCM
- M4A — аудио, закодированное в AAC
- MP3 — MPEG Layer III
- CAF — Apple Core Audio Format
Модели скачиваются с HuggingFace при первом использовании и кэшируются в ~/Library/Caches/qwen3-speech/. 4-битная модель 0.6B весит примерно 1.5 ГБ.