A newer model is available — please use syvai/hviske-v5.3 instead. v5.3 is the current recommended Danish ASR model from this family and reaches 13.91% strict WER on the CoRal v3 full test set (beam=5). This v5.1 checkpoint is kept as the base for downstream fine-tunes (v5.2, v5.3) and for reproducibility.
| Split | Baseline WER | Baseline CER | v5.1 WER | v5.1 CER | ElevenLabs scribe_v2 WER | ElevenLabs scribe_v2 CER | OpenAI gpt-4o-transcribe WER | OpenAI gpt-4o-transcribe CER |
|---|---|---|---|---|---|---|---|---|
read_aloud | 104.73% | 60.05% | 19.45% | 7.24% | 18.62% | 7.60% | 26.34% | 11.31% |
conversation | 126.12% | 99.84% | 25.46% | 14.08% | 31.38% | 19.57% | 55.24% | 43.63% |
scribe_v2 evaluated via the public /v1/speech-to-text API and OpenAI gpt-4o-transcribe via /v1/audio/transcriptions — both on the full CoRal v3 test splits (n=17,560) with strict normalization (lowercase + punctuation strip + Danish digit-to-word via num2words(lang="da")).pip install transformers==4.57.6 torch soundfile librosaCohereAsr/Whisper classes from transformers 4.57.6. It is not compatible with transformers ≥5.0.1import torch, numpy as np, soundfile as sf
2from transformers import AutoProcessor, AutoModelForSpeechSeq2Seq
3
4processor = AutoProcessor.from_pretrained("syvai/hviske-v5.1", trust_remote_code=True)
5model = AutoModelForSpeechSeq2Seq.from_pretrained(
6 "syvai/hviske-v5.1", trust_remote_code=True, dtype=torch.bfloat16
7).to("cuda").eval()
8
9audio, sr = sf.read("your_audio.wav")
10audio = np.asarray(audio, dtype=np.float32)
11
12hyp = model.transcribe(
13 processor=processor,
14 language="da",
15 audio_arrays=[audio],
16 sample_rates=[sr],
17)[0]
18print(hyp)/v1/audio/transcriptions endpoint — convenient for high-throughput batch transcription and remote serving.1pip install "vllm==0.19.0"
2pip install "vllm[audio]" librosa # audio deps are required for transcriptionvllm serve syvai/hviske-v5.1 --trust-remote-code --host 0.0.0.0 --port 8000--trust-remote-code is required — the model ships custom code. The runner (transcription) is auto-detected; no --task flag is needed.1curl -s http://localhost:8000/v1/audio/transcriptions \
2 -F "file=@your_audio.wav" \
3 -F "model=syvai/hviske-v5.1" \
4 -F "language=da" \
5 -F "temperature=0"openai client)1from openai import OpenAI
2
3client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
4
5with open("your_audio.wav", "rb") as f:
6 resp = client.audio.transcriptions.create(
7 model="syvai/hviske-v5.1",
8 file=f,
9 language="da",
10 temperature=0,
11 )
12print(resp.text)language="da" + temperature=0 gives the most accurate, deterministic output.response_format supports json (default) and text. verbose_json is not supported and returns a 400.syvai/danish-asr-unified pre-shuffled into 200 shards (3.41M rows) with voxpopuli, ftspeech, coral_read_aloud, coral_conversation, nst_da, nota, cv17 sourcesAdamW8bit, LR 5e-5 peak, 500-step warmup, cosine decay