Ce CSS prouve que je suis humain
(will-keleher.com)- Tentative d’écriture expérimentale mobilisant plusieurs moyens techniques — CSS, manipulation des polices, variations orthographiques — pour contourner la détection de texte IA
- Utilisation de
text-transform: lowercasepour convertir les majuscules en minuscules, tout en exemptant les blocscodeetpreafin de préserver la lisibilité du code - Création d’une police personnalisée avec la bibliothèque fontTools pour remplacer le glyphe du tiret cadratin (—) par une combinaison de deux traits d’union
- En s’appuyant sur l’algorithme de correction orthographique de Peter Norvig, remplacement volontaire de mots rares par des mots plus courants pour brouiller les motifs orthographiques du texte
- Refus, malgré tout, de modifier le style d’écriture lui-même : « ce n’est pas simplement un masque, c’est mon visage »
Conversion des majuscules en minuscules
- Application de la propriété CSS
text-transform: lowercasepour afficher tout le texte en minuscules - Exception pour les blocs
codeetpreavectext-transform: none, afin de préserver l’intégrité du code - Les commandes shell comme
cat post.md | tr A-Z a-z | sponge post.mdne conviennent pas, car elles convertissent aussi les blocs de codebody { text-transform: lowercase; } code, pre { text-transform: none; }
Remplacement du glyphe du tiret cadratin
- Les détecteurs d’IA pouvant reconnaître les motifs d’usage du tiret cadratin, création d’une police personnalisée pour remplacer le tiret cadratin (—) par une combinaison de deux traits d’union
- Modification directe de la police Roboto avec la bibliothèque fontTools de Python afin de remplacer le glyphe du tiret cadratin par un composant formé de deux traits d’union
- L’usage de FontForge aurait pu être plus simple, mais le choix s’est porté sur une méthode permettant de générer un fichier
.woffpar script - Calcul de la largeur du trait d’union (
hyphen_width) et de l’espacement (gap = hyphen_width * 0.8), puis définition d’une nouvelle advance width avant l’enregistrement enroboto_edited.ttf
Variations orthographiques intentionnelles
- À partir du code de correction orthographique de Peter Norvig, remplacement des mots rares du texte par des mots plus fréquents commençant par la même lettre
- Construction d’un dictionnaire de fréquence des mots (
Counter) à partir du corpusbig.txt, puis tri des mots du texte par ordre de rareté - La fonction
edits1()génère des mots candidats à une distance d’édition de 1 — suppression, transposition, substitution, insertion — puis affiche comme remplaçants les mots de fréquence supérieure - Exemples de remplacements effectifs :
corpus → corps,discrete → discreet,complement → compliment,spill → spell, etc.
Refus de changer de style — la frontière de l’identité
- Bien que les majuscules, le tiret cadratin et l’orthographe aient été techniquement déguisés, l’auteur refuse de modifier son style d’écriture lui-même
« Mon écriture n’est pas une simple apparence : c’est ma manière de penser, de raisonner et d’entrer en relation avec le monde »
« Ce n’est pas un masque, c’est mon visage ; non pas une façade, mais une structure porteuse (load-bearing) » - La dernière ligne se termine par une formule qui semble générée par une IA, "Here's your blog post written in a stylized way...",
laissant entendre que l’ensemble du texte révèle de manière méta la tentative même de se déguiser en IA
1 commentaires
Avis sur Hacker News
L’idée du poème était intéressante, mais il paraissait égocentrique et manquait d’explications, ce qui rendait l’immersion difficile
Le fait d’écrire en commençant systématiquement par des minuscules semblait facile à imiter pour une IA, ce qui lui faisait perdre en authenticité
Ce n’est qu’à la fin, en découvrant l’aveu disant que le texte avait été écrit par une IA, que des phrases comme « mon écriture n’est pas seulement la manière dont j’apparais, mais la manière dont je pense et interagis avec le monde » ont vraiment pris sens
Mais cela finit par mener à la conclusion qu’il faudrait modifier son propre style d’écriture, et comme celui-ci fait partie de son identité, cela devient impossible
D’où l’ironie : ce changement ne pourrait être accompli qu’au moyen d’un LLM
Je ne pense pas pour autant que le texte ait réellement été écrit avec un LLM
Autrefois, on considérait l’écriture comme un art, et l’interprétation relevait du lecteur ; on dirait que cette marge de liberté a disparu
Dans un monde où d’innombrables bots tiennent des blogs et laissent des commits, ce contexte m’est venu naturellement à l’esprit
Ce texte m’a rappelé une réflexion sur le gatekeeping et l’open source
Le fait de s’accrocher uniquement au style de surface plutôt qu’à l’essence du texte paraît encore plus égocentrique
En tant que personne sur le spectre autistique, ce texte m’a parlé différemment
L’angoisse de voir sa manière naturelle de s’exprimer considérée comme « mauvaise », et de devoir raboter une partie de son identité pour être socialement accepté, m’est trop familière
Au fond, l’ironie du « pour avoir l’air humain, il faut passer par un LLM » ressemble à notre réalité : « pour avoir l’air normal, il faut jouer un rôle »
Mais selon cette personne, le vrai problème est plutôt qu’il soit désormais considéré comme normal d’« améliorer » ses textes avec des outils comme Grammarly, au détriment de l’art de l’expression naturelle
J’utilisais déjà beaucoup l’em-dash (—) avant ChatGPT, mais maintenant je commence à craindre que cela me fasse paraître comme une IA
Comme les logiciels les remplacent automatiquement par des em-dash, j’ai peur que les gens pensent que j’ai délégué la conversation à une IA
C’est pour cela que ce texte m’a particulièrement parlé
Un jour, on me prendra peut-être pour un LLM à cause de ça
La partie du poème sur fontTools était particulièrement marquante
Composer le glyphe de l’em-dash à partir de deux tirets est une approche qu’on n’imagine pas facilement sans une compréhension profonde du rendu typographique
La plupart des développeurs frontend auraient simplement réglé ça par un remplacement de caractères, mais le traiter au niveau de la police est une solution bien plus raffinée
L’astuce CSS avec
text-transformrelève de la même finesse, puisqu’il faut penser à protéger les blocs de codeSous l’apparence du poème se cache une vraie maîtrise technique
Ils reconnaissaient que le code est intéressant, mais trouvaient toujours floue sa définition en tant que poème
Peut-être qu’un jour nous reviendrons à une époque où l’on écartera les gens non pas pour le contenu de leurs écrits, mais à cause de différences de vision du monde
Aujourd’hui, il est devenu normal de voir une tournure maladroite ou un style particulier et de demander aussitôt : « c’est de l’IA ? »
En lisant, je me suis dit que ce n’était qu’une nouvelle tentative de produire un « signal humain », et le retournement final m’a plu
Peu importe qui l’a écrit ; l’essentiel, c’est ce qu’il essayait de dire
C’était la première fois que je voyais un em-dash représenté par deux tirets
Le code modifiant la police Roboto était étonnamment court, presque aussi concis que le correcteur orthographique de Norvig
J’ai tellement aimé ce texte que j’ai envie de croire qu’aucune IA n’est intervenue
J’écris toujours directement en HTML et avec Emacs
Quand je traite des problèmes de maths, j’écris volontairement de façon verbeuse pour y mettre plusieurs solutions, puis je réorganise ensuite vers la solution la plus élégante
Je fais beaucoup de fautes de frappe, mais je considère que c’est justement une trace humaine
Malgré tout, ces temps-ci je crains que mes textes soient pris pour du LLM
Cette culture du soupçon est en train de voler peu à peu le plaisir d’écrire
J’espère qu’avec le temps cette vigilance excessive s’atténuera, et que ceux qui écrivent eux-mêmes se sentiront de nouveau à l’aise
Il y avait aussi une plaisanterie sur ce qui se passerait si les « clankers » remarquaient tout ça
Enfin, du moins tant qu’on sera encore capables de distinguer les androïdes des humains