Une architecture cognitive de la double route.
OMEGA est né comme un moteur de pendu français — un banc d'essai exigeant pour une idée : une machine qui raisonne sur la langue (phonologie, orthographe, morphologie) plutôt qu'elle ne consulte un oracle. Le correcteur dys en est le débouché appliqué.
La doctrine : mesurer ou rejeter
Une seule règle gouverne le projet : rien n'est gardé sans mesure. Tout module est désactivé par défaut, et la base de référence reste byte-identique tant qu'un gain n'est pas prouvé. Les idées séduisantes qui ne tiennent pas à la mesure sont falsifiées et documentées — pas enterrées.
« Cognition > oracle » : la valeur est dans le raisonnement, pas dans la triche. La configuration de référence ne lit jamais le mot caché.
La décision n'est pas un argmax mais une jointe probabiliste : on marginalise sur les hypothèses latentes — Σφ P(φ|indice)·P(lettre|φ,contexte) — au lieu de parier sur la plus probable. On croise, on ne devine pas.
Le banc d'essai : le pendu
Deviner un mot français lettre par lettre, sous contrainte, est un test sévère de modèle de langue : il faut intégrer la structure orthographique, les voisins, la phonotactique. La configuration cheat-free intégrale (qui ne lit jamais le mot caché — ni ses lettres, ni son son : cohorte « board-dérivée ») atteint ≈ 97,3 % de parties gagnées en lexique ; le plafond oracle (qui, lui, triche) est à 98,7 %.
Plus sévère encore : le hors-lexique (mot jamais vu, façon Trexquant). Et ici on dit d'où vient le score, parce que c'est la thèse du projet — distinguer la cognition de la consultation statistique : la cognition seule ne généralise pas en sous-lexical (≈ 11 %), l'orthographe pure plafonne à ≈ 33 %. Ce qui porte le hors-lexique, c'est une voie d'agrégation n-gram — statistique mais cheat-free (structure positionnelle des lettres pré-calculée du lexique, jamais le mot caché) — à ~62 %, que le raisonnement gap-aware (plus proche voisin révélé) pousse à ≈ 64 % (stable sur 3 graines). Sur les mêmes mots, ce système bat un étalon n-gram naïf (46,7 %) de +17 points — c'est là qu'est la valeur ajoutée de la méthode — dans la bande des bons solveurs (65-68 %), dans un seul fichier HTML, sans entraînement ni GPU.
Quand OMEGA évolue
Au-delà de jouer, OMEGA peut se copier, varier et être sélectionné par le pendu lui-même : une boucle darwinienne sur un moteur cognitif. Il reconstruit son propre code de décision — la copie est vérifiée à l'octet près, et le pendu rejoue à l'identique — puis une variation le modifie, et la fitness du jeu garde le meilleur.
Deux pistes plus loin, désormais testées — et l'honnêteté prime sur l'effet :
- Travail de groupe (O1) — négatif, assumé. Faire coopérer plusieurs versions ne bat pas la meilleure seule : de vraies versions sont fortes et trop semblables (toutes ~97 % en lexique, désaccord ≤ 10 %), et le routage utile est déjà l'arbitrage interne du moteur. La coordination externe est subsumée par l'architecture.
- Mesure multi-usage (O2) — positif, et révélateur. Mesurer le seul pendu en lexique est aveugle : lexique et hors-lexique dissocient (un génome champion au pendu peut être catastrophique en généralisation). Et ça mène à une question de fond — juste en dessous.
Et si on l'enlève du français ? Le cœur est un compresseur.
La vraie question d'O2 : ce qui porte OMEGA hors-lexique, est-ce du français, ou un mécanisme général ? On a pointé son substrat (l'agrégation n-gram) sur du code — sans le lexique français — et mesuré la compression. Car prédire, c'est compresser (Shannon) : la compression dit en bits par caractère combien de structure un modèle capture.
| domaine | hasard | substrat n-gram | structure capturée |
|---|---|---|---|
| Français | 3,98 b/car | 2,97 b/car | −1,01 b |
| Code (identifiants, sans Lex4) | 4,17 b/car | 3,05 b/car | −1,12 b |
| Code brouillé (structure détruite) | 4,17 b/car | 4,41 b/car | +0,24 b — rien |
Il compresse le code aussi bien — un peu mieux même — que le français, et ne gagne rien quand on brouille la séquence. → le cœur transférable d'OMEGA est un compresseur de séquences structurées, domaine-agnostique : il marche partout où il y a de la structure, pas seulement en français. Puissant et général — mais c'est de la capture de structure, pas de la compréhension (ça, ce serait un LLM, un autre projet).
Mesuré de deux façons indépendantes, même verdict : reconstruction façon pendu (evo_o2_crossdomain.js) et compression en bits (evo_o2_compression.js).
Et le sens, alors ? On a tenté — et voici la frontière.
Un compresseur capture la forme, jamais le sens. Peut-on en ajouter un avant-goût ? On a essayé la sémantique distributionnelle (« le sens = la compagnie qu'un mot fréquente », Firth) pour désambiguïser des homophones — méthode Golding & Roth 1999 (prior × contexte, held-out, corpus UD réel). Le contexte aide — surtout les homophones grammaticaux (son/sont 55→88 %, ce/se 53→76 %, et/est 60→77 %). Mais la précision plafonne à 77-88 %.
Or le correcteur a une garde absolue : FP=0 — ne jamais souligner du juste. À 77-88 % de précision, il créerait trop de fausses alertes. On a balayé le seuil de confiance pour trouver un filet FP-safe :
| seuil de confiance | recall | précision |
|---|---|---|
| ≥ 0,90 | 56 % | 91 % |
| ≥ 0,99 | 27 % | 96 % |
| FP = 0 (conf > 0,9999) | 1,6 % | 100 % |
Pas de filet : pour atteindre FP=0, le recall s'effondre à 1,6 % — le signal « sens » est trop bruité pour passer le portier. Contraste mesuré : le levier lexical du genre (propre) passe FP=0 naturellement — il a été câblé (+6 pts de recall) ; le sens statistique, lui, est recalé. → la compréhension reste hors-doctrine (ce serait un LLM). OMEGA maîtrise la forme ; le sens est la frontière, assumée et chiffrée.
Nuance — et son revers (cross-check LanguageTool, 06/2026) : sur le held-out UD, les homophones lexicaux (père/paire, moi/mois) semblaient passer FP=0 (recall 18-62 %), là où les grammaticaux échouaient. Mais à l'épreuve du vrai texte, la garde casse : « il porte une paire de lunettes » (correct) se fait flaguer « père ». UD ne couvrait pas assez de contextes → calibration trop optimiste. Verdict durci : le sens distributionnel ne tient pas FP=0 en production — lexical compris — donc non câblé. Le seul levier propre FP=0 reste le lexical-grammatical (genre, accord), jamais le distributionnel.
Le débouché (06/2026) : une couche verte de « vigilance » dans le correcteur — elle n'affirme pas de faute (donc hors FP=0), elle signale les mots confusables (homophones + paronymes, ~80 groupes) avec leurs possibilités & leur sens. Le signal distributionnel y trouve enfin sa place : ordonner & atténuer, jamais trancher — le bruit qui le disqualifiait pour corriger est inoffensif pour suggérer.
Mesuré : evo_o2_homophone_context.js (désambiguïsation Golding&Roth) · evo_o2_sense_fpzero.js (balayage FP=0, grammatical) · evo_lt_confusion_fpzero.js (les 17 paires lexicales de LanguageTool).
Rejouable : evo/evo_o1_real.js · evo_o2_multitask.js · evo_o2_crossdomain.js · evo_o2_compression.js · plan : evo/EVO_ROADMAP.md.
Mais une mutation n'est utile que si l'on mute le bon niveau. Muter le code source casse presque tout — aucune amélioration possible. Muter les paramètres ouvre un paysage lisse où 30 % des mutations sont bénéfiques : c'est l'évolvabilité (Wagner & Altenberg, 1996). Basculez :
Mesuré bout-à-bout : P1 se copie (quine vérifié), P2 communiquent (un code émerge du seul reward), P3 générations (une meilleure version trouvée, validée hors-échantillon). Certains chiffres aux grandes longueurs restent seed-dépendants — gardés tels quels. Détail : evo/EVO_ROADMAP.md, evo/EVO_P3_EVOLVABILITY.md.
Le substrat partagé : la double route phono↔ortho
Pendu et correcteur sont la même machine pointée dans deux directions sur le canal son ↔ écriture :
- Le pendu modélise
P(orthographe)et complète le masqué — il encode la structure. - Le correcteur inverse le bruit sur cette même structure : d'une surface corrompue, il remonte à l'intention — il décode.
Chacun combine une voie lexicale (le mot existe-t-il ?) et une voie sublexicale (règles graphème↔phonème), arbitrées par leur fiabilité — exactement la double route de la lecture chez l'humain.
De la défaite du pendu à la dyslexie
Le constat-clé : le profil de défaite du pendu ressemble à une signature dyslexique — il échoue majoritairement sur les confusions voisée / sourde (p/b, t/d…), exactement le type d'erreur phonologique au cœur de la dyslexie. Quand le moteur perd, il perd comme un lecteur dys.
D'où le sous-projet dictée diagnostique, puis le correcteur dys : le moteur qui modélise le canal d'erreur devient l'outil qui le corrige.
Le débouché : le correcteur dys
Détecter et corriger sans corrigé, en contexte, avec une garde cardinale : zéro faux positif. Un résultat récent illustre la méthode — la garde « §3 » : là où une règle plate lisait un étiquetage grammatical dur (et souvent faux : « faute » étiqueté verbe alors que 99 % de ses usages sont des noms), un posterior fréquentiel P(catégorie|forme) tranche correctement — récupérant des corrections justes et baissant les fausses alertes à la fois.
Re-validation sur un corpus de vraies fautes (WiCoPaCo, ~45 000 erreurs réelles). Le texte correct ne suffit pas à prouver le zéro faux positif : certains ne se révèlent que sur des structures qu'un corpus propre n'a pas (coordination de noms propres, sujet distant, homographe nom/possessif). Sur les vraies fautes, la campagne a débusqué 3 faux positifs invisibles — « On dit »→ont, « à durée limitée »→a, « un son »→sa — corrigés, et ouvert quatre leviers de recall FP-safe : accord singulier du nom, accord du participe après être à sujet nom, terminaisons -er/-é/-ez, et l'accord de l'adjectif épithète — le genre-adjectif jadis écarté « faute d'un tagger », ré-ouvert et tenu FP=0 (60 faux positifs au prototype → 1, via POS-tagger + genre lexical + nombre lu sur l'article + exclusion des invariants/coordinations). La leçon : la preuve du zéro faux positif exige, après le texte propre, un corpus de vraies erreurs.
Confronté à un corpus dys RÉEL (78 textes d'un adolescent dyslexique et d'adultes dys-dysorthographiques ; analyse Bodard 2020). Il recadre les priorités : les fautes dys sont ≈43 % phonétiques (et 59 % ont la même phonétique que la forme correcte) → le canal phonétique est le levier n°1 (mesuré : notre clé faite-main colle déjà à 87 % des fautes dys) ; ≈38 % grammaticales → la campagne d'accords vise juste ; ≈6 % de segmentation → nouveau levier de fusion d'élision (« lhopital »→l'hôpital). Enseignement méthodologique : l'apport « modeste » du phonétique mesuré sur du texte grand public (Wikipédia) était un artefact du corpus — sur du vrai dys, c'est le levier central.
Sources : typologie dys — Bodard 2020 (JEP-TALN-RÉCITAL), Plisson & Daigle 2013 (Dyslexia) ; corpus — WiCoPaCo (Max & Wisniewski 2010, LREC, GFDL), corpus dys FFDys / plateforme Dys ASEI (privé, non redistribué) ; lexique — Lexique (New et al. 2004) ; garde FP — Universal Dependencies French-GSD (CC BY-SA). Détail complet : rapport §18.5.
Ce qu'on a essayé… et rejeté
L'honnêteté des résultats négatifs fait partie de la méthode. Mesuré, puis écarté :
- un « C cognitif » léger appris, puis un transformer lourd — parité au mieux avec une heuristique simple, parfois pire.
- le pendu de phrases comme levier de victoire — le partage de lettres fuit les fins de mots.
- plusieurs élargissements du correcteur (edit-distance 2, relâche de gardes…) — chacun rouvrait des faux positifs, donc non câblé.
Garder la trace de ce qui ne marche pas évite de le refaire — et rend crédible ce qui marche.
Un second dérivé : OMEGA·KEY — messagerie chiffrée
Le même moteur, pointé ailleurs : une messagerie chiffrée de bout en bout tenant dans un seul fichier HTML, hors-ligne. OMEGA fournit le lexique (passphrases françaises prononçables) ; toute la cryptographie repose sur la WebCrypto standard du navigateur — aucun algorithme maison.
Le chat. Une carte Conversation chiffrée tient un fil de bulles, avec deux transports : sans serveur — le chiffré se copie tout seul, tu le colles à ton correspondant ; ou via un relais minimal (auto-hébergeable sur Deno Deploy en ~2 min) qui pousse les messages en temps réel (SSE) et établit le ratchet DH automatiquement (échange des clés publiques, sans copier-coller) — le relais ne voit que du chiffré, et le numéro de sécurité détecte une interception.
- Passphrases FR prononçables — mots réels (12 bits/mot) ou pseudo-mots (8 bits/syllabe), entropie tirée de
crypto.getRandomValues, sans biais modulo (listes en 2ⁿ, lecture de bits exacte — vérifié). - Clé partagée — PBKDF2-SHA256 310 000 itérations → AES-256-GCM, empreinte de clé vérifiable des deux côtés.
- Double Ratchet — ECDH P-256 → forward secrecy et récupération post-compromission.
- Par message — IV aléatoire 96 bits, intégrité par tag GCM. Le relais (optionnel, auto-hébergeable) ne voit jamais le clair.
⚠️ Démo, pas un produit de sécurité
Briques standard et bien employées (WebCrypto, IV uniques, pas de Math.random dans les clés), tests crypto automatisés en CI (entropie, round-trip, KAT du ratchet), numéro de sécurité anti-interception et historique chiffré au repos — mais le protocole reste assemblé à la main et n'a pas eu d'audit cryptographique formel. Pour de vrais secrets, utilise Signal.
À savoir : le relais voit les métadonnées (salon, horaires, tailles) · échange la passphrase par un canal sûr et compare le numéro de sécurité avec ton correspondant.
Aller plus loin
Les documents de fond (denses, en cours d'actualisation) :
- Mémoire de recherche — architecture, méthode, résultats (et résultats négatifs).
- Rapport de référence & mode d'emploi — configuration, détail des voies.
- Le code — tout est mesurable et reproductible (
./dev.sh).
Note d'honnêteté : le pendu est un banc de mesure, pas un produit. Le produit, c'est le correcteur. Ces deux pages décrivent l'état réel du projet, pas une vitrine.