You need to agree to share your Hugging Face information to access this model

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

Log in or Sign Up to review the conditions and access this model content.

YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

Qwen3-ASR-1.7B для казахского

Полное дообучение Qwen/Qwen3-ASR-1.7B-hf. Казахского не было среди языков базовой модели: её WER на нём 109.04 при LID 0%.

Использовать: full-stage3/

Результаты, held-out test (500 строк на язык)

WER CER LID база дельта
kk 19.82 6.32 99.2 109.04 −89.22
ru 9.90 3.51 100.0 10.52 −0.61
en 5.00 2.59 99.8 4.27 +0.73

Русский стал лучше нетронутой модели: цена добавления казахского отрицательна.

Сравнение с опубликованным ориентиром

nur-dev/Qwen3-ASR-0.6B-kk-ru-en — единственная известная модель на ту же задачу:

FLEURS kk ru en
nur-dev (0.6B) 17.80 +2.86 +1.53
эта модель (1.7B) 17.58 −0.61 +0.73

Лучше по всем трём метрикам.

По источникам

источник база эта модель
fleurs/kk 108.97 17.58
commonvoice/kk 109.38 30.41
sova/ru 17.30 14.87
commonvoice/ru 7.66 7.66
fleurs/ru 6.78 8.05
fleurs/en 3.97 4.53
commonvoice/en 4.82 5.87

Стадии обучения

Цепочка из трёх стадий, каждая стартует с чекпоинта предыдущей.

стадия казахский из смесь kk/ru/en lr kk на test
1 KSC2 55 / 20 / 25 2e-5 20.34
2 + чтение вслух, синтез 50 / 22 / 28 1e-5 20.23
3 + Common Voice, FLEURS 33 / 37 / 30 5e-6 19.82

Стадия 1 на одном KSC2 (826.8 ч) дала 20.34 из итоговых 19.82. Остальные 1800 часов добавили полпункта: на этом масштабе модель насыщается уже на основном источнике.

Формат вывода

language Kazakh<asr_text><транскрипт>

Тег языка входит в обучаемую часть, поэтому модель ещё и определяет язык — LID 99.2% на казахском против 0% у базовой. Ход ассистента закрывается токеном <|im_end|>: без него модель не учится останавливаться и генерирует до max_new_tokens.

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

import soundfile as sf
import torch
from transformers import AutoProcessor, Qwen3ASRForConditionalGeneration

BASE = "Qwen/Qwen3-ASR-1.7B-hf"   # процессор берётся отсюда
MODEL = "Saken20/finetune-stt-full-model"  # или локальный путь к full-stage3/

processor = AutoProcessor.from_pretrained(BASE)
model = Qwen3ASRForConditionalGeneration.from_pretrained(
    MODEL,
    dtype=torch.bfloat16,
    attn_implementation="eager",
    device_map="cuda" if torch.cuda.is_available() else "cpu",
)
model.eval()

# 16 кГц моно, не длиннее 30 секунд
audio, sr = sf.read("sample.wav", dtype="float32")
assert sr == 16000, f"нужно 16 кГц, получено {sr}"
if audio.ndim > 1:
    audio = audio.mean(axis=1)

inputs = processor.apply_transcription_request(
    audio=[audio],
    language=None,   # None — модель определит сама; "Kazakh" — принудительно
).to(model.device, model.dtype)

with torch.no_grad():
    output_ids = model.generate(
        **inputs, max_new_tokens=256, num_beams=1, do_sample=False
    )

parsed = processor.decode(output_ids, return_format="parsed")
if isinstance(parsed, dict):
    parsed = [parsed]

for item in parsed:
    print("язык:      ", item.get("language"))
    print("транскрипт:", item.get("transcription"))

Имена языков ровно те, на которых обучали: Kazakh, Russian, English.

Четыре места, где легко ошибиться:

  • return_format="parsed", никогда "raw". С raw в текст попадают спецтокены и паддинг, каждый считается словом — на этом baseline русского показывал WER 280% при том, что модель русский знает.
  • sampling_rate в apply_transcription_request не передаётся — он уходит в processor_kwargs, и transformers ругается. Аудио должно быть уже в 16 кГц.
  • attn_implementation="eager" обязателен на torch 2.13.0+cu130: sdpa в bf16 там даёт NaN в обратном проходе. На других сборках стоит проверить, sdpa быстрее.
  • Процессор грузится из базовой модели. Файлы процессора лежат и в папке чекпоинта, но проверенный путь — из Qwen/Qwen3-ASR-1.7B-hf.

Обучение

Гиперпараметры из официального рецепта QwenLM/Qwen3-ASR/finetuning: полное дообучение всех весов без LoRA и заморозки, глобальный батч 256 (16 на устройство × 16 накопления), расписание linear, warmup 0.02, weight_decay 0.0, bf16, attention eager. Одна NVIDIA A100-SXM4-80GB.

Данные

Корпус 2620 часов, отпечаток 4f795e132792.

язык источники
kk KSC2 826.8 ч, корпус чтения вслух 554 ч, синтез ресторанных фраз 86 ч, Common Voice, FLEURS
ru SOVA RuDevices, Common Voice, FLEURS (~132 ч)
en Common Voice (потолок 1000 ч), FLEURS

Русский и английский идут replay'ем, чтобы модель их не забыла.

Перед обучением корпус проходит блокирующие проверки: утечка между сплитами (точное совпадение аудио, точное совпадение текста, near-duplicate по символьным 5-граммам, пересечение дикторов) и согласованность записи чисел между источниками.

Как выбран чекпоинт

Не по лоссу и не по последнему шагу. Regression-guard берёт чекпоинт с наименьшим казахским WER среди тех, где русский и английский не ушли от базовой модели дальше 3.0 п.п. Отбор идёт по validation, финальная таблица по test считается ровно один раз.

У выбранного чекпоинта запас отрицательный: оба защищаемых языка лучше базы.

Оговорки

  • commonvoice/en просел с 4.82 до 5.87 — единственная устойчивая регрессия.
  • KSC2 в тестовом наборе не представлен: колонка диктора там вырождена (одно значение на весь источник), поэтому источник целиком идёт в обучение. Казахский измеряется на Common Voice и FLEURS, то есть вне основного домена обучения.
  • Синтетический источник ресторанных фраз (голоса KazakhTTS) измеримой пользы не дал: стадия 2 добавила 0.11 пункта вместе со вторым своим источником.
  • Аудио: 16 кГц моно, не длиннее 30 секунд — это chunk_length аудио-энкодера, всё длиннее модель не увидит целиком.
  • Числа по-казахски выходят словами, а не цифрами: так они записаны в KSC2, это нормализация самого ISSAI. Для русского и английского — цифрами.
  • Метрики считаются с приведением к нижнему регистру и снятием пунктуации, симметрично для гипотезы и эталона. Генерация жадная, num_beams=1.

Содержимое репозитория

папка kk на test
full-stage3/ 19.82 — использовать эту
full-stage2/ 20.23
full-stage1/ 20.34

Отчёты, истории regression-guard и логи — в датасет-репозитории Saken20/finetune-stt-full.

Источники данных и атрибуция

  • KSC2 — ISSAI, Nazarbayev University. Mussakhojayeva et al., Interspeech 2022. CC BY 4.0.
  • Common Voice — Mozilla Common Voice Corpus 22.0, CC0.
  • FLEURS — Google, CC-BY.
  • SOVA RuDevices.
  • Синтез ресторанных фраз — голоса KazakhTTS, Mussakhojayeva, S., Janaliyeva, A., Mirzakhmetov, A., Khassanov, Y., Varol, H.A. (2021) KazakhTTS: An Open-Source Kazakh Text-to-Speech Synthesis Dataset. Proc. Interspeech.

Базовая модель Qwen/Qwen3-ASR-1.7B распространяется на условиях своей лицензии; они наследуются этой моделью.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support