whisper-small-mn-v2 / README.md
Blgn94's picture
Add whisper-small-mn-v24 fine-tune (WER 15.16 / CER 6.60) + model card
f06a342 verified
|
Raw
History Blame Contribute Delete
4.54 kB
metadata
language:
  - mn
license: apache-2.0
library_name: transformers
pipeline_tag: automatic-speech-recognition
tags:
  - whisper
  - automatic-speech-recognition
  - mongolian
  - speech
  - audio
base_model: openai/whisper-small
datasets:
  - Blgn94/mongolian-stt-dataset-v24
metrics:
  - wer
  - cer
model-index:
  - name: whisper-small-mn-v24
    results:
      - task:
          type: automatic-speech-recognition
          name: Automatic Speech Recognition
        dataset:
          name: Blgn94/mongolian-stt-dataset-v24 (validation)
          type: Blgn94/mongolian-stt-dataset-v24
          split: validation
        metrics:
          - type: wer
            value: 15.16
            name: WER
          - type: cer
            value: 6.6
            name: CER

whisper-small-mn-v24

Fine-tune of openai/whisper-small for Mongolian (mn) automatic speech recognition, trained on Blgn94/mongolian-stt-dataset-v24.

This is the v24 iteration and improves substantially over the previous release Blgn94/whisper-small-mn.

Results

Metric v24 (this model) Previous whisper-small-mn
WER 15.16% 22.1%
CER 6.60% 10.3%

That is a ~31% relative WER reduction and ~36% relative CER reduction over the previous model.

Note on measurement: these numbers are from a fixed 200-sample subset of the validation split, evaluated with predict_with_generate during training (the same protocol used for the previous model, so the comparison is apples-to-apples). A full 2,297-row validation evaluation has not yet been run; the full-set figures may differ slightly.

Usage

from transformers import pipeline

asr = pipeline("automatic-speech-recognition", model="Blgn94/whisper-small-mn-v24")
result = asr("audio.mp3", generate_kwargs={"language": "mongolian", "task": "transcribe"})
print(result["text"])

Or with the model/processor directly:

import torch, librosa
from transformers import WhisperProcessor, WhisperForConditionalGeneration

processor = WhisperProcessor.from_pretrained("Blgn94/whisper-small-mn-v24", language="mongolian", task="transcribe")
model = WhisperForConditionalGeneration.from_pretrained("Blgn94/whisper-small-mn-v24")

audio, _ = librosa.load("audio.mp3", sr=16000)
inputs = processor(audio, sampling_rate=16000, return_tensors="pt")
ids = model.generate(inputs.input_features, language="mongolian", task="transcribe")
print(processor.batch_decode(ids, skip_special_tokens=True)[0])

Audio is expected at 16 kHz mono. Keep clips within Whisper's 30 s window.

Training data

Blgn94/mongolian-stt-dataset-v24 — a combined Mongolian read-speech and subtitle corpus (~77 h of audio, 16 kHz).

Source Train clips Validation clips
Common Voice 87,988 1,869
FLEURS 3,770 215
MBSpeech 3,670 176
YouTube (manual subtitles) 559 39
Total 95,987 2,299

Preprocessing: rows whose tokenized transcript exceeded 440 tokens (near Whisper's 448-token decoder limit) were dropped — 41 from train and 2 from validation — leaving 95,946 train / 2,297 validation clips.

Training procedure

Fine-tuned from openai/whisper-small (244M params).

Hyperparameter Value
Epochs 3
Effective batch size 8 (per-device 2 × grad-accum 4)
Learning rate 1e-5
Warmup steps 500
Precision fp16
Total steps 35,982
Optimizer AdamW (Transformers default)
Gradient checkpointing enabled

Hardware: single NVIDIA RTX 5060 (8 GB). Full run took ~6.5 h.

The model, task, and language tokens were set for Mongolian transcription (language="mongolian", task="transcribe"); forced_decoder_ids was cleared so decoding follows the fine-tuned distribution.

Limitations

  • The training data is ~92% Common Voice (read speech), so accuracy is strongest on clear, read-style Mongolian and weaker on spontaneous, conversational, noisy, or telephony audio.
  • Cyrillic Mongolian only.
  • Inherits Whisper's tendency to hallucinate on silence or non-speech segments.

Base model & license

Derived from openai/whisper-small; released under Apache-2.0.