Repository navigation
fr Post Processing Overview
π Langue : English | FranΓ§ais
La sortie ASR brute est rarement parfaite. dictée exécute un pipeline configurable qui corrige les erreurs de reconnaissance courantes, applique les règles utilisateur, convertit les nombres et dates, invoque optionnellement un LLM pour un polissage de fluidité, et finalement saisit le résultat dans l'application active.
Chaque Γ©tape est configurable via l'onglet Post-traitement de l'assistant de configuration, et peut Γͺtre testΓ©e en direct via le panneau de test intΓ©grΓ© sans lancer de dictΓ©e rΓ©elle. Cette page donne une vue Γ vol d'oiseau ; des pages dΓ©diΓ©es couvrent chaque sous-systΓ¨me majeur (Rules-and-Dictionary, LLM-Correction, Numbers-Dates-Continuation).
- Diagramme du pipeline
- Les Γ©tapes en dΓ©tail
- Panneau de test en direct
- Activer / dΓ©sactiver les Γ©tapes
- Jeux de règles par langue
- Bypass diarisation
- OΓΉ tourne le post-traitement
- Budget performance
Β βΒ
Β βΒ
Β βΒ
Signification : π micro (entrΓ©e audio) β ASR (transcription) β π€ traduction optionnelle β βοΈ texte final saisi dans l'application active. Les Γ©tapes de post-traitement (dΓ©taillΓ©es plus bas) s'intercalent entre l'ASR et le texte final. C'est exactement le mΓͺme jeu d'icΓ΄nes que la visualisation en haut de l'onglet Post-traitement dans dictee-setup.
ββββββββββββββββββββββββββββββββββββ
β Sortie ASR (texte brut + lang) β
βββββββββββββββββ¬βββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββββββ
β 1. RΓ¨gles regex (rules.conf) β
β β’ variantes ASR β
β β’ annotations non-parole β
β β’ hΓ©sitations (euh, umβ¦) β
β β’ commandes vocales β
β β’ dedup, ponctuation, cleanup β
βββββββββββββββββ¬βββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββββββ
β 2. Rejet langue incorrecte β
β (abort si script β langue) β
βββββββββββββββββ¬βββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββββββ
β 3. Continuation (fusion tampon) β
βββββββββββββββββ¬βββββββββββββββββββ
β
βββββββββ΄ββββββββ
β LLM on ? β β positions : first / hybrid / last
βββββββββ¬ββββββββ
β
ββββββββββββββββββββββββββββββββββββ
β 4. RΓ¨gles linguistiques β
β Γ©lisions fr/it, allemand, β
β portugais, nΓ©erlandais, β
β roumain, typographie fr β
βββββββββββββββββ¬βββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββββββ
β 5. Nombres & dates β chiffres β
βββββββββββββββββ¬βββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββββββ
β 6. Dictionnaire (match exact) β
βββββββββββββββββ¬βββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββββββ
β 7. Capitalisation β
βββββββββββββββββ¬βββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββββββ
β 8. Short-text keepcaps β
βββββββββββββββββ¬βββββββββββββββββββ
β
βββββββββ΄ββββββββ
β Traduire ? β
ββββ¬ββββββββββ¬βββ
oui non
β β
ββββββββββββββββββββββββββββ
β 9. Traduction + TRPP β
β (mΓͺmes Γ©tapes 1-8 sur β
β le texte traduit) β
βββββββββββββββββ¬βββββββββββ
β
ββββββββββββββββββββββββββββββββββββ
β 10. Saisie dans l'application β
β (dotool type par dΓ©faut) β
ββββββββββββββββββββββββββββββββββββ
Quoi : un bloc monolithique de regex qui couvre plusieurs transformations :
-
Variantes ASR β mappe les variantes textuelles produites par diffΓ©rents backends vers une forme canonique (
(?i)\b(cant|can not|can't)\b β can't). -
Annotations non-parole β nettoie les marqueurs Whisper/Parakeet (
(rires),[musique],<unk>). -
HΓ©sitations β supprime les tics (franΓ§ais
euh, anglaisuh/um, allemandΓ€h, etc.). -
Commandes vocales β convertit les Γ©noncΓ©s en symboles (Β« Γ la ligne Β» β
\n, Β« virgule Β» β,). - Dedup / ponctuation / cleanup β espaces multiples, ponctuation orpheline en tΓͺte de phrase.
Config : rules.conf (système) et ~/.config/dictee/rules.conf (utilisateur). Voir Rules-and-Dictionary. 7 langues à ~50 règles chacune livrées par défaut.
Quoi : si la langue dΓ©clarΓ©e est latine (fr/en/de/esβ¦) mais que le texte contient plus de 50 % de Cyrillique, ou l'inverse, la transcription est rejetΓ©e silencieusement. EmpΓͺche une mauvaise dΓ©tection de langue (frΓ©quente sur dictΓ©e trΓ¨s courte avec Parakeet) de coller un texte non-sens.
Pourquoi : plutôt qu'injecter du Cyrillique à la place d'un « oui » français, on préfère ne rien coller et laisser l'utilisateur recommencer.
Quoi : si la dictΓ©e commence par le mot dΓ©clencheur de continuation (franΓ§ais minuscule, anglais continue, etc.), fusionne avec le tampon de dernier-mot de la dictΓ©e prΓ©cΓ©dente pour continuer la phrase sans capitalisation intempestive.
Pourquoi : les modèles ASR ne voient pas le contexte entre enregistrements séparés. La continuation permet de faire une pause en milieu de phrase et de reprendre naturellement.
Config : mot dΓ©clencheur par langue dans rules.conf. Tampon persistΓ© dans /dev/shm/.dictee_last_word.
DΓ©tails : Numbers-Dates-Continuation#tampon-de-continuation.
Quoi : transformations spΓ©cifiques Γ la langue qui ne tiennent pas dans des regex simples :
-
FranΓ§ais : Γ©lisions (
de leβdu,je aiβj'ai), typographie (espace insΓ©cable avant:;?!) -
Italien : Γ©lisions (
lo amicoβl'amico) -
Espagnol :
ΒΏβ¦?Β‘β¦!en dΓ©but de question/exclamation - Portugais / allemand / nΓ©erlandais / roumain : contractions et rΓ¨gles propres Γ chaque langue
Config : toggles individuels dans l'onglet Post-traitement β Language rules.
Quoi : nombres parlΓ©s β chiffres. Β« vingt-trois Β» β 23, Β« one point three Β» β 1.3, Β« quatorze heures trente Β» β 14 h 30.
Pourquoi : la plupart des applications attendent des chiffres dans les champs. La conversion est consciente de la langue (virgule dΓ©cimale en franΓ§ais, point en anglais).
Config : toggle via wizard. ImplΓ©mentation dans dictee-postprocess (utilise text2num).
DΓ©tails : Numbers-Dates-Continuation.
Quoi : substitutions littΓ©rales mot-Γ -mot, match exact sur les frontiΓ¨res de mot, prΓ©serve la casse. Exemple : api β API, chat gpt β ChatGPT.
Pourquoi : les modèles ASR se trompent sur les termes spécifiques au domaine (noms de collègues, noms de code produits, acronymes GPT/SDK/API). Le dictionnaire corrige mot par mot ce que les regex ne couvrent pas.
Config : dictionary.conf. Voir Rules-and-Dictionary.
Quoi : capitalise la première lettre de la sortie. Optionnel : capitalise après . ! ? de fin de phrase.
Pourquoi : Parakeet-TDT produit la capitalisation native, mais les autres backends (Vosk surtout) ne le font pas. Cette Γ©tape normalise.
Config : toggle wizard.
Quoi : sur les dictΓ©es de moins de 3 mots (configurable), deux choses :
- Retire la ponctuation finale automatique (pas de point sur Β« oui Β» isolΓ©)
- Conserve la casse utilisateur β permet de dicter une correction sans que la capitalisation finale la transforme
Une liste d'exceptions keepcaps (configurable par langue) empΓͺche aussi la mise en minuscules de termes comme GPT-4 ou SDK quelle que soit la longueur de la phrase.
Config : toggle wizard + seuil de mots + dialogue Β« Exceptions keepcaps Β» par langue.
Quoi : si --translate a Γ©tΓ© utilisΓ©, envoie le texte entiΓ¨rement post-traitΓ© au backend de traduction choisi, puis relance les Γ©tapes 1 Γ 8 (avec les rΓ¨gles pp_translate_* dΓ©diΓ©es) sur le texte traduit β ce sous-pipeline s'appelle TRPP.
Pourquoi : aprΓ¨s post-traitement, le texte source est plus propre β la qualitΓ© de traduction est meilleure. Et le texte traduit bΓ©nΓ©ficie des mΓͺmes corrections (dictionnaire, capitalisation, keepcaps) dans la langue cible.
Config : flag dictee --translate + choix du backend de traduction + bloc TRPP sΓ©parΓ© dans l'onglet Post-traitement.
Quoi : simule l'entrΓ©e clavier via dotool pour taper le texte final dans l'application active.
Pourquoi : fonctionne avec n'importe quelle application, n'importe quel WM, n'importe quel champ de saisie β pas besoin de copier/coller via presse-papiers (bien que le paste clipboard soit une route alternative).
Config : rΓ©glage Β« MΓ©thode de collage Β» du wizard. DΓ©faut : dotool type.
La correction LLM (Ollama) peut s'insΓ©rer Γ trois positions au choix dans le pipeline :
- first β juste aprΓ¨s la sortie ASR brute, avant toutes les rΓ¨gles dΓ©terministes
- hybrid β aprΓ¨s les Γ©tapes 1-3 (rΓ¨gles + continuation), avant les rΓ¨gles linguistiques
- last β tout Γ la fin, aprΓ¨s short-text keepcaps
Le LLM polit l'orthographe, la ponctuation, la grammaire et la fluidité sans changer le sens. Il rattrape des erreurs que les règles regex ne peuvent pas exprimer (accord sujet-verbe, accents manquants, homophones contextuels).
Config : toggle wizard + sΓ©lecteur de position. DΓ©tails : LLM-Correction.
L'onglet Post-traitement de l'assistant de configuration inclut un panneau de test oΓΉ vous pouvez :
- Coller n'importe quel texte ASR brut
- Voir comment il se transforme Γ chaque Γ©tape
- Surligner la règle qui a matché (index de règle cliquable)
- Tweaker les règles et voir l'effet instantanément (pas de dictée nécessaire)
Le panneau supporte 3 modes :
- Texte unique : tapez une ligne, voir la sortie
- Live config : éditez des règles dans un onglet, voyez l'effet dans un autre
- Fichier WAV : chargez un vrai fichier audio, voyez le pipeline complet (ASR β post-traitement β sortie)
Captures d'Γ©cran dans le README du projet.
Toutes les Γ©tapes sont individuellement basculables depuis l'assistant de configuration. Cas utiles :
- Mode diarisation : le pipeline est entièrement contourné (voir ci-dessous)
- DΓ©boguer une Γ©tape spΓ©cifique : dΓ©sactivez tout le reste pour isoler
- Mode faible latence : dΓ©sactivez la correction LLM (Γ©conomise 2β3 s sur chaque dictΓ©e)
L'Γ©tat runtime est stockΓ© dans ~/.config/dictee/dictee.conf. Chaque Γ©tape a une variable d'env DICTEE_PP_* correspondante que vous pouvez override pour tester :
DICTEE_PP_LLM=0 dictee # dictée one-shot sans LLMLes règles et le dictionnaire sont séparés par langue :
/usr/share/dictee/rules/
βββ rules-en.conf
βββ rules-fr.conf # install par dΓ©faut inclut un ensemble curΓ©
βββ rules-de.conf
βββ rules-es.conf
βββ rules-it.conf
βββ rules-pt.conf
βββ rules-uk.conf
Les personnalisations utilisateur vivent dans :
~/.config/dictee/
βββ rules.conf # overrides (fusionnΓ©s au-dessus des rΓ¨gles systΓ¨me)
βββ dictionary.conf
Voir Rules-and-Dictionary.
Quand la diarisation est activΓ©e (mode Meeting), tout le pipeline de post-traitement est contournΓ© par design :
- Les labels de locuteurs (
Speaker 1 :,Speaker 2 :) doivent Γͺtre prΓ©servΓ©s tels quels - Les frontiΓ¨res inter-locuteurs seraient cassΓ©es par les rΓ¨gles regex ou le reflow LLM
- La traduction d'une transcription multi-locuteurs produit une sortie incohΓ©rente
Seul un formatage minimal est appliqué (nettoyage d'espaces, préfixe de locuteur). Pour une transcription de réunion nécessitant des corrections, faites-la passer dans le panneau de test manuellement après coup.
Le pipeline est implΓ©mentΓ© dans pkg/dictee/usr/bin/dictee-postprocess (Python, indΓ©pendant de PyQt6). Il est invoquΓ© par :
- Le script shell principal
dictee(Γ©tape 3 demain()) - Le panneau de test de
dictee-setup - CLI directe :
echo "texte brut" | dictee-postprocess --lang fr --llm-position first
L'exΓ©cution du pipeline est sΓ©quentielle, pas parallΓ¨le. Le pipeline tourne en ~50β80 ms sans LLM, 2β3 s avec LLM.
RΓ©partition typique de latence pour une dictΓ©e franΓ§aise de 5 secondes avec post-traitement complet + LLM + traduction :
| Γtape | Temps |
|---|---|
| 1β4. Variantes + dict + nombres + continuation | ~15 ms |
| 5. Règles regex (pré-LLM) | ~5 ms |
| 6. Correction LLM (Ollama Gemma 3 4B, GPU) | ~2,5 s |
| 7. Règles regex (post-LLM) | ~5 ms |
| 8. Short-text keepcaps | ~2 ms |
| 9. Correspondance Γ©tendue | ~5 ms |
| 10. Capitalisation finale | ~1 ms |
| 11. Traduction (Google) | ~0,5 s |
| 12. Collage via dotool | ~50 ms |
| Total post-traitement | ~3,1 s |
Sans LLM + traduction : ~80 ms. Le LLM est de loin l'Γ©tape la plus coΓ»teuse.
- Rules-and-Dictionary β syntaxe regex, dictionnaire, variantes, 7 langues
- LLM-Correction β tuning position first/last/hybrid
- Numbers-Dates-Continuation β conversion nombres, tampon continuation, mots dΓ©clencheurs
- Translation β backends de traduction comparΓ©s
- Diarization β pourquoi le post-traitement est contournΓ© en mode rΓ©union
π¬π§ Home Β· π«π· Accueil
Getting started / Premiers pas
- Installation Β· π¬π§ Β· π«π·
- Setup-Wizard Β· π¬π§ Β· π«π·
- Configuration Β· π¬π§ Β· π«π·
- Plasmoid-Widget Β· π¬π§ Β· π«π·
- Tray-Icon Β· π¬π§ Β· π«π·
- Keyboard-Shortcuts Β· π¬π§ Β· π«π·
- Voice-Commands Β· π¬π§ Β· π«π·
- GPU-Setup Β· π¬π§ Β· π«π·
- Diarization Β· π¬π§ Β· π«π·
- LLM-Diarization Β· π¬π§ Β· π«π·
Speech recognition / ASR
- ASR-Backends Β· π¬π§ Β· π«π·
- Parakeet-TDT-Deep-Dive Β· π¬π§ Β· π«π·
- Canary-1B-Deep-Dive Β· π¬π§ Β· π«π·
Translation / Traduction
Post-processing / Post-traitement
- Overview Β· π¬π§ Β· π«π·
- Rules-and-Dictionary Β· π¬π§ Β· π«π·
- LLM-Correction Β· π¬π§ Β· π«π·
- Numbers-Dates-Continuation Β· π¬π§ Β· π«π·
CLI
Reference / RΓ©fΓ©rence
- Troubleshooting Β· π¬π§ Β· π«π·
- FAQ Β· π¬π§ Β· π«π·
- Developer-Guide Β· π¬π§ Β· π«π·
- Changelog Β· π¬π§ Β· π«π·
π Repo Β· π¦ Releases Β· π Issues