Audio Classification
NeMo
Safetensors
PyTorch
Arabic
English
multilingual
speaker-diarization
diarization
streaming
realtime
sortformer
arabic
audar
Eval Results (legacy)
Instructions to use audarai/Audar-Diarization-V1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- NeMo
How to use audarai/Audar-Diarization-V1 with NeMo:
# tag did not correspond to a valid NeMo domain.
- Notebooks
- Google Colab
- Kaggle
File size: 14,460 Bytes
245508e 230e5af 245508e 230e5af 245508e 230e5af 245508e 230e5af 245508e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | ---
license: other
license_name: audarai-community-license-v1.0
license_link: https://www.audarai.com/license/audarai-community-license-v1.0/
library_name: nemo
language:
- ar
- en
- multilingual
pipeline_tag: audio-classification
inference: false
tags:
- speaker-diarization
- diarization
- streaming
- realtime
- sortformer
- arabic
- multilingual
- nemo
- pytorch
- audar
datasets:
- ami
- alimeeting
- dipco
- icsi
- voxconverse
- chime6
- msdwild
metrics:
- der
model-index:
- name: Audar-Diarization-V1
results:
- task: {type: speaker-diarization, name: Speaker Diarization}
dataset: {type: ami, name: AMI (Headset Mix)}
metrics: [{type: der, value: 15.24, name: DER (collar=0.25s)}]
- task: {type: speaker-diarization, name: Speaker Diarization}
dataset: {type: alimeeting, name: AliMeeting (Far)}
metrics: [{type: der, value: 18.70, name: DER (collar=0.25s)}]
- task: {type: speaker-diarization, name: Speaker Diarization}
dataset: {type: dipco, name: DiPCo}
metrics: [{type: der, value: 23.77, name: DER (collar=0.25s)}]
- task: {type: speaker-diarization, name: Speaker Diarization}
dataset: {type: icsi, name: ICSI}
metrics: [{type: der, value: 14.46, name: DER (collar=0.25s)}]
- task: {type: speaker-diarization, name: Speaker Diarization}
dataset: {type: msdwild, name: MSDWild (Few)}
metrics: [{type: der, value: 21.09, name: DER (collar=0.25s)}]
- task: {type: speaker-diarization, name: Speaker Diarization}
dataset: {type: msdwild, name: MSDWild (Many)}
metrics: [{type: der, value: 29.41, name: DER (collar=0.25s)}]
- task: {type: speaker-diarization, name: Speaker Diarization}
dataset: {type: voxconverse, name: VoxConverse}
metrics: [{type: der, value: 8.55, name: DER (collar=0.25s)}]
- task: {type: speaker-diarization, name: Speaker Diarization}
dataset: {type: chime6, name: CHiME-6}
metrics: [{type: der, value: 45.00, name: DER (collar=0.25s)}]
---
<div align="center">
# Audar-Diarization-V1
### Real-time streaming speaker diarization β up to 8 speakers, state of the art on 8 corpora.
**From Arabic to the world.**






[](https://github.com/AudarAI/Audar-diarization-V1)
<p><a href="#-what-it-is"><b>π§ Overview</b></a> Β· <a href="#-benchmarks"><b>π Benchmarks</b></a> Β· <a href="#-quickstart"><b>β‘ Quickstart</b></a> Β· <a href="#-real-time-streaming"><b>ποΈ Streaming</b></a> Β· <a href="#-files"><b>π¦ Files</b></a> Β· <a href="https://github.com/AudarAI/Audar-diarization-V1"><b>π GitHub</b></a> Β· <a href="https://www.audarai.com"><b>βοΈ Audar API</b></a> Β· <a href="https://www.audarai.com/license/audarai-community-license-v1.0/"><b>π License</b></a></p>
</div>
---
## π§ What it is
**Audar-Diarization-V1** answers *"who spoke when"* β in real time, for up to **8 speakers**, across
hour-long multi-speaker audio. It is the speaker-attribution engine of the Audar realtime stack: paired
with [**Audar-ASR-V1**](https://huggingface.co/audarai/Audar-ASR-V1-Turbo) it turns a verbatim transcript
into a speaker-labeled one β the difference between an undifferentiated wall of text and a minutes-ready
board record.
It is built on NVIDIA's **Streaming Sortformer v2.1** and advanced in-house through Audar's diarization
program:
- π§ **Surgical 4β8 speaker head expansion** β the released Sortformer supports only 4 speaker slots.
Audar extends the output layer to **8** by modifying exactly two Linear layers (adding just **2,312**
parameters), cloning the learned 4-speaker weights so the pretrained decision boundary is preserved
while capacity opens for speakers 5β8.
- π§ **Freeze-and-fine-tune** β the **109.55M**-parameter FastConformer acoustic encoder is frozen; only
the lightweight Transformer encoder + Sortformer assignment modules (**8.15M**) are trained. This buys
a **4.2-point DER** advantage over full-model fine-tuning and keeps training fast on a single node.
- 𧬠**Correct-by-construction synthetic data** β Audar fixes a systematic bug in the legacy synthetic-
data generator (97 % of samples had labels running past the audio) and generates **200 h** of clean
5β8-speaker conversations, on top of **486 h** of real far-field meetings.
- π― **Arrival-Order Speaker Cache (AOSC)** β speakers are assigned to output slots in the order they
first speak, resolving the permutation problem without global clustering or Hungarian matching. Identity
is held across sessions **up to 74 minutes**, and the cache auto-sizes to however many speakers are
actually present.
The result **streams on a single GPU** with **1.04 s** algorithmic latency and a **0.003** real-time
factor (1 s of audio processed in ~3 ms), while posting the **lowest DER of any evaluated system on all
eight benchmark corpora**.
## Model summary
<table>
<tbody>
<tr><td width="220"><b>Model</b></td><td>Audar-Diarization-V1 β streaming speaker diarization (up to 8 speakers)</td></tr>
<tr><td><b>Task</b></td><td>Speaker diarization ("who spoke when") β streaming <i>and</i> offline whole-file</td></tr>
<tr><td><b>Architecture</b></td><td>Sortformer (encoder-label): frozen FastConformer β trainable Transformer encoder β Sortformer modules + AOSC</td></tr>
<tr><td><b>Base</b></td><td>NVIDIA Streaming Sortformer v2.1, surgically extended 4 β 8 speaker slots</td></tr>
<tr><td><b>Total parameters</b></td><td>117,696,272 (117.7M)</td></tr>
<tr><td><b>Trainable / frozen</b></td><td>8.15M trainable Β· 109.55M frozen (acoustic encoder)</td></tr>
<tr><td><b>Max speakers</b></td><td>8 per session (AOSC auto-sizes to the number present)</td></tr>
<tr><td><b>Prediction frame</b></td><td>80 ms</td></tr>
<tr><td><b>Algorithmic latency</b></td><td>1.04 s (streaming mode)</td></tr>
<tr><td><b>Real-time factor</b></td><td>0.003 (single GPU, batch 1)</td></tr>
<tr><td><b>Sample rate</b></td><td>16 kHz mono</td></tr>
<tr><td><b>Format</b></td><td>safetensors (fp32, lossless) β PyTorch / CUDA via NeMo</td></tr>
<tr><td><b>License</b></td><td>AudarAI Community License v1.0</td></tr>
</tbody>
</table>
## π Benchmarks
Evaluated with **`dscore`** at a **0.25 s collar, ignoring overlap** (DIHARD protocol) on the official
dev/eval splits of **8 corpora** spanning meetings, dinner parties, broadcast, and in-the-wild audio.
Audar-Diarization-V1 posts the **lowest DER on every corpus** and a **macro DER of 22.03 %** β beating
pyannote 3.1 by **7.63 pp** and stock Sortformer v2.1 by **12.16 pp**.
### DER % per corpus (lower is better)
| System | AMI | AliMeeting | DiPCo | ICSI | MSDWild-few | MSDWild-many | VoxConverse | CHiME-6 | **Macro** |
|---|--:|--:|--:|--:|--:|--:|--:|--:|--:|
| **Audar-Diarization-V1** | **15.24** | **18.70** | **23.77** | **14.46** | **21.09** | **29.41** | **8.55** | **45.00** | **22.03** |
| pyannote 3.1 | 28.60 | 27.38 | 30.72 | 22.48 | 27.12 | 34.83 | 12.92 | 53.19 | 29.66 |
| Sortformer v2.1 | 24.84 | 25.94 | 33.80 | 23.22 | 36.92 | 50.77 | 17.06 | 60.97 | 34.19 |
### Where the gain comes from β DER decomposition (macro)
| System | Miss | False alarm | Confusion | **DER** |
|---|--:|--:|--:|--:|
| **Audar-Diarization-V1** | 10.33 | 6.90 | **4.80** | **22.03** |
| pyannote 3.1 | 8.72 | 3.38 | 17.56 | 29.66 |
| Sortformer v2.1 | 11.91 | 5.04 | 17.24 | 34.19 |
The advantage is **confusion: 4.80 % vs 17.2β17.6 %** β a **3.6Γ reduction**, from the AOSC's stable
identity tracking. The slightly higher false-alarm rate reflects a deliberately assertive streaming VAD
(a missed utterance costs more than a brief false activation in live transcription) and is tunable via
the onset threshold.
### Out-of-domain (CALLHOME, 8 kHz telephony β not in training)
| Audar-Diarization-V1 | Sortformer v2.1 | pyannote 3.1 |
|--:|--:|--:|
| **10.29** | 12.22 | 18.51 |
Identity also holds on the longest sessions in the benchmark β e.g. a 74-minute, 5-speaker ICSI meeting
at 22.2 % DER with ~2 % confusion.
## β‘ Quickstart
Ships as a single **fp32 safetensors** bundle β `model.safetensors` + `config.yaml` + `load_diarizer.py`.
The loader instantiates the NeMo Sortformer model and loads the weights directly (no `.nemo` tar):
```python
# needs: nemo_toolkit[asr]>=2.6, safetensors, omegaconf
from huggingface_hub import snapshot_download
import sys; sys.path.insert(0, snapshot_download("audarai/Audar-Diarization-V1"))
from load_diarizer import load_diarizer
model = load_diarizer() # fp32, CUDA (device="cpu" also works)
segs = model.diarize(audio=["meeting.wav"], batch_size=1)
# β RTTM-style [(start_s, end_s, speaker_slot), ...] per file
```
Runnable inference examples (offline diarization + RTTM export), the full 8-corpus benchmark, and
reproduction steps are open at
**[github.com/AudarAI/Audar-diarization-V1](https://github.com/AudarAI/Audar-diarization-V1)**.
## ποΈ Real-time streaming
The same checkpoint runs **true streaming** via `forward_streaming_step` with persistent `spkcache` / FIFO
state: ~1 s chunks, **80 ms** prediction frames, up to **8 concurrent speakers**, and session-stable slot
labels that never rewrite once committed. Algorithmic latency is **1.04 s** at a **0.003** real-time
factor on a single GPU.
**Speaker-attributed transcription.** The Audar serving gateway runs diarization in parallel with
[**Audar-ASR-V1**](https://huggingface.co/audarai/Audar-ASR-V1-Turbo) and assigns each transcribed word to
the speaker dominant during its time span β so combined latency is the *max* of the two streams, not the
sum. One deployment exposes **ASR-only**, **diarization-only**, and **ASR+diarization** endpoints over HTTP
and an OpenAI-Realtime-compatible WebSocket. For a managed, production-hosted endpoint, see the
[**Audar API**](https://www.audarai.com).
## π¦ Files
| File | What it is |
|---|---|
| `model.safetensors` | **fp32 weights** β bit-exact, lossless, safetensors (safe, zero-copy `mmap`, no pickle) |
| `config.yaml` | model config (the `.nemo`'s `model_config.yaml`) |
| `load_diarizer.py` | self-contained loader (instantiates the NeMo model + loads the weights) |
**Lossless fp32, and faster to load.** The `model.safetensors` carries the full-precision weights
bit-for-bit β verified by a round-trip check (990/990 tensors identical) and by downcasting to the prior
fp16 release with **zero mismatches** across all 971 float tensors, so it reproduces the exact model. The
weight-load step is **~28Γ faster** than the legacy `.nemo` (β12 ms `mmap` vs β344 ms untar + unpickle),
and `safetensors` is the safe, community-standard format (no arbitrary-code pickle path).
<details>
<summary><b>Re-quantizing to fp16 (optional)</b></summary>
`load_diarizer.py` auto-detects weight dtype, so you can quantize `model.safetensors` to fp16 yourself and
it will load unchanged. When fp16 is detected the loader keeps the preprocessor (STFT/mel) in fp32 and runs
the streaming path under `torch.set_default_dtype(torch.float16)` (NeMo's streaming state is otherwise
created dtype-less). ONNX export is not supported out-of-the-box (NeMo 2.6.2's Sortformer export needs
streaming-state wiring).
</details>
## Intended use & limitations
**Intended use.** Speaker-attributed meeting/broadcast/call-center transcription, board and panel
recordings, and any real-time or offline "who spoke when" task β cloud, on-prem, or edge.
**Limitations.**
- Up to **8 speakers** per session; very large panels beyond 8 are out of scope.
- **Far-field, high-overlap, extreme-noise** audio (e.g. CHiME-6-style dinner parties) remains the hardest
case for every system.
- Very-low-activity speakers (<2 % of talk time) can have their cache entry decay during long silences.
- Not evaluated for, and must **not** be used for, covert speaker identification.
## π License
Released under the **AudarAI Community License v1.0** β research and limited commercial use for qualifying
Community Entities; enterprise, large-scale, or model-as-a-service use requires an AudarAI Enterprise
License. See
[audarai.com/license/audarai-community-license-v1.0](https://www.audarai.com/license/audarai-community-license-v1.0/),
or contact **contact@audarai.com** for enterprise licensing.
## Citation
```bibtex
@techreport{audar-diarization-v1-2026,
title = {Audar-Diarization-V1: Real-Time Streaming Speaker Diarization for Long-Form, Multi-Speaker Audio},
author = {Audar AI Team},
institution = {AudarAI},
year = {2026},
url = {https://huggingface.co/audarai/Audar-Diarization-V1}
}
```
---
## About AudarAI
<div align="center">
### Leading Arabic-First Multilingual Audio Intelligence
*AudarAI starts with Arabic β and expands to the world.*
</div>
We are building advanced multilingual audio intelligence that helps individuals, enterprises, and
governments communicate across languages, cultures, and borders. By combining Arabic-first speech
technology with global multilingual AI, AudarAI transforms voice into understanding, interaction,
and connection.
Our work spans speech recognition, speech understanding, speaker diarization, voice-enabled digital
assistants, human-computer interaction, and intelligent audio systems designed for real-world impact.
From empowering people to access technology in their native language to helping organizations communicate
globally, AudarAI is shaping a future where every voice can be heard, understood, and connected.
**Arabic-first. Multilingual by design. Human-centered at heart.**
<div align="center">
**[π www.audarai.com](https://www.audarai.com)** Β· [π€ Hugging Face](https://huggingface.co/audarai) Β· [GitHub](https://github.com/AudarAI/Audar-diarization-V1) Β· contact@audarai.com
Β© 2026 AUDARAI PTE. LTD. Β· Licensed under the AudarAI Community License v1.0
</div>
|