pluttodk commited on
Commit
5e0002c
·
verified ·
1 Parent(s): 7898e69

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +136 -140
README.md CHANGED
@@ -37,53 +37,58 @@ model-index:
37
  name: CER
38
  ---
39
 
40
- # Milo-ASR: Dansk ASR Model
41
 
42
- **Milo-ASR** er en "state of the art" Dansk automatic speech recognition (ASR) model baseret på [Qwen3-ASR-1.7B](https://huggingface.co/Qwen/Qwen3-ASR-1.7B), finetuned [CoRal v2 dataset](https://huggingface.co/datasets/alexandrainst/coral) for at gøre den bedre til at forstå dansk.
43
 
44
- ## Key Highlights
45
 
46
- | Feature | Value |
47
  |---------|-------|
48
- | **WER on CoRal v2** | 18.47% (14% better than Whisper v3) |
49
- | **CER on CoRal v2** | 7.86% (11% better than Whisper v3) |
50
- | **Real-Time Factor** | 0.086 (45% faster than Whisper v3) |
51
- | **Model Size** | ~1.7B parameters |
52
 
53
- ### Fordele nedarvet fra Qwen3-ASR
54
 
55
- - **Streaming/Real-time transcription** via vLLM backend
56
- - **Sang detection** - Til at kunne transskribere teksten fra lyde med baggrundsmusik (find ud af hvad Rasmus seebach synger 🤣)
57
- - **Word-level timestamps** via forced alignment
58
- - **30+ language support** (Danish optimized)
59
- - **20 minutter pr. request** - Kan kører 20 minutter igennem pr. kald
60
 
61
  ---
62
 
63
- ## Performance Comparison
64
 
65
- ### CoRal v2 Test Set (9,123 samples, 17.3 hours)
66
 
67
- | Model | WER | CER | RTF | Throughput | Parameters |
68
- |-------|-----|-----|-----|------------|------------|
69
- | **Milo-ASR** | **18.47%** | **7.86%** | **0.086** | 1.71 samples/s | ~1.7B |
70
- | hviske-v3 (Whisper Large v3) | 21.47% | 8.79% | 0.156 | 0.94 samples/s | ~2B |
 
 
 
71
 
72
- **Improvements over Whisper Large v3:**
73
- - **14% reduction** in Word Error Rate
74
- - **11% reduction** in Character Error Rate
75
- - **45% faster** inference speed
76
- - **15% fewer** parameters
77
 
78
- ### Comparison Plots
79
 
80
- ![WER Comparison](plots/wer_comparison.png)
81
- ![Speed Comparison](plots/rtf_comparison.png)
82
- ![Accuracy vs Speed](plots/accuracy_vs_speed.png)
 
 
83
 
84
  ---
85
 
86
- ## Quick Start
87
 
88
  ### Installation
89
 
@@ -91,21 +96,21 @@ model-index:
91
  pip install qwen-asr transformers torch
92
  ```
93
 
94
- ### Basic Usage
95
 
96
  ```python
97
  from qwen_asr import Qwen3ASRModel
98
 
99
- # Load the model
100
  model = Qwen3ASRModel.from_pretrained(
101
  "pluttodk/Milo-ASR",
102
  dtype="bfloat16",
103
  device_map="cuda:0",
104
  )
105
 
106
- # Transcribe audio file
107
  results = model.transcribe(
108
- audio="path/to/danish_audio.wav",
109
  language="Danish",
110
  )
111
 
@@ -114,11 +119,11 @@ print(results[0].text)
114
 
115
  ---
116
 
117
- ## Advanced Usage
118
 
119
- ### Batch Transcription (Fast Processing)
120
 
121
- Process multiple audio files efficiently in a single call:
122
 
123
  ```python
124
  from qwen_asr import Qwen3ASRModel
@@ -127,23 +132,22 @@ model = Qwen3ASRModel.from_pretrained(
127
  "pluttodk/Milo-ASR",
128
  dtype="bfloat16",
129
  device_map="cuda:0",
130
- max_inference_batch_size=16, # Process up to 16 files at once
131
  )
132
 
133
- # Batch transcribe multiple files
134
- audio_files = ["audio1.wav", "audio2.wav", "audio3.wav"]
135
  results = model.transcribe(
136
- audio=audio_files,
137
  language="Danish",
138
  )
139
 
140
  for i, result in enumerate(results):
141
- print(f"File {i+1}: {result.text}")
142
  ```
143
 
144
- ### Transcription with Timestamps
145
 
146
- Get word-level timestamps using the forced aligner:
147
 
148
  ```python
149
  from qwen_asr import Qwen3ASRModel
@@ -156,63 +160,56 @@ model = Qwen3ASRModel.from_pretrained(
156
  )
157
 
158
  results = model.transcribe(
159
- audio="path/to/audio.wav",
160
  language="Danish",
161
  return_time_stamps=True,
162
  )
163
 
164
- # Access word-level timestamps
165
  for item in results[0].time_stamps.items:
166
  print(f"{item.start_time:.2f}s - {item.end_time:.2f}s: {item.text}")
167
  ```
168
 
169
- ### Streaming/Real-time Transcription (vLLM Backend)
170
 
171
- For real-time streaming transcription, use the vLLM backend:
172
 
173
  ```python
174
  from qwen_asr import Qwen3ASRModel
175
 
176
- # Initialize with vLLM backend for streaming
177
  model = Qwen3ASRModel.LLM(
178
  model="pluttodk/Milo-ASR",
179
  gpu_memory_utilization=0.8,
180
  )
181
 
182
- # Initialize streaming state
183
  state = model.init_streaming_state(
184
  language="Danish",
185
- chunk_size_sec=2.0, # Process audio in 2-second chunks
186
  )
187
 
188
- # Simulate streaming audio (16kHz mono float32)
189
  import numpy as np
190
 
191
- def audio_stream():
192
- """Replace with actual audio stream from microphone."""
193
  for chunk in audio_chunks:
194
  yield np.array(chunk, dtype=np.float32)
195
 
196
- # Process streaming audio
197
- for audio_chunk in audio_stream():
198
- state = model.streaming_transcribe(audio_chunk, state)
199
- print(f"Current transcription: {state.text}")
200
 
201
- # Finalize stream
202
  state = model.finish_streaming_transcribe(state)
203
- print(f"Final transcription: {state.text}")
204
  ```
205
 
206
- ### Using with Transformers Directly
207
 
208
- For more control, use the model directly with transformers:
209
 
210
  ```python
211
  from transformers import AutoModel, AutoProcessor
212
  import torch
213
  import librosa
214
 
215
- # Load model and processor
216
  model = AutoModel.from_pretrained(
217
  "pluttodk/Milo-ASR",
218
  trust_remote_code=True,
@@ -224,10 +221,8 @@ processor = AutoProcessor.from_pretrained(
224
  trust_remote_code=True,
225
  )
226
 
227
- # Load and preprocess audio
228
- audio, sr = librosa.load("path/to/audio.wav", sr=16000, mono=True)
229
 
230
- # Build input using chat template
231
  messages = [
232
  {"role": "system", "content": ""},
233
  {"role": "user", "content": [{"type": "audio", "audio": audio}]},
@@ -240,22 +235,21 @@ text = processor.apply_chat_template(
240
  )
241
  text = text + "language Danish<asr_text>"
242
 
243
- # Process and generate
244
  inputs = processor(text=[text], audio=[audio], return_tensors="pt", padding=True)
245
  inputs = inputs.to(model.device).to(model.dtype)
246
 
247
  output_ids = model.generate(**inputs, max_new_tokens=512)
248
- transcription = processor.batch_decode(
249
  output_ids[:, inputs["input_ids"].shape[1]:],
250
  skip_special_tokens=True,
251
  )[0]
252
 
253
- print(transcription)
254
  ```
255
 
256
- ### Singing Detection & Multi-Audio Support
257
 
258
- The model inherits Qwen3-ASR's ability to handle singing and background music:
259
 
260
  ```python
261
  from qwen_asr import Qwen3ASRModel
@@ -266,10 +260,9 @@ model = Qwen3ASRModel.from_pretrained(
266
  device_map="cuda:0",
267
  )
268
 
269
- # Transcribe audio with singing or background music
270
  results = model.transcribe(
271
- audio="path/to/song.wav",
272
- language="Danish", # or None for auto-detection
273
  )
274
 
275
  print(results[0].text)
@@ -277,102 +270,105 @@ print(results[0].text)
277
 
278
  ---
279
 
280
- ## Model Details
281
-
282
- ### Model Description
283
 
284
- Milo-ASR is a Danish-specialized automatic speech recognition model created by finetuning [Qwen3-ASR-1.7B](https://huggingface.co/Qwen/Qwen3-ASR-1.7B) on the [CoRal v2 dataset](https://huggingface.co/datasets/alexandrainst/coral). The model achieves state-of-the-art performance on Danish speech recognition while maintaining fast inference speeds.
285
 
286
- - **Developed by:** Mathias Oliver Valdbjørn Rønnelund
287
- - **Model type:** Encoder-decoder speech recognition model
288
- - **Language:** Danish (primary), with inherited multilingual capabilities
289
- - **License:** Apache 2.0
290
- - **Finetuned from:** [Qwen/Qwen3-ASR-1.7B](https://huggingface.co/Qwen/Qwen3-ASR-1.7B)
291
 
292
- ### Architecture
 
 
 
 
293
 
294
- The model inherits the Qwen3-ASR architecture:
295
 
296
- | Component | Specification |
297
  |-----------|--------------|
298
- | Audio Encoder | 24-layer transformer (1024 hidden dim, 16 attention heads) |
299
- | Text Decoder | 28-layer transformer (2048 hidden dim, 16 attention heads) |
300
- | Total Parameters | ~1.7 billion |
301
- | Precision | bfloat16 |
302
- | Audio Input | 16kHz mono WAV |
303
 
304
  ---
305
 
306
- ## Training Details
307
 
308
- ### Training Data
309
 
310
- The model was finetuned on the [CoRal v2 dataset](https://huggingface.co/datasets/alexandrainst/coral), a comprehensive Danish speech corpus containing:
311
- - Diverse Danish speakers across demographics
312
- - Various recording conditions and audio qualities
313
- - Natural conversational speech
314
- - Read-aloud speech
315
 
316
- ### Training Procedure
317
 
318
- **Training Approach:** Supervised Fine-Tuning (SFT) with chat template formatting
319
 
320
- **Preprocessing:**
321
- - Audio resampled to 16kHz mono
322
- - Chat template applied with system prompt, audio input, and target transcription
323
- - Prefix masking to train only on transcription tokens
324
 
325
- **Training Hyperparameters:**
326
 
327
- | Parameter | Value |
328
  |-----------|-------|
329
- | Base model | Qwen/Qwen3-ASR-1.7B |
330
- | Learning rate | 2e-5 |
331
- | Batch size (per device) | 8 |
332
  | Gradient accumulation steps | 4 |
333
- | Effective batch size | 32 |
334
- | Epochs | 3 |
335
- | Warmup ratio | 0.1 |
336
- | Weight decay | 0.01 |
337
- | Max gradient norm | 1.0 |
338
- | Precision | bfloat16 |
339
  | Optimizer | AdamW |
340
- | LR scheduler | Linear decay |
341
- | Total training steps | 23,448 |
342
 
343
- **Hardware:** Training performed on NVIDIA GPUs (~25GB GPU memory per device)
344
 
345
  ---
346
 
347
- ## Evaluation
348
 
349
- ### Test Data
350
 
351
- Evaluated on the CoRal v2 test split:
352
- - **9,123 samples**
353
- - **17.3 hours** of audio
354
- - Diverse Danish speakers and recording conditions
355
 
356
- ### Metrics
357
 
358
- | Metric | Description |
359
  |--------|-------------|
360
- | **WER** | Word Error Rate - percentage of words incorrectly transcribed (lower is better) |
361
- | **CER** | Character Error Rate - percentage of characters incorrectly transcribed (lower is better) |
362
- | **RTF** | Real-Time Factor - ratio of processing time to audio duration (< 1.0 = faster than real-time) |
 
 
363
 
364
- ### Results Summary
 
 
 
 
 
 
365
 
366
- | Model | WER | CER | RTF | Throughput |
367
- |-------|-----|-----|-----|------------|
368
- | **Milo-ASR** | **18.47%** | **7.86%** | **0.086** | 1.71 samples/sec |
369
- | hviske-v3 (Whisper v3) | 21.47% | 8.79% | 0.156 | 0.94 samples/sec |
370
 
371
  ---
372
 
373
- ## Citation
374
 
375
- If you use this model, please cite:
376
 
377
  ```bibtex
378
  @misc{Milo-ASR,
@@ -384,7 +380,7 @@ If you use this model, please cite:
384
  }
385
  ```
386
 
387
- Also consider citing the base model and dataset:
388
 
389
  ```bibtex
390
  @article{qwen3asr,
@@ -404,7 +400,7 @@ Also consider citing the base model and dataset:
404
 
405
  ---
406
 
407
- ## Acknowledgements
408
 
409
- - [Qwen Team](https://github.com/QwenLM) for Qwen3-ASR base model
410
- - [Alexandra Institute](https://alexandra.dk/) for CoRal v2 lyd corpus
 
37
  name: CER
38
  ---
39
 
40
+ # Milo-ASR: Dansk talegenkendelses model
41
 
42
+ **Milo-ASR** er en dansk ASR-model bygget oven på [Qwen3-ASR-1.7B](https://huggingface.co/Qwen/Qwen3-ASR-1.7B), som er finetunet [CoRal v2-datasættet](https://huggingface.co/datasets/alexandrainst/coral) for at blive god til dansk.
43
 
44
+ ## Kort fortalt
45
 
46
+ | Feature | Værdi |
47
  |---------|-------|
48
+ | **WER CoRal v2** | 18,47% (14% bedre end hviske-v3-conversation) |
49
+ | **CER CoRal v2** | 7,86% (11% bedre end hviske-v3-conversation) |
50
+ | **Real-Time Factor** | 0,087 (43% hurtigere end hviske-v3-conversation) |
51
+ | **Modelstørrelse** | ~1,7B parametre |
52
 
53
+ ### Hvad Milo-ASR kan (nedarvet fra Qwen3-ASR)
54
 
55
+ - **Streaming/realtidstransskription** via vLLM backend
56
+ - **Sanggenkendelse** – Milo-ASR kan transskribere tale i lyd med baggrundsmusik
57
+ - **Tidsstempler på ordniveau** via forced alignment
58
+ - **30+ sprog** (optimeret til dansk)
59
+ - **Op til 20 minutter pr. kald** du behøver ikke hakke lyden op i småbidder
60
 
61
  ---
62
 
63
+ ## Sammenligning med andre modeller
64
 
65
+ ### CoRal v2 testsæt (9.123 eksempler, ~17,3 timer)
66
 
67
+ | Model | WER | CER | RTF | Gennemløb | Parametre |
68
+ |-------|-----|-----|-----|-----------|-----------|
69
+ | **Milo-ASR** | **18,47%** | **7,86%** | **0,087** | **1,69 eks./s** | ~1,7B |
70
+ | hviske-v2 (Whisper Large v2) | 12,74% | 4,94% | 0,154 | 0,95 eks./s | ~1,5B |
71
+ | hviske-v3-conversation (Whisper Large v3) | 21,47% | 8,79% | 0,153 | 0,95 eks./s | ~2B |
72
+ | Whisper Large v3 Turbo | 38,54% | 13,73% | 0,064 | 2,29 eks./s | ~0,8B |
73
+ | Qwen3-ASR-1.7B (base) | 46,03% | 18,85% | 0,100 | 1,46 eks./s | ~1,7B |
74
 
75
+ **Milo-ASR vs. hviske-v3-conversation (Whisper Large v3):**
76
+ - **14% lavere** Word Error Rate (18,47% vs. 21,47%)
77
+ - **11% lavere** Character Error Rate (7,86% vs. 8,79%)
78
+ - **43% hurtigere** inferens (RTF: 0,087 vs. 0,153)
79
+ - **15% færre** parametre (~1,7B vs. ~2B)
80
 
81
+ > **Bemærk:** hviske-v2 (Whisper Large v2) klarer sig bedre end Milo-ASR på WER og CER. Til gengæld er Milo-ASR næsten dobbelt så hurtig (RTF 0,087 vs. 0,154), så hvis hastighed er vigtig for dig, er Milo-ASR det oplagte valg.
82
 
83
+ ### Sammenligningsplots
84
+
85
+ ![WER sammenligning](plots/wer_comparison.png)
86
+ ![Hastighed sammenligning](plots/rtf_comparison.png)
87
+ ![Nøjagtighed vs. hastighed](plots/accuracy_vs_speed.png)
88
 
89
  ---
90
 
91
+ ## Kom i gang
92
 
93
  ### Installation
94
 
 
96
  pip install qwen-asr transformers torch
97
  ```
98
 
99
+ ### Basis brug
100
 
101
  ```python
102
  from qwen_asr import Qwen3ASRModel
103
 
104
+ # Indlæs Milo-ASR
105
  model = Qwen3ASRModel.from_pretrained(
106
  "pluttodk/Milo-ASR",
107
  dtype="bfloat16",
108
  device_map="cuda:0",
109
  )
110
 
111
+ # Transskriber en dansk lydfil
112
  results = model.transcribe(
113
+ audio="sti/til/dansk_lyd.wav",
114
  language="Danish",
115
  )
116
 
 
119
 
120
  ---
121
 
122
+ ## Avanceret brug
123
 
124
+ ### Batch-transskription
125
 
126
+ Kør flere filer én gang:
127
 
128
  ```python
129
  from qwen_asr import Qwen3ASRModel
 
132
  "pluttodk/Milo-ASR",
133
  dtype="bfloat16",
134
  device_map="cuda:0",
135
+ max_inference_batch_size=16,
136
  )
137
 
138
+ audio_filer = ["lyd1.wav", "lyd2.wav", "lyd3.wav"]
 
139
  results = model.transcribe(
140
+ audio=audio_filer,
141
  language="Danish",
142
  )
143
 
144
  for i, result in enumerate(results):
145
+ print(f"Fil {i+1}: {result.text}")
146
  ```
147
 
148
+ ### Transskription med tidsstempler
149
 
150
+ tidsstempler ordniveau via forced aligner:
151
 
152
  ```python
153
  from qwen_asr import Qwen3ASRModel
 
160
  )
161
 
162
  results = model.transcribe(
163
+ audio="sti/til/lyd.wav",
164
  language="Danish",
165
  return_time_stamps=True,
166
  )
167
 
 
168
  for item in results[0].time_stamps.items:
169
  print(f"{item.start_time:.2f}s - {item.end_time:.2f}s: {item.text}")
170
  ```
171
 
172
+ ### Streaming i realtid (vLLM backend)
173
 
174
+ Hvis du vil have live transskription, fx fra en mikrofon:
175
 
176
  ```python
177
  from qwen_asr import Qwen3ASRModel
178
 
 
179
  model = Qwen3ASRModel.LLM(
180
  model="pluttodk/Milo-ASR",
181
  gpu_memory_utilization=0.8,
182
  )
183
 
 
184
  state = model.init_streaming_state(
185
  language="Danish",
186
+ chunk_size_sec=2.0,
187
  )
188
 
 
189
  import numpy as np
190
 
191
+ def lyd_stream():
192
+ """Erstat med din faktiske lydstream fra mikrofon."""
193
  for chunk in audio_chunks:
194
  yield np.array(chunk, dtype=np.float32)
195
 
196
+ for lyd_chunk in lyd_stream():
197
+ state = model.streaming_transcribe(lyd_chunk, state)
198
+ print(f"Løbende transskription: {state.text}")
 
199
 
 
200
  state = model.finish_streaming_transcribe(state)
201
+ print(f"Endelig transskription: {state.text}")
202
  ```
203
 
204
+ ### Direkte brug med Transformers
205
 
206
+ Vil du have fuld kontrol over modellen, kan du bruge Transformers direkte:
207
 
208
  ```python
209
  from transformers import AutoModel, AutoProcessor
210
  import torch
211
  import librosa
212
 
 
213
  model = AutoModel.from_pretrained(
214
  "pluttodk/Milo-ASR",
215
  trust_remote_code=True,
 
221
  trust_remote_code=True,
222
  )
223
 
224
+ audio, sr = librosa.load("sti/til/lyd.wav", sr=16000, mono=True)
 
225
 
 
226
  messages = [
227
  {"role": "system", "content": ""},
228
  {"role": "user", "content": [{"type": "audio", "audio": audio}]},
 
235
  )
236
  text = text + "language Danish<asr_text>"
237
 
 
238
  inputs = processor(text=[text], audio=[audio], return_tensors="pt", padding=True)
239
  inputs = inputs.to(model.device).to(model.dtype)
240
 
241
  output_ids = model.generate(**inputs, max_new_tokens=512)
242
+ transskription = processor.batch_decode(
243
  output_ids[:, inputs["input_ids"].shape[1]:],
244
  skip_special_tokens=True,
245
  )[0]
246
 
247
+ print(transskription)
248
  ```
249
 
250
+ ### Sang og baggrundsmusik
251
 
252
+ Milo-ASR kan håndtere lyd med sang eller baggrundsmusik:
253
 
254
  ```python
255
  from qwen_asr import Qwen3ASRModel
 
260
  device_map="cuda:0",
261
  )
262
 
 
263
  results = model.transcribe(
264
+ audio="sti/til/sang.wav",
265
+ language="Danish", # eller None for automatisk sproggenkendelse
266
  )
267
 
268
  print(results[0].text)
 
270
 
271
  ---
272
 
273
+ ## Om modellen
 
 
274
 
275
+ ### Beskrivelse
276
 
277
+ Milo-ASR er lavet ved at finetunet [Qwen3-ASR-1.7B](https://huggingface.co/Qwen/Qwen3-ASR-1.7B) [CoRal v2-datasættet](https://huggingface.co/datasets/alexandrainst/coral). Resultatet er en model, der er skarp til dansk tale og samtidig hurtig nok til at bruges i produktionsmiljøer og realtidsapplikationer.
 
 
 
 
278
 
279
+ - **Udviklet af:** Mathias Oliver Valdbjørn Rønnelund
280
+ - **Modeltype:** Encoder-decoder talegenkendelses model
281
+ - **Sprog:** Dansk (primært), med nedarvet flersproget understøttelse
282
+ - **Licens:** OpenRAIL
283
+ - **Finetunet fra:** [Qwen/Qwen3-ASR-1.7B](https://huggingface.co/Qwen/Qwen3-ASR-1.7B)
284
 
285
+ ### Arkitektur
286
 
287
+ | Komponent | Specifikation |
288
  |-----------|--------------|
289
+ | Audio Encoder | 24-lags transformer (1024 hidden dim, 16 attention heads) |
290
+ | Text Decoder | 28-lags transformer (2048 hidden dim, 16 attention heads) |
291
+ | Parametre i alt | ~1,7 milliarder |
292
+ | Præcision | bfloat16 |
293
+ | Lydinput | 16kHz mono WAV |
294
 
295
  ---
296
 
297
+ ## Træning
298
 
299
+ ### Træningsdata
300
 
301
+ Milo-ASR er finetunet [CoRal v2-datasættet](https://huggingface.co/datasets/alexandrainst/coral), som er et dansk talekorpus med:
302
+ - Mange forskellige danske talere på tværs af alder, køn og dialekter
303
+ - Varierende optagelseskvalitet og lydmiljøer
304
+ - Naturlig samtaletale
305
+ - Oplæst tale
306
 
307
+ ### Træningsopsætning
308
 
309
+ **Tilgang:** Supervised Fine-Tuning (SFT) med chat template-formatering
310
 
311
+ **Forbehandling:**
312
+ - Lyd resamplet til 16kHz mono
313
+ - Chat template anvendt med systemprompt, lydinput og måltransskription
314
+ - Prefix masking modellen kun trænes transskriptionstokens
315
 
316
+ **Hyperparametre:**
317
 
318
+ | Parameter | Værdi |
319
  |-----------|-------|
320
+ | Basismodel | Qwen/Qwen3-ASR-1.7B |
321
+ | Læringsrate | 2e-5 |
322
+ | Batchstørrelse (per device) | 8 |
323
  | Gradient accumulation steps | 4 |
324
+ | Effektiv batchstørrelse | 32 |
325
+ | Epoker | 3 |
326
+ | Warmup ratio | 0,1 |
327
+ | Weight decay | 0,01 |
328
+ | Max gradient norm | 1,0 |
329
+ | Præcision | bfloat16 |
330
  | Optimizer | AdamW |
331
+ | LR scheduler | Lineært fald |
332
+ | Træningsskridt i alt | 23.448 |
333
 
334
+ **Hardware:** NVIDIA GPU'er (~25GB GPU-hukommelse per device)
335
 
336
  ---
337
 
338
+ ## Evaluering
339
 
340
+ ### Testdata
341
 
342
+ Milo-ASR er evalueret CoRal v2-testsættet:
343
+ - **9.123 eksempler**
344
+ - **~17,3 timers** lyd
345
+ - Bred repræsentation af danske talere og optagelsesforhold
346
 
347
+ ### Metrikker
348
 
349
+ | Metrik | Beskrivelse |
350
  |--------|-------------|
351
+ | **WER** | Word Error Rate andelen af forkert transskriberede ord (lavere er bedre) |
352
+ | **CER** | Character Error Rate andelen af forkert transskriberede tegn (lavere er bedre) |
353
+ | **RTF** | Real-Time Factor forholdet mellem procestid og lydvarighed (under 1,0 = hurtigere end realtid) |
354
+
355
+ ### Resultater
356
 
357
+ | Model | WER | CER | RTF | Gennemløb | Parametre |
358
+ |-------|-----|-----|-----|-----------|-----------|
359
+ | **Milo-ASR** | **18,47%** | **7,86%** | **0,087** | **1,69 eks./s** | ~1,7B |
360
+ | hviske-v2 (Whisper Large v2) | 12,74% | 4,94% | 0,154 | 0,95 eks./s | ~1,5B |
361
+ | hviske-v3-conversation (Whisper Large v3) | 21,47% | 8,79% | 0,153 | 0,95 eks./s | ~2B |
362
+ | Whisper Large v3 Turbo | 38,54% | 13,73% | 0,064 | 2,29 eks./s | ~0,8B |
363
+ | Qwen3-ASR-1.7B (base) | 46,03% | 18,85% | 0,100 | 1,46 eks./s | ~1,7B |
364
 
365
+ Milo-ASR slår hviske-v3-conversation med 14% på WER og 11% på CER, og er samtidig 43% hurtigere. Sammenlignet med den utrænede Qwen3-ASR-1.7B basismodel falder WER fra 46,03% til 18,47% – et klart tegn på, at finetuning på CoRal v2 gør en stor forskel.
 
 
 
366
 
367
  ---
368
 
369
+ ## Citér modellen
370
 
371
+ Bruger du Milo-ASR i dit projekt, du meget gerne citere:
372
 
373
  ```bibtex
374
  @misc{Milo-ASR,
 
380
  }
381
  ```
382
 
383
+ Og gerne også basismodellen og datasættet:
384
 
385
  ```bibtex
386
  @article{qwen3asr,
 
400
 
401
  ---
402
 
403
+ ## Tak til
404
 
405
+ - [Qwen-teamet](https://github.com/QwenLM) for Qwen3-ASR basismodellen
406
+ - [Alexandra Instituttet](https://alexandra.dk/) for CoRal v2-datasættet