-
Notifications
You must be signed in to change notification settings - Fork 2
fr dev Diarization
🌐 Langue : English | Français
Intro utilisateur : fr-Diarization.
Sortformer de NVIDIA (ONNX), diarisation neuronale end-to-end mono-transformer. Streame nativement par chunks de 10 s avec overlap. Plafonné dur à 4 locuteurs (propriété du modèle, pas un paramètre). Agnostique à la langue. Implémentation Rust dans src/sortformer.rs via ONNX Runtime ; backend CUDA avec fallback CPU silencieux (diarize_only.rs:122-128) — 5–10× plus lent en CPU.
| Durée audio | Pic VRAM |
|---|---|
| 1 min … 10 h | ~1,2 GB (constant) |
Pas de limite de durée effective ; la mémoire est bornée par la taille du chunk.
Le transcribe-diarize mono-coup fait tourner Parakeet sur le mel complet en une passe → Parakeet seul heurte un plafond dur ~5:20 min sur tout GPU à cause d'un attention-mask à shape fixe dans l'export ONNX du Parakeet-TDT v3 (indépendant de la VRAM). Le pipeline chunked transcribe-diarize-batch garde chaque chunk sous 320 s et lève le plafond. Depuis v1.3.4, l'interface dictee-transcribe route automatiquement tout fichier plus long qu'un chunk par lui, quel que soit le paquet GPU ou l'état du toggle diarize.
Pipeline :
- Sortformer une fois sur l'audio complet (streaming, sans cap)
- Chunk l'audio en segments de 10 min avec overlap, via
ffmpeg - Parakeet-TDT par chunk (
transcribe-diarize-batch --no-diarize) - Fusion des labels via les timestamps globaux Sortformer (argmax overlap)
Validations terrain :
- Keynote 29 min, CUDA 8 GB → 04:56
- Keynote 54 min, 3 locuteurs, RTX 4070 (8 GB) → 122 s, 94 % de précision vs ground truth
Edge cases :
- 4 GB VRAM, ou 8 GB avec Ollama déjà chargé → Parakeet OOM (pas encore de garde min-VRAM)
- Token tombant dans un silence entre deux segments globaux Sortformer → tagué
UNKNOWN: <texte>(prévisible, non bloquant)
| Binaire | Usage | Backend ASR | Streaming | Durée max |
|---|---|---|---|---|
transcribe-diarize |
Fichier, mono-coup | Parakeet-TDT | ❌ | ~5:20 min (bug attention-mask ONNX, tout GPU) |
transcribe-stream-diarize |
Fichier, streaming | Nemotron (EN) | ✅ | illimité |
transcribe-diarize-batch |
Fichier, chunked | Parakeet-TDT | ⚠ chunked | illimité |
transcribe-diarize meeting.wav \
--sortformer-model /usr/share/dictee/sortformer/ \
--parakeet-model /usr/share/dictee/tdt/ \
--lang frSortie sur stdout.
Format texte par défaut, ligne par locuteur :
Speaker 1: Bonjour à tous, on commence la revue trimestrielle.
Speaker 2: Merci, on attaque par les chiffres ?
Speaker 3: Question rapide — l'appel est enregistré ?
Flags CLI :
-
--format=rttm— IDs locuteurs frame-level (format diarisation standard) -
--format=json— timestamps + IDs + confidence -
--format=srt— sous-titres avec timestamps
Utilisé par transcribe-diarize-batch :
- Sortformer une fois sur l'audio complet → timestamps globaux
- Chunk l'audio (10 min, 10 s d'overlap)
- Parakeet-TDT par chunk → timestamps token-level
- Pour chaque mot transcrit, lookup son locuteur global via la sortie Sortformer (argmax overlap)
- Emit avec labels
Speaker Ncohérents
Source : src/bin/transcribe_diarize_batch.rs.
Le mode Meeting saute entièrement le pipeline en 12 étapes :
| Étape | Pourquoi ça casserait la diarisation |
|---|---|
| 5/7. Règles regex | Commandes vocales insérées dans le mauvais tour |
| 6. Correction LLM | Reflow du texte, fusion des tours en monologue |
| 8/9. Keepcaps | Gestion d'acronymes par phrase, pas par locuteur |
| 10. Capitalisation | Conflit début-de-phrase / début-de-tour |
| 11. Traduction | Traduction multi-locuteurs rarement cohérente |
Seuls le nettoyage d'espaces, l'insertion du préfixe locuteur et le \n final sont conservés.
Pour une sortie polie, voir Analyse LLM de la diarisation — conçue spécifiquement pour ce cas.
flowchart TB
A["🎙 Audio (N locuteurs)"] --> B["Sortformer<br/>(streaming, chunks 10s)"]
B --> C1["Timestamps locuteur 1"]
B --> C2["Timestamps locuteur 2"]
B --> C3["Timestamps locuteur 3"]
B --> C4["Timestamps locuteur 4"]
C1 --> D["Parakeet-TDT<br/>(transcription)"]
C2 --> D
C3 --> D
C4 --> D
D --> E["Fusion par timestamps<br/>(argmax overlap)"]
E --> F["Speaker 1: texte<br/>Speaker 2: texte<br/>Speaker 3: texte"]
- fr-Parakeet-TDT-Deep-Dive#vram-usage--duration-limits — contexte VRAM
- fr-Post-Processing-Overview#diarization-bypass — rationale complet du bypass
- fr-CLI-Reference#transcribe-diarize — flags exhaustifs
- fr-Troubleshooting — soucis spécifiques diarisation
Getting started / Premiers pas
- Installation · 🇬🇧 · 🇫🇷
- Setup-Wizard · 🇬🇧 · 🇫🇷
- Configuration · 🇬🇧 · 🇫🇷
- Plasmoid-Widget · 🇬🇧 · 🇫🇷
- Tray-Icon · 🇬🇧 · 🇫🇷
- Keyboard-Shortcuts · 🇬🇧 · 🇫🇷
- Voice-Commands · 🇬🇧 · 🇫🇷
- GPU-Setup · 🇬🇧 · 🇫🇷
- Diarization · 🇬🇧 · 🇫🇷
- LLM-Diarization · 🇬🇧 · 🇫🇷
Speech recognition / ASR
Translation / Traduction
Post-processing / Post-traitement
- Overview · 🇬🇧 · 🇫🇷
- Rules-and-Dictionary · 🇬🇧 · 🇫🇷
- LLM-Correction · 🇬🇧 · 🇫🇷
- Numbers-Dates-Continuation · 🇬🇧 · 🇫🇷
CLI
Reference / Référence
🏠 Repo · 📦 Releases · 🐛 Issues