Souvenir d'enfance, correspondance phonétique et frugalité numérique
Mot long
À l'occasion de l'anniversaire d'une proche, j'ai développé une version numérique d'un jeu d'enfance, que nous nommions le « mot long ». Un jeu parfait quand on s'ennuie, qui se nécessite aucun accessoire, peut se jouer en marchant, en voiture, dans le noir. Il s'agit de construire, à tour de rôle, un mot-valise infini : une première personne donne un mot, la deuxième poursuit avec un autre pouvant se fusionner phonétiquement avec le précédent.
serveur → heureux → refaire → hérisson
On construit ainsi un long mot que l'on peut prononcer d'une seule traite, par exemple « serveurefairisson ». Nous appelons ça un « mot long », mais comme c'est souvent le cas avec ces petits jeux de patience, beaucoup de noms locaux doivent exister. Avec l'habitude, nous avions même autorisé quelques néologismes, comme la « teurpille », pratique pour suivre les nombreux -teur.
Breloque
Je voulais lui offrir un server charm hébergeant une page web présentant mon avatar et invitant à jouer au mot long. Une manière indirecte de garder un contact, un lien, disponible à toute heure (à condition d'être chargé). Le principal défi technique relèvait alors de la portabilité de mon implémentation : le microcontrôleur ESP32-C3 mini sur lequel serait hébergé la page ne possède qu'un faible espace mémoire (relativement aux standards actuels), compter environ 300 Ko de données pour le web.
.-~~~-.
(//´~`\\)
!__ __!
(~(_)-(_)~)
! J !
\ ´-` /
!`._.´!
_.-~´`-.___.-´`~-._
´ `
Pour l'aspect graphique, l'ASCII art est une solution idéale si l'on souhaite minimiser la taille d'un dessin. Pour la réalisation d'un tel autoportrait, je me suis basé sur l'ASCII Face Maker d'Adel Faure. Mais pour la mécanique de correspondance phonétique, il faudra un peu plus d'astuce.
Correspondance phonétique
Car en effet, s'il existe de nombreuses méthodes avancées pour déterminer la prononciation d'un mot, les limites matérielles imposaient ici une approche adaptée et simplifiée, qui devrait donc être artisanale. Même si cela fonctionnerait très bien, je ne pouvais pas me permettre d'intégrer une version fine-tunée d'un LLM. Après un peu de réflexion et quelques essais, j'optais pour l'approche suivante :
- À partir de données d'entraînement, extraire les correspondances les plus pertinentes entre suffixes et derniers phonèmes.
- À partir des mêmes données, pour chaque combinaison de premiers phonèmes, constituer une liste de mots.
- Pour poursuivre le mot long, trouver le plus long suffixe possible dans la base, et choisir un mot au hasard dans le groupe débutant par ces phonèmes.
Cette approche permet de dégager quelques hyperparamètres qui permettront d'ajuster la balance entre précision. Typiquement, lors de l'extraction des correspondances, pour une taille de suffixe et un nombre de phonèmes donnés, on extrait les derniers phonèmes les plus courants pour chaque suffixe. Plus ils sont longs, plus le nombre de suffixes potentiels augmente. Aussi, on ne sélectionne que les suffixes les plus courants, avec un autre paramètre. Pour la constitution du corpus, on peut également varier le nombre de mots conservés par combinaison de phonèmes.
Comme données d'entraînement, le Wiktionnaire contient beaucoup d'informations de prononcitations, mais des données plus structurées sont disponibles dans Lexique3, accompagnées de la fréquence d'apparition des mots, ce qui permettra de filtrer les mots les plus courants.
Je ne m'épancherai pas davantage sur les détails de l'implémentation, vous pouvez pour cela consulter le code source sur le dépôt Codeberg ychalier/mot-long. Je vous invite plutôt à essayer par vous-même !