Skip to content

fr LLM Correction

rcspam edited this page Apr 23, 2026 · 2 revisions

🌐 Langue : English | Français

Correction LLM

La correction LLM utilise une instance Ollama locale pour polir la sortie ASR concernant la fluidité, la ponctuation et la cohérence — des corrections que les règles et dictionnaire pattern-based ne peuvent pas facilement exprimer. Elle est optionnelle et désactivée par défaut.

dictée vous laisse choisir où tourne le LLM dans le pipeline en 12 étapes : first (avant les règles regex, ASR brut en entrée), last (après tout, polish final), ou hybrid (aux deux positions). Chaque position a des compromis différents sur qualité, latence et risque d'hallucination.

Onglet correction LLM : toggle, sélecteur de position, choix du modèle

Table des matières


Quand activer la correction LLM

Activer si :

  • Votre backend ASR a une ponctuation imparfaite (Vosk, vieux Whisper)
  • Vous dictez en plusieurs langues et voulez une qualité cohérente entre elles
  • Vous voulez une correction automatique d'accord sujet-verbe, accents (FR), accord de genre — choses que les règles ne peuvent pas attraper fiable ment
  • Vous acceptez +2–3 s de latence par dictée pour une meilleure sortie

Ne pas activer si :

  • Vous avez besoin d'une sortie déterministe (p. ex. dictées de code où l'orthographe doit être préservée)
  • Vous dictez des commandes ou du contenu technique (le LLM peut "corriger" la syntaxe valide)
  • Vous êtes sur un GPU à VRAM basse (le LLM rivalise avec l'ASR pour la mémoire)

Position

Le LLM peut se placer à une des trois positions du pipeline en 12 étapes :

Position first

Le LLM tourne à l'étape 6 — avant les règles regex post-LLM (étape 7).

Sortie ASR → [variantes+dict+nombres+continuation] → [règles pré-LLM]
  → 🔵 Correction LLM 🔵
  → [règles post-LLM] → [keepcaps] → [capitalisation] → [traduction] → coller

Quand utiliser :

  • Votre sortie ASR est bruitée (Vosk sans modèle de ponctuation)
  • Vous avez des règles regex qui dépendent d'un texte propre (p. ex. guillemets typographiques, espacement)
  • Vous voulez que le LLM voie les erreurs ASR brutes, pas un texte corrigé par règles

Compromis :

  • Le LLM peut "corriger" les patterns intentionnels produits par vos règles
  • Les règles regex en aval doivent gérer les variations de sortie LLM

Position last

Le LLM tourne à l'étape 6 aussi, mais les règles post-LLM (7) sont sautées. Équivalent à déplacer le LLM juste avant la capitalisation.

Sortie ASR → [variantes+dict+nombres+continuation] → [règles pré-LLM]
  → [règles post-LLM si LLM sauté]
  → 🟢 Correction LLM 🟢
  → [keepcaps] → [capitalisation] → [traduction] → coller

Quand utiliser :

  • Vous voulez que les règles tournent d'abord (comportement déterministe garanti)
  • Vous voulez que le LLM polisse ce que les règles n'ont pas attrapé
  • Vous avez peu de règles personnalisées et comptez sur le LLM pour le gros du travail

Compromis :

  • Le LLM voit un texte déjà traité, peut mal interpréter la ponctuation insérée par règles
  • Plus difficile à déboguer : si la sortie est fausse, est-ce la règle ou le LLM ?

Position hybrid

Le LLM tourne deux fois — aux positions first et last.

Sortie ASR → [variantes+dict+nombres+continuation] → [règles pré-LLM]
  → 🔵 Passe LLM 1 🔵
  → [règles post-LLM]
  → 🟢 Passe LLM 2 🟢
  → [keepcaps] → [capitalisation] → [traduction] → coller

Quand utiliser :

  • Vous voulez la qualité maximale et pouvez vous permettre 4–6 s de latence
  • Dictées complexes où à la fois l'ASR brut et le polish final bénéficient du LLM

Compromis :

  • 2× le coût de latence LLM
  • 2× le risque d'hallucination
  • Rendement décroissant par-dessus un simple LLM mono-passe

Prompt structuré

dictée envoie un prompt strict à Ollama pour minimiser les hallucinations :

You are a text editor. Correct the spelling, punctuation, grammar,
and fluency of the following transcribed speech. Keep the meaning
IDENTICAL. Do NOT rephrase, add content, or remove information.

Output ONLY the corrected text on ONE LINE. No explanations,
no quotes, no markdown, no prefixes.

Language: {lang}
Text: {raw_asr_output}

Le LLM est instruit d'être conservateur :

  • Pas de reformulation (préserver la voix du locuteur)
  • Pas d'ajout de contenu (ne pas inventer de faits)
  • Pas de suppression de contenu (ne pas omettre de mots)
  • Format de sortie strictement une ligne de texte

Si le LLM retourne une sortie malformée (plusieurs lignes, JSON, explications), dictée extrait la première ligne de contenu et supprime les guillemets. Si l'extraction échoue, la sortie ASR brute est utilisée (fallback gracieux).


Modèles recommandés

Identiques à Ollama-Setup, mais le point optimal pour la correction spécifiquement diffère de la traduction :

Modèle VRAM Latence Qualité correction Notes
gemma3:4b ⭐ défaut ~4 Go 2–3 s Excellente Meilleur équilibre, toutes langues
qwen2.5:3b ~3 Go 2 s Bonne pour EN Plus faible sur accents français
llama3.2:3b ~3 Go 2–3 s Bonne Peut sur-corriger la parole informelle
gemma3:12b ~10 Go 5–7 s Meilleure Saut de qualité notable
mistral:7b-instruct ~5 Go 3 s Bonne Peut halluciner sur entrée bruitée

Recommandation : commencer avec gemma3:4b et upgrader à gemma3:12b seulement si vous avez la VRAM et tenez aux gains marginaux de qualité.


Budget latence

Pour une dictée typique de 5 secondes avec correction LLM activée (Gemma 3 4B sur RTX 4070) :

Étape du pipeline Temps
Étapes 1–5 (variantes → règles pré-LLM) ~20 ms
Correction LLM (position first) ~2,5 s
Étapes 7–10 (règles post-LLM → capitalisation) ~15 ms
Étape 11 (traduction via Google, optionnelle) ~0,5 s
Étape 12 (coller via dotool) ~50 ms
Total avec LLM, sans traduction ~2,6 s
Total avec LLM + traduction ~3,1 s

Sans LLM : ~80 ms au total. Le LLM est de loin l'étape la plus coûteuse.

Pour les dictées rapides où vous ne voulez pas l'impact de 2,5 s, associez un second raccourci qui pose DICTEE_PP_LLM=0 :

# Associer Alt+F9 (ou équivalent) à
DICTEE_PP_LLM=0 dictee

Mitigation hallucinations

Les LLM peuvent halluciner, surtout sur :

  • Dictées très courtes (< 3 mots)
  • Audio ambigu (locuteur a baissé la voix, micro coupé)
  • Jargon technique (LLM "corrige" de vrais termes en mots communs)

Mitigations intégrées à dictée :

  1. Prompt strict — conservateur, format contraint (voir ci-dessus)
  2. Vérification de longueur — si la sortie LLM fait < 50 % ou > 200 % de la longueur d'entrée, retomber sur l'entrée
  3. Mode wrapper JSON (expérimental) — envelopper la sortie dans {"text": "..."} pour un parsing facilité
  4. Désactiver pour texte court — la correction LLM est automatiquement sautée si l'entrée fait < 4 mots (lié au seuil keepcaps)

Les utilisateurs peuvent ajuster le seuil :

# Sauter le LLM pour dictées < 10 mots
export DICTEE_LLM_MIN_WORDS=10

Comportement multi-langues

Le LLM est aware de la langue via la ligne Language: {lang} du prompt. Gemma 3 4B et Qwen 2.5 3B gèrent tous deux les 7 codes ISO 639-1 que dictée supporte (en, fr, de, es, it, pt, uk) correctement.

Pour les langues rares (scripts asiatiques, nordiques, etc.), votre backend ASR en supporte plus que le LLM. Dans ce cas, désactivez la correction LLM et reposez-vous sur règles + dictionnaire.

dictée passe la langue détectée par le backend ASR — pas besoin d'override manuel sauf si la détection ASR est fausse (voir Parakeet-TDT-Deep-Dive#fausse-détection-cyrillique).


Désactiver pour dictées sensibles

Les dictées contenant mots de passe, PII, données médicales ou secrets d'entreprise devraient contourner le LLM — même si Ollama tourne localement, vous pouvez avoir le logging activé ou partager votre instance Ollama sur le LAN.

Trois façons de désactiver pour une dictée spécifique :

  1. Variable d'environnement (one-off) :

    DICTEE_PP_LLM=0 dictee
  2. Second raccourci sans LLM (configuration recommandée) :

    • Associer F9 à dictee (avec LLM)
    • Associer Ctrl+F9 à DICTEE_PP_LLM=0 dictee (sans LLM)
  3. Toggle du wizard — désactiver le LLM globalement pour une session

Les trois laissent rules.conf et dictionary.conf intacts — seule l'étape 6 du pipeline est sautée.


Étapes suivantes

📖 dictee Wiki

🇬🇧 Home · 🇫🇷 Accueil


Getting started / Premiers pas

Speech recognition / ASR

Translation / Traduction

Post-processing / Post-traitement

CLI

Reference / Référence


🏠 Repo · 📦 Releases · 🐛 Issues

Clone this wiki locally