RonanMcGovern commited on
Commit
90bc0a4
·
verified ·
1 Parent(s): aed145c

Tiron update 23 July 2026: v2 weights (small performance gains) + expanded benchmarks (MOSS, AssemblyAI u3.5-pro), published eval set + replication scripts, measurement-uncertainty notes

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ tiron_benchmark.png filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -16,44 +16,60 @@ language:
16
 
17
  # Tiron
18
 
19
- *Released 21 July 2026.*
20
 
21
- > Watch the launch video [here](https://youtu.be/pAOYxvSNNt0). Try via API [here](https://router.trelis.com/models).
22
 
23
- Tiron is a state-of-the-art multi-speaker meeting transcription model. It jointly transcribes **and** attributes speech to speakers in a single decoding pass: for each 30-second audio window it emits an inline transcript with `<|speakerN|>` turn markers (up to 8 speakers per window) and `<|t.tt|>` timestamps.
24
 
25
  Tiron uses the Whisper large-v3 architecture with an extended token vocabulary (`<|speaker1|>` … `<|speaker8|>`, `<|nospeech|>`). It is a drop-in `WhisperForConditionalGeneration` checkpoint.
26
 
27
- Tiron is state of the art for whole-meeting transcription among systems that reliably transcribe entire meetings, it leads every test set we evaluated (see [Benchmarks](#benchmarks)).
28
 
29
  For **whole meetings** (beyond a single 30s window), use the open-source harness at [TrelisResearch/tiron](https://github.com/TrelisResearch/tiron), which adds chunking, cross-window speaker linking (ECAPA voice embeddings), and SRT/VTT/JSON output.
30
 
 
 
 
 
 
 
31
  ## Benchmarks
32
 
33
- Tiron is state of the art for whole-meeting transcription: among systems that can reliably transcribe an entire meeting end to end, it leads every test set we evaluated.
 
 
34
 
35
- The closest such rival is AssemblyAI `universal-3-pro` (in its best diarized configuration), so we report the head-to-head against it below. Google's Gemini Pro is a strong short-clip transcriber — competitive with Tiron on short (~6 min) meetings — but degrades sharply on longer audio, truncating or failing outright on the longer ICSI and NOTSOFAR meetings, so it cannot be scored across full meeting corpora.
 
 
 
 
 
36
 
37
- Pooled corpus cpWER (lower is better) on held-out meeting test sets, scored with identical references and normalization for every system:
38
 
39
- ![Tiron vs AssemblyAI universal-3-pro pooled cpWER across AMI, ICSI, and NOTSOFAR-1 (lower is better)](tiron_benchmark.png)
40
 
41
- | Test set | AssemblyAI universal-3-pro | **Tiron** | Δ |
42
- |---|---:|---:|---:|
43
- | AMI (4 meetings) | 39.49 | **35.24** | −4.3 pts (−11%) |
44
- | ICSI (3 meetings) | 34.64 | **20.91** | −13.7 pts (−40%) |
45
- | NOTSOFAR-1 (10 meetings) | 38.62 | **37.55** | −1.1 pts (−3%) |
46
- | **Macro (mean of corpora)** | 37.58 | **31.23** | **−6.4 pts (−17%)** |
47
 
48
- Meetings evaluated (whole-meeting audio, far-field where applicable):
 
 
 
49
 
50
- - **AMI**: `ES2004a`, `IS1009a`, `TS3003a`, `EN2002a`
51
- - **ICSI**: `Bmr013`, `Bmr018`, `Bro021`
52
- - **NOTSOFAR-1**: `MTG_32040`, `MTG_32063`, `MTG_32072`, `MTG_32074`, `MTG_32092`, `MTG_32179`, `MTG_32185`, `MTG_32256`, `MTG_32257`, `MTG_32322`
 
 
 
 
 
53
 
54
  Scoring notes: cpWER is concatenated-permutation WER over whole meetings (transcription and speaker-attribution errors both count). Each corpus figure is **pooled** — total errors ÷ total reference words across that corpus's meetings — and the macro is the mean of the three corpus figures. On NOTSOFAR-1, stretches the human annotators marked `<UNKNOWN/>` (unintelligible) are masked from both hypothesis and reference for every system, so no system is rewarded for staying silent there. AMI and ICSI are unaffected by this mask.
55
 
56
- Numbers are from a single decoding run. Tiron's speaker-count estimation has run-to-run variance, so an individual meeting's cpWER can move by a point or two between runs (occasionally more on a hard meeting); corpus figures are correspondingly stable to about ±1 point. Expect small differences when reproducing.
57
 
58
  ## Output format
59
 
@@ -64,7 +80,6 @@ Per 30-second window the model emits speaker blocks with within-window timestamp
64
  ```
65
 
66
  Speaker indices are **local to the window** (first speaker to talk is `<|speaker1|>`). The harness links speakers across windows into stable meeting-level identities using ECAPA voice embeddings.
67
-
68
  ## Usage with transformers (single window, ≤30s)
69
 
70
  ```python
 
16
 
17
  # Tiron
18
 
19
+ *Released 21 July 2026. Updated 23 July 2026.*
20
 
21
+ > Watch the original launch video [here](https://youtu.be/pAOYxvSNNt0). Try via API [here](https://router.trelis.com/models).
22
 
23
+ Tiron is an open-weights multi-speaker meeting transcription model. It jointly transcribes **and** attributes speech to speakers in a single decoding pass: for each 30-second audio window it emits an inline transcript with `<|speakerN|>` turn markers (up to 8 speakers per window) and `<|t.tt|>` timestamps.
24
 
25
  Tiron uses the Whisper large-v3 architecture with an extended token vocabulary (`<|speaker1|>` … `<|speaker8|>`, `<|nospeech|>`). It is a drop-in `WhisperForConditionalGeneration` checkpoint.
26
 
27
+ On whole-meeting benchmarks, Tiron outperforms leading commercial transcription APIs on every test set we evaluated, and trades leads with the best open research models. Tiron runs at ~43× real-time on a single GPU in 3–12 GB of VRAM, decoding chunks in parallel (see [Benchmarks](#benchmarks)).
28
 
29
  For **whole meetings** (beyond a single 30s window), use the open-source harness at [TrelisResearch/tiron](https://github.com/TrelisResearch/tiron), which adds chunking, cross-window speaker linking (ECAPA voice embeddings), and SRT/VTT/JSON output.
30
 
31
+ ## What's new (23 July 2026)
32
+
33
+ - **Updated checkpoint** with small performance gains (NOTSOFAR-1 37.55 → **36.23** pooled cpWER, AMI 35.24 → **34.68**; the 21 July release's numbers are kept in the table for comparison).
34
+ - **Expanded benchmarking**: added MOSS-Transcribe-Diarize and AssemblyAI `universal-3.5-pro` under the identical scoring harness.
35
+ - **Reproducibility**: the exact evaluation meetings are published with attribution, and minimal replication scripts live in the [harness repo](https://github.com/TrelisResearch/tiron) (links below).
36
+
37
  ## Benchmarks
38
 
39
+ Pooled corpus cpWER (lower is better) on held-out whole-meeting test sets, scored with identical references, normalization, and `<UNKNOWN/>` masking for every system:
40
+
41
+ ![Tiron vs MOSS and AssemblyAI — pooled cpWER across AMI, ICSI, and NOTSOFAR-1 (lower is better)](tiron_benchmark.png)
42
 
43
+ | Test set | AssemblyAI u3-pro | AssemblyAI u3.5-pro | MOSS-TD 0.9B | **Tiron** | Tiron (21 Jul) |
44
+ |---|---:|---:|---:|---:|---:|
45
+ | AMI (4 meetings) | 39.49 | 39.29 | **28.61** | 34.68 | 35.24 |
46
+ | ICSI (3 meetings) | 34.64 | 30.50 | 21.84 | 21.24 | **20.91** |
47
+ | NOTSOFAR-1 (10 meetings) | 39.55 | 39.14 | **25.86** | 36.23 | 37.55 |
48
+ | **Macro (mean of corpora)** | 37.89 | 36.31 | **25.44** | 30.71 | 31.23 |
49
 
50
+ Tiron leads both AssemblyAI models on every corpus (−19% macro vs `universal-3-pro`, −15% vs `universal-3.5-pro`). [MOSS-Transcribe-Diarize](https://huggingface.co/OpenMOSS-Team/MOSS-Transcribe-Diarize) (Apache-2.0, ~2.5B incl. encoder) decodes the whole meeting in a single 128k context — it leads on AMI and NOTSOFAR-1, and the two are effectively tied on ICSI. Google Gemini 3.1 Pro is competitive on short clips but truncates or fails on longer meetings and cannot be scored across full corpora.
51
 
52
+ *MOSS numbers use a quality-preserving vLLM decode configuration. We found MOSS's scores are sensitive to serving configuration (an aggressive speed-oriented vLLM config cost it several points on NOTSOFAR-1), so we report its best-quality vLLM decode here.*
53
 
54
+ **Speed** real-time, whole-meeting inference over all 17 meetings; median [range]). Each system's speed is measured in the same configuration as its accuracy numbers above:
 
 
 
 
 
55
 
56
+ | System | ×RT median [range] | Notes |
57
+ |---|---|---|
58
+ | **Tiron** | **43× [8×–76×]** | single GPU, chunk-parallel, 3–12 GB VRAM |
59
+ | MOSS-TD (vLLM) | 3× [1×–8×] quality decode · ~41× speed-oriented | whole-meeting 128k context; accuracy above is the quality decode |
60
 
61
+ Tiron is chunk-based, so a meeting's 30-second windows decode in parallel on one GPU — that is where its speed comes from.
62
+ | AssemblyAI u3.5-pro | 34× [7×–94×] | cloud API round-trip (incl. upload/queue) |
63
+
64
+ Meetings evaluated (whole-meeting audio, far-field where applicable) — **published with references and attribution as [Trelis/tiron-eval-meetings](https://huggingface.co/datasets/Trelis/tiron-eval-meetings)**, with minimal replication scripts in [`eval/` of the harness repo](https://github.com/TrelisResearch/tiron/tree/main/eval):
65
+
66
+ - **[AMI](https://huggingface.co/datasets/Trelis/tiron-eval-meetings)** (CC BY 4.0, AMI consortium): `ES2004a`, `IS1009a`, `TS3003a`, `EN2002a`
67
+ - **[ICSI](https://huggingface.co/datasets/Trelis/tiron-eval-meetings)** (CC BY 4.0, ICSI): `Bmr013`, `Bmr018`, `Bro021`
68
+ - **[NOTSOFAR-1](https://huggingface.co/datasets/Trelis/tiron-eval-meetings)** (CC BY 4.0, Microsoft): `MTG_32040`, `MTG_32063`, `MTG_32072`, `MTG_32074`, `MTG_32092`, `MTG_32179`, `MTG_32185`, `MTG_32256`, `MTG_32257`, `MTG_32322`
69
 
70
  Scoring notes: cpWER is concatenated-permutation WER over whole meetings (transcription and speaker-attribution errors both count). Each corpus figure is **pooled** — total errors ÷ total reference words across that corpus's meetings — and the macro is the mean of the three corpus figures. On NOTSOFAR-1, stretches the human annotators marked `<UNKNOWN/>` (unintelligible) are masked from both hypothesis and reference for every system, so no system is rewarded for staying silent there. AMI and ICSI are unaffected by this mask.
71
 
72
+ **Measurement uncertainty** whole-meeting cpWER on small corpora is a noisy instrument for *every* system, and all numbers here are single decoding runs. Individual meetings can move by a few points between runs (speaker-count estimation flips, and in single-context decoders one divergent token early in the decode can cascade across the meeting); serving configuration can shift some systems' corpus figures by several points (see the MOSS note above). Corpus figures should be read as ±1 point, and cross-system gaps under ~2 points as ties. Expect small differences when reproducing.
73
 
74
  ## Output format
75
 
 
80
  ```
81
 
82
  Speaker indices are **local to the window** (first speaker to talk is `<|speaker1|>`). The harness links speakers across windows into stable meeting-level identities using ECAPA voice embeddings.
 
83
  ## Usage with transformers (single window, ≤30s)
84
 
85
  ```python
generation_config.json CHANGED
@@ -48,6 +48,7 @@
48
  "bos_token_id": 50257,
49
  "decoder_start_token_id": 50258,
50
  "eos_token_id": 50257,
 
51
  "is_multilingual": true,
52
  "lang_to_id": {
53
  "<|af|>": 50327,
 
48
  "bos_token_id": 50257,
49
  "decoder_start_token_id": 50258,
50
  "eos_token_id": 50257,
51
+ "forced_decoder_ids": null,
52
  "is_multilingual": true,
53
  "lang_to_id": {
54
  "<|af|>": 50327,
model.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:921e078a8e89000ccb467c5f9bce8a46c9e484c52b63e3ddddaa571c34306a2e
3
  size 3087229512
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2e9f644c5eb633d3c387975cf38677d3ffe1a7b98830a735867865ec1bd519b5
3
  size 3087229512
preprocessor_config.json CHANGED
@@ -1,6 +1,5 @@
1
  {
2
  "chunk_length": 30,
3
- "dither": 0.0,
4
  "feature_extractor_type": "WhisperFeatureExtractor",
5
  "feature_size": 128,
6
  "hop_length": 160,
 
1
  {
2
  "chunk_length": 30,
 
3
  "feature_extractor_type": "WhisperFeatureExtractor",
4
  "feature_size": 128,
5
  "hop_length": 160,
special_tokens_map.json CHANGED
@@ -1,13 +1,61 @@
1
  {
2
  "additional_special_tokens": [
3
- "<|speaker1|>",
4
- "<|speaker2|>",
5
- "<|speaker3|>",
6
- "<|speaker4|>",
7
- "<|speaker5|>",
8
- "<|speaker6|>",
9
- "<|speaker7|>",
10
- "<|speaker8|>"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  ],
12
  "bos_token": {
13
  "content": "<|endoftext|>",
 
1
  {
2
  "additional_special_tokens": [
3
+ {
4
+ "content": "<|speaker1|>",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false
9
+ },
10
+ {
11
+ "content": "<|speaker2|>",
12
+ "lstrip": false,
13
+ "normalized": false,
14
+ "rstrip": false,
15
+ "single_word": false
16
+ },
17
+ {
18
+ "content": "<|speaker3|>",
19
+ "lstrip": false,
20
+ "normalized": false,
21
+ "rstrip": false,
22
+ "single_word": false
23
+ },
24
+ {
25
+ "content": "<|speaker4|>",
26
+ "lstrip": false,
27
+ "normalized": false,
28
+ "rstrip": false,
29
+ "single_word": false
30
+ },
31
+ {
32
+ "content": "<|speaker5|>",
33
+ "lstrip": false,
34
+ "normalized": false,
35
+ "rstrip": false,
36
+ "single_word": false
37
+ },
38
+ {
39
+ "content": "<|speaker6|>",
40
+ "lstrip": false,
41
+ "normalized": false,
42
+ "rstrip": false,
43
+ "single_word": false
44
+ },
45
+ {
46
+ "content": "<|speaker7|>",
47
+ "lstrip": false,
48
+ "normalized": false,
49
+ "rstrip": false,
50
+ "single_word": false
51
+ },
52
+ {
53
+ "content": "<|speaker8|>",
54
+ "lstrip": false,
55
+ "normalized": false,
56
+ "rstrip": false,
57
+ "single_word": false
58
+ }
59
  ],
60
  "bos_token": {
61
  "content": "<|endoftext|>",
tiron_benchmark.png CHANGED

Git LFS Details

  • SHA256: 5f88001412056d71700473c137968bd12774909ebb9afb3f3a6e6777e40d3dc4
  • Pointer size: 131 Bytes
  • Size of remote file: 115 kB
tokenizer_config.json CHANGED
@@ -12953,7 +12953,6 @@
12953
  "clean_up_tokenization_spaces": true,
12954
  "eos_token": "<|endoftext|>",
12955
  "errors": "replace",
12956
- "extra_special_tokens": {},
12957
  "is_local": false,
12958
  "local_files_only": false,
12959
  "model_max_length": 1000000000000000019884624838656,
 
12953
  "clean_up_tokenization_spaces": true,
12954
  "eos_token": "<|endoftext|>",
12955
  "errors": "replace",
 
12956
  "is_local": false,
12957
  "local_files_only": false,
12958
  "model_max_length": 1000000000000000019884624838656,
vocab.json CHANGED
The diff for this file is too large to render. See raw diff