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