| --- |
| license: mit |
| library_name: whisperdrz |
| pipeline_tag: automatic-speech-recognition |
| tags: |
| - whisper |
| - speaker-diarization |
| - diarization |
| - speech-recognition |
| - asr |
| - word-timestamps |
| language: |
| - en |
| --- |
| |
| # WhisperDRZ |
|
|
| WhisperDRZ is a speaker-aware automatic speech recognition model. It transcribes |
| audio into text with **word-level timestamps**, **per-line speaker tags**, and |
| **non-speech event tags** ([laugh], [breath], ...). It is a Whisper-style |
| encoder-decoder model and handles long audio by chunking and stitching |
| internally. |
|
|
| - ποΈ **Try it in the browser** β no install: **[fluxions.ai/transcribe](https://fluxions.ai/transcribe)** |
| - π» **Code (inference)**: <https://github.com/fluxions-ai/whisperdrz> |
| - π **Full write-up** β approach, honest results, what didn't work: see the repo's `writeup.md` |
|
|
| ## Usage |
|
|
| ```bash |
| pip install git+https://github.com/fluxions-ai/whisperdrz |
| ``` |
|
|
| Requires Python 3.12+ and FFmpeg. Runs on a CUDA GPU or on CPU. Weights download |
| automatically from this repo on first use. |
|
|
| ### Command line |
|
|
| ```bash |
| whisperdrz audio.wav # defaults: this model, --lang en |
| whisperdrz audio.wav --output_format json > out.json |
| whisperdrz audio.wav --lang auto # auto-detect language |
| ``` |
|
|
| ### Python |
|
|
| ```python |
| import whisperdrz |
| from whisperdrz.audio import load_audio, SAMPLE_RATE |
| |
| transcriber = whisperdrz.load_model("whisperdrz-large-v3.safetensors", lang="en") |
| |
| audio, _ = load_audio("audio.wav", sample_rate=SAMPLE_RATE) |
| result = transcriber.transcribe(audio.mean(0)) # mono, 16 kHz |
| |
| print(result.text) # speaker-tagged text with timestamps |
| print(result.segments) # list of {speaker, start, end, text} |
| ``` |
|
|
| You can also point `load_model` at this repo id (`fluxions/whisperdrz`) directly. |
|
|
| ## Output format |
|
|
| Each line begins with a speaker tag. Timed words and tags are wrapped in a |
| start/end timestamp pair; the first and last word of each line are always timed: |
|
|
| ``` |
| [0] <|0.00|>Hello<|0.45|> there <|0.80|>world.<|1.10|> |
| [1] <|1.20|>Hi<|1.40|> <|1.45|>[laugh]<|1.60|> <|1.70|>there.<|1.95|> |
| ``` |
|
|
| - `[0]`, `[1]`, ... are speaker IDs; `[c]` marks crowd/ambient. |
| - `<|t|>` are timestamps in seconds (two decimals), always in a pair wrapping a word or tag. |
| - `[laugh]`, `[breath]`, and similar are non-speech event tags. |
|
|
| ## Evaluation |
|
|
| Measured on this checkpoint: |
|
|
| | Benchmark | WER | DER (miss / FA / conf) | cpWER / tcpWER | |
| |---|---|---|---| |
| | ESB (English ASR, 1000 utts) | 9.6% macro / 5.9% micro | β | β | |
| | Internal conversational (26 clips) | 11.1% | β (WDER 33%) | 46% cpWER | |
| | VoxConverse dev (216, overlap-heavy) | β | **26.3%** (3.1 / 15.8 / 7.5) | β | |
| | CALLHOME eng (140, 2-spk telephone) | β | **38.6%** (5.9 / 14.0 / 18.7) | β | |
| | AMI test (16 meetings, Mix-Headset) | 22.8% | **50.6%** (10.6 / 28.9 / 11.1) | 72% / 84% | |
|
|
| DER is at the standard 0.25s collar, scoring overlapping speech. AMI |
| cpWER/tcpWER and the 22.8% WER use oracle speaker count. |
|
|
| **WhisperDRZ is an ASR-first model.** Transcription is strong across the board, |
| but diarization trails purpose-built systems (~10β25% DER) β speaker confusion |
| dominates on long, overlapping multi-party audio. |
|
|
| **No VAD.** It transcribes over silence and music, so false alarm is a large part |
| of DER. Gating to detected speech before scoring recovers much of it: |
|
|
| | Benchmark | DER (ungated) | + silero VAD | + oracle VAD | |
| |---|---|---|---| |
| | VoxConverse dev | 26.3% | 24.0% | 20.9% | |
| | CALLHOME eng | 38.6% | 34.2% | 28.6% | |
| | AMI test | 50.6% | 40.6% | 31.1% | |
|
|
| See the write-up in the code repo for full analysis (timing, non-speech events, |
| multilingual). |
|
|
| ## License |
|
|
| MIT. |
|
|