tiron-GGML / README.md
cstr's picture
Rewrite model card: usage, decode, diarization, attribution
272e46f verified
|
Raw
History Blame Contribute Delete
4.55 kB
---
license: apache-2.0
base_model: Trelis/tiron
pipeline_tag: automatic-speech-recognition
library_name: whisper.cpp
tags:
- automatic-speech-recognition
- whisper
- whisper-large-v3
- speaker-diarization
- meeting-transcription
- crispasr
- ggml
- gguf
language:
- en
---
# tiron β€” multi-speaker meeting ASR (GGML for CrispASR)
GGML conversions of [**`Trelis/tiron`**](https://huggingface.co/Trelis/tiron)
(Apache-2.0) β€” a Whisper **large-v3** model fine-tuned to transcribe multi-speaker
meetings and emit **inline `<|speakerN|>` speaker markers**, so a single forward
pass produces both the words *and* who said them.
These files run on [**CrispASR**](https://github.com/CrispStrobe/CrispASR), whose
whisper backend implements tiron's speaker-vocabulary detection, constrained
decode, windowing, and cross-window speaker linking. **They will not work with
stock `whisper.cpp`** β€” the speaker-token grammar and diarization are
CrispASR-specific.
## Files
| file | quant | size | notes |
|------|-------|------|-------|
| `tiron-f16.bin` | F16 | 3.1 GB | full precision; reference-exact token stream |
| `tiron-q4_k.bin` | Q4_K | 889 MB | recommended default; ~3.5Γ— smaller, negligible WER change |
Legacy GGML `.bin` (whisper format), quantized with CrispASR's
`crispasr-legacy-quantize`. `tiron-q4_k.bin` is the registry default
(`crispasr --backend tiron -m auto` auto-downloads it).
## What it is
A drop-in `WhisperForConditionalGeneration` β€” Whisper large-v3 (128-mel, 32
encoder + 32 decoder layers, 1280-d) with an **extended 51904-token vocabulary**:
`<|speaker1|>`…`<|speaker8|>` (ids 51866–51873) plus `<|nospeech|>`. Speaker
indices are **window-local** (the first talker in each 30 s window is always
`<|speaker1|>`), so "speaker1" in one window is not necessarily the same person as
"speaker1" in another β€” see *Diarization* below.
## Usage (CrispASR)
Auto-download the default (q4_k) and transcribe with inline speaker markers:
```bash
crispasr --backend tiron -m auto -f meeting.wav
```
Or point at a local file:
```bash
crispasr --backend tiron -m tiron-q4_k.bin -f meeting.wav
```
Add **meeting-level speaker labels** (`SPEAKER_00`, `SPEAKER_01`, …) by turning on
diarization, which clusters voiceprints across windows:
```bash
crispasr --backend tiron -m tiron-q4_k.bin -f meeting.wav --diarize
```
## How it works
- **Constrained decode.** Not plain greedy (which loses ~5 cpWER) β€” a port of the
upstream harness's grammar: step 0 forces `<|speaker1|>`/`<|nospeech|>`; a
speaker tag forces an opening timestamp; text runs to a closing timestamp; a
closing timestamp then allows EOS, another opening timestamp (same speaker
continues), or the next speaker slot. `no_repeat_ngram_size=15`. Per-speaker
timelines are non-monotonic, so whisper's "timestamps must increase" seek rule
is disabled for the speaker vocabulary.
- **Windowing.** A 0.75 s onset pad, fixed **non-overlapping 30 s windows**, and an
RMS silent-window gate β€” driven exactly as the reference `engine.py`.
- **Diarization (`--diarize`).** CrispASR promotes the window-local indices to
stable meeting-level `SPEAKER_NN` identities by clustering per-`(window,
local-speaker)` voiceprints (TitaNet / ECAPA embeddings + agglomerative cosine),
with a within-window must-link "spine". This is speaker **diarization** β€”
grouping speakers *within a recording* β€” not identification against any external
roster or database.
## Validation
The CrispASR C++ decode was validated **byte-exact** against the Python reference
(`tools/reference_backends/tiron.py`) on the F16 model β€” identical token streams
per window β€” and the q4_k output matches at 1.000 decoded-word overlap.
## Attribution & license
- **Base model:** [`Trelis/tiron`](https://huggingface.co/Trelis/tiron) β€” Apache-2.0.
- **Reference harness:** [`TrelisResearch/tiron`](https://github.com/TrelisResearch/tiron) β€” Apache-2.0.
- **This conversion:** Apache-2.0. These are quantized GGML re-encodings of the
Trelis weights for the whisper.cpp/CrispASR runtime; all credit for the model
goes to Trelis Research. See the base model card for training data and details.
## Limitations
- English meeting audio; up to **8 concurrent speaker slots** per 30 s window.
- Requires a CrispASR build with tiron decode support; incompatible with stock
whisper.cpp.
- Window-local speaker indices are only promoted to consistent identities when
`--diarize` is enabled; without it, treat `<|speakerN|>` as window-scoped.