Pour la première fois, j’ai décidé de vous proposer une vidéo non pas sur un sujet scientifique bien établi, mais sur un petit projet de recherche personnel que j’ai entrepris : comment créer des mots nouveaux qui sonnent bien ?
Pour ceux qui voudraient en savoir plus sur la méthode utilisée, voici quelques explications supplémentaires.
Tout d’abord sur le tableau, il est en réalité un peu plus large que ce que j’ai présenté dans la vidéo, car j’ai également considéré les caractères accentués ainsi que le tiret (de fait mon algorithme produit aussi de temps en temps des mots composés.)
Autre élément essentiel, lors de l’analyse du corpus il est important de calculer la probabilité qu’une lettre ne soit suivie par rien (elle est la dernière du mot) et à l’inverse que « rien » soit suivi d’une lettre donnée (qui se trouve alors la première.) Cela permet par exemple de voir que malgré son abondance relative dans la langue française, la lettre U n’est que rarement la première d’un mot (un fait bien connu des amateurs du « petit bac »).
Passons maintenant à une précision importante que j’ai choisi de ne pas donner dans la vidéo : si vous programmez les choses telles que je l’ai décrit ici, vous obtiendrez des mots qui sont moins bons que ceux que j’ai montré. Pourquoi ? Eh bien parce que j’ai ajouté un degré de complexité supplémentaire.
Considérez le mot « TTAMIS », c’est un mot qu’on aurait pu générer en suivant la procédure telle que je viens de la donner. Et pourtant vous voyez que ça ne colle pas ! En français les mots ne commencent jamais par deux T d’affilée. Un mot qui commence par un T, oui; un T après un T, oui aussi, mais pas un double T en début de mot.
Autre exemple, toujours en suivant la procédure simple, on aurait pu produire le mot TAMMMIS : puisqu’un M après un M est un enchainement probable, avoir 3 M d’affilée serait permis. Et pourtant on voit que ça ne colle pas car cela ne se produit jamais en français.
Pour que les mots sonnent vraiment bien, il faut faire une chaîne de Markov qui tiennent compte des DEUX dernières lettres pour déterminer la suivante. Et c’est ainsi que j’ai fait mes statistiques sur le corpus, en calculant par exemple la probabilité d’avoir un « e » après les deux lettres donnés, par exemple »br ». On calcule donc la probabilité de chaque triplet de lettres et le résultat est plutôt un cube qu’un tableau.
Petit exercice pour ceux que ça intéresse, on doit pouvoir calculer une sorte de « longueur de corrélation » dans les mots, et cette longueur ne doit pas être beaucoup plus grande que 2.
En faisant tourner la chaîne de Markov de cette manière, vous créez des mots dont vous ne maîtrisez pas la longueur a priori, puisque un mot se terminera sous l’effet du hasard. J’ai ensuite reclassé les mots par taille mais l’algorithme a tendance à produire beaucoup plus de grands mots en proportion que ce qu’on trouve dans la langue française (en toute rigueur on devrait faire dépendre la probabilité de fin du mot de la taille courante du mot, mais ça compliquerait pas mal et nous ferait sortir du formalisme des chaînes de Markov simples puisque la chaîne aurait une « mémoire ».)
Sinon vous aurez remarqué que le code produit beaucoup de mots au pluriel (car en français la transition s -> rien est forte) et des mots qui ont l’air d’être des verbes conjugués. Normal puisque le corpus de départ contenait des mots tirés de livres, donc conjugués et parfois au pluriel. Il pourrait être intéressant de refaire l’exercice sur des mots du dictionnaire, non conjugués.
J’ai essayé de faire tourner la chaîne sur un corpus de mots anglais, mais le résultat était moins typique que l’allemand. Je pense que c’est dû au fait que l’anglais est justement plus souple sur les enchaînements autorisés, et le tableau des probabilités y est certainement moins contrasté (j’ai souvent eu cette impression qu’en anglais, la plupart des enchaînements de lettre un peu raisonnables correspondent à des mots qui existent vraiment).
Avis au volontaires, je mets mes codes Python à disposition, et je suis curieux de les voir tourner sur d’autres langues !
Edit : le billet suivant sur le sujet et le code avec plusieurs langues
116 Comments
C’est vrais que ton texte remplis de « faux » mots sonne bien, dans le même esprit il y a « Un ragga abscons » de Juliette mais cette fois ci avec de vrais mots.
Saint-John Perse n’a que bien se tenir :p
Excellent !
Très cher, pourrais-tu me donner un lien pour un logiciel pour faire tourner les fichiers que tu as mis et aussi le tableau de français (en carré et en cube; simple et étendu) à cette adresse mail : pfeiffer.victor.72@orange.fr
Je t’en serais éternellement reconnaissant.
Merci
Le code est en Python. Je te recommande la distribution WinPython qui est très simple à installer, puis de l’ouvrir en Spyder.
En effet, winpython est assez simple a Trouver/Installer mais le code est plein d’erreurs que j’ai corrigé pour que le code marche mais lorsque je lance « Run » il ne se passe rien et le programme marque « restart »
HELP
Malheureusement je peux difficilement assurer le service après-vente !
Bonjour,
Désolé de venir littéralement 5 ans après, sans connaissance de Python, mais j’ai trouvé cet article et cette vidéo très intéressante, et je souhaiterai exécuter ce programme par moi-même.
Mais je rencontre un problème: Lorsque je clique sur n’importe quel lien qui renvoi vers un code (« Le code qui construit le tableau de probabilités » ou « Le code qui fabrique les mots à partir du tableau »), j’ai une erreur 404 (qu’il s’agisse de cet article ou celui des mots versions Ikea).
Que dois-je faire pour télécharger / exécuter ce code?
Jules Vail :
Tu peux utiliser la wayback Machine pour retrouver le code, c’est un site web qui permet de visualiser les sites comme ils étaient avant
https://web.archive.org/web/20190816115921/http://www.science-etonnante.com:80/mots_2D.py
https://web.archive.org/web/20190816110709/http://www.science-etonnante.com:80/mots_2D_2.py
Oh cette merveille !
Ça me rappelle « Le radoteur », inventé par Roland Moreno en 1988 dont l’algorithme était d’une simplicité confondante.
Pas grand chose de mathematique, mais tellement astucieux que c’en est un régal.
Connais-tu le radoteur ? C’etait un grand classique des débuts de la micro. Il a servi à son inventeur pour créer des noms de marques, de parfums… à partir de listes de noms existants et mélangeables.
Il existe à ce jour une kyrielle d’implémentations du radoteur qu’on peut télécharger sur la toile, si le coeur t’en dis.
Je connais le radoteur et j’ai développé un programme qui l’implémente en janvier 2002. Le principe était de trouver un nom de marque à partir d’un texte décrivant le produit.
Boris Vian aussi c’est bien ! 🙂
tout smouales étaient les borogoves et les versins fluctuaient
https://fr.wikipedia.org/wiki/Tout_smouales_%C3%A9taient_les_Borogoves
d’autres s ‘y sont essayés :https://fr.wikipedia.org/wiki/Jabberwocky_(po%C3%A8me)
bravo pour la chaîne !
Dans ma lointaine jeunesse, avant votre naissance probablement 🙂 j’avais ecrit un generateur beaucoup plus simple. Il consistait simplement a alterner consonne – voyelle. En considerant on, eu ai et autres comme des voyelles et bl, cr, qu… comme des consonnes.
Ca marchait pas mal non plus. C’est vrai que votre methode statistique donne une sonorité geographique et c’est plus simpa.
Mon programme etait plus polyglotte 🙂
*sympa… Pardon et desole pour les accents j’utilise une vielle tablette et c’est complique d’aller les chercher.
Excellent! Ce qui me frappe c’est la possibilité de comparer (visuellement!) la sonorité des langues de façon complètement intuitive. Moins de cases noires en allemand qu’en français? On imagine bien une langue gutturale où les longues suites de consonnes sont fréquentes. Je suis curieux de voir côte à côte le « code source » de l’anglais, de l’espagnol, du suédois… et pourquoi pas du Chinois ou de l’Arabe (en alphabet latin bien sûr :-))
Quand même… Tant de richesse en 1 coup d’œil, réduite à un simple QR code… À la limite un rubik’s cube amélioré! (D’ailleurs la probabilité de tomber sur Rubik doit être assez faible. Le nom est passé dans le dico ou pas?)
D’ailleurs, pourrais-tu imaginer sur le même principe une machine grammaticale? Ensuite tu fais tourner les 2 ensemble, et hop une nouvelle langue! Des poèmes entiers en 1 clic 😉
Oui il faudrait le faire pour d’autres langues mais je n’ai pas trouvé facilement de liste de mots qui soit complète. Mais il doit suffire de regarder dans les correcteurs orthographiques (je pense qu’il y a des trucs open-source dans les distributions linux)
Pour la machine grammaticale, très juste ! On pourrait faire une chaîne de Markov qui se base sur la probabilité d’avoir un adjectif après un nom, un nom après un verbe, etc. !
J’ai tout ce qu’il faut pour le faire en égyptien… Hélas votre code ne fonctionne pas tel quel et je ne suis familier qu’avec le C :/
Quelques commentaires supplémentaires auraient été bienvenus pour comprendre ce que fait votre programme (dans le source je veux dire).
De plus au lieu de l’appliquer à des lettres, il serait pertinent de l’appliquer à la phonétique, puis d’appliquer les règles de la langue pour choisir les lettres correspondantes. Pour le français le plus complet à ma connaissance c’est le « robert » qui propose encore la phonétique de tous les mots et qui fournit aussi une version numérique du dictionnaire (mais payante)
Cool, un article avec un peu de programmation ! Merci Neko 🙂
Mmmm, peut-être qu’il faudrait en fait pondérer le poids qu’ont les mots sur les statistiques produites, selon la probabilité d’usage dans la langue française: ce n’est pas forcément raisonnable de donner le même poids à un mot très peu utilisé (tels que luxmètre, etc.) par rapport à un mot très utilisé. En pratique, ça doit déjà arriver pas mal en utilisant le dictionnaire tel quel, puisque de nombreux mots partagent la même racine, cela renforce le poids des enchaînements de lettres des racines ; mais peut-être que pondérer les mots améliorerait le résultat ? Je ne sais pas si le projet Gutenberg indique le nombre d’occurrences des mots.
Ce serait aussi chouette d’écrire une version javascript ou servlet python à mettre sur ce blog pour qu’on puisse essayer facilement 🙂
Aussi, ce serait amusant de calculer quel pourcentage de mots générés existent déjà en Français, selon le nombre de lettres du mot.
Pour le cas de l’Anglais, j’aurais tendance à penser que le résultat est plus mitigé parce que c’est une langue qui est vraiment un mélange de sources très diverses. Tiens, d’ailleurs, peut-être qu’on pourrait faire une statistique sur ces probabilités, et définir une mesure sur les langues: combien les transitions de lettres sont très typées, ou au contraire plutôt équiréparties. On pourrait alors classer les langues par degré de « typisme » 🙂 (et le Basque se retrouverait comme d’habitude tout en haut…)
En effet je n’ai pas pondéré par l’occurence des mots ! Je me suis dit que les enchaînements rares correspondaient déjà à des mots rares (il y a des exceptions bien sûr).
Si tu te sens d’écrire une version javascript, je t’en prie 🙂
Il doit aussi y avoir moyen de récupérer des dicos dans les distributions linux, non ? On aurait pas les verbes conjugués mais on s’en fiche.
Sur le pourcentage de mots générés qui existent, il est très faible dès qu’on est à 4 ou 5 lettres. Dans la liste complète des mots http://science-etonnante.com/output_FR.txt j’ai mis une étoile quand le mot existait déjà.
Ta remarque sur l’anglais est tout à fait juste ! On devrait pouvoir mesurer une entropie de la langue en utilisant une mesure comme p.log(p) pour chaque probabilité.
Tu as accès à un dico en basque pour qu’on essaye ? 🙂
En tout cas le code est dispo, pardonne mon style de programmation, ça n’est pas mon métier !
Il y a des dicos basques dans les packages hunspell-eu ou aspell-eu (c’est la même source). De manière générale, les packages hunspell-* et aspell-* devraient fournir d’assez bons dicos 🙂
Bonne idée, le faire tourner sur le web. Le code est en python, pourquoi ne pas le réutiliser dans django directement ?
Je remets ici ce que j’avais posté sur Twitter :
Super vidéo ! C’est marrant car il y a quelque jours, en cours d’info, on discutait des grammaires de Chomsky et de la faisabilité (ou non) d’un automate qui reconnaîtrait les mots de la langue française.
Sinon, pour le fun, je me suis demandé comment les mots seraient reconnus par les outils linguistiques de iOS et OS X (déterminants, noms, verbes…) et voici le code : https://github.com/McNight/Barbarismes
Les résultats sont plutôt amusants !
En fait une des sources d’inspiration de ce travail est l’article sur les MCMC (http://math.uchicago.edu/~shmuel/Network-course-readings/MCMCRev.pdf) que j’avais cité après ma vidéo sur les codes secrets.
On peut mesurer la « plausibilité » d’un mot de cette manière je pense.
D’accord, j’y jetterai un coup d’oeil !
Voilà quelques résultats que j’ai obtenu :
« emboulise gableutes nierant schisse clont »
emboulise : Adjective
gableutes : Noun
nierant : Preposition
schisse : Noun
clont : Adjective
Encore une fois, une vidéo très intéressante et qui m’inspire !
Dans le cas de l’anglais tu devrais lire l’article de Claude Shannon sur la théorie de l’information : http://pespmc1.vub.ac.be/books/Shannon-TheoryComm.pdf
Au lieu de considérer les probabilités de transition entre deux lettres, il propose de considérer les probabilités de transition entre des groupes de lettres et on commence à voir apparaitre des mots à consonance anglaise à partir de groupes de trois lettres.
Une question/remarque : tu montres un histogramme dans lequel on voit apparaitre dans l’ordre décroissant, les fréquences d’apparition des lettres après une autre lettre, j’ai l’impression d’y voir une loi de puissance. Le langage possède-t-il des propriétés fractales ?
Merci pour la référence ! J’ai du le lire il y a bien longtemps en cours de physique stat mais je vais me le refaire !
Sur la loi de puissance, difficile à dire puisqu’il n’y a que 26 lettres possibles.
Car ça peut être intéressant:
http://www.laboiteverte.fr/comment-on-invente-mot-ordinateur/
Salut, superbe vidéo comme à chaque fois 🙂 Est-ce que tu pourrais notre mettre à disposition le fichier de la liste des mots de la langue française et commenter un peu plus ton code, je voudrais le réécrire en JS par exemple mais je ne connais rien au python et je ne comprend pas tout sans commentaire comme ça ?
Merci d’avance, bonne continuation 🙂
http://www.pallier.org/ressources/dicofr/liste.de.mots.francais.frgut.txt
+1 : c’est chouette, mais un code un peu plus commenté et des variables plus parlantes seraient grandement appréciées.
Pingback: La machine à inventer des mots [Vid&eacu...
Merci pour les scripts python, pourrait-on avoir le « wordsEN.txt » aussi?
Je l’ai trouvé ici : http://www.pallier.org/ressources/dicofr/dicofr.html 😉
Bon par contre le 2ème script python plante, dommage, et je ne connais pas assez le python pour comprendre quel est le problème.
Bien votre recherche et . . . bon. Courage ; je suis sur des compo de poésie tous les 2 phrases qui m’interesserait
Pingback: Actualités - Dossiers à lire | Pearltrees
Prend l’éloquence et tords-lui son cou ! Tu feras bien, en train d’énergie, De rendre un peu la Rime assagie, Si l’on n’y veille, elle ira jusqu’à où ? ( d’après Verlaine )
J’adore la programmation et je trouve ta vidéo et l’article très bien fait.
Je viens de découvrir ton blog et j’adore ce que tu fais !
C’est une intéressante généralisation du radoteur de Roland Moreno. Tu dois pouvoir générer des mots à thème en choisissant des sous ensemble de synonymes ou de mots de même catégorie (noms de planètes, de voitures, de villes du nord, etc…).
As tu envisagé de remplacer les lettres par des mots pour générer des phrases, ou pourquoi pas une histoire ?
Certaines variantes du système T9 (pour saisir du texte sur les téléphones des années 90 à partir des touches numérique) utilisent ce genre d’algorithme (soit à la place d’un dictionnaire pour générer les mots, soit en utilisant un dictionnaire de mots pour prévoir le type de mot suivant (sujet, verbe, etc…) en fonction des 2 ou 3 mots précédents).
C’est un algorithme très simple, mais qui a énormément d’applications concrètes.
Salut !
Merci pour cette vidéo vraiment intéressante et ludique ! J’ai prêté une attention particulière à ton script en python et j’ai deux questions :
1) Nous autorises-tu à le reprendre et l’adapter/redistribuer à notre gré ?
2) Dans la deuxième partie du script, quelle est l’utilité du tableau « dico » créé à partir du fichier « mots_FR.txt » ouvert en read-only ?
J’ai manuellement mis des mots au hasard dedans en pensant qu’ils serviraient de bases pour la génération mais je réalise que « dico » n’est utilisé que dans le cas ou le mot a atteint sa taille finale. Quelque chose m’échappe quant à son utilité.
Merci d’avance pour tes réponses et bonne continuation à toi !
Bonjour,
Très intéressant comme solution, j’ai bien envie d’essayer de re-coder l’algo en javascript, ce qui rendrait la solution exécutable dans un navigateur.
En revanche, bien que je sois dev java je ne connais pas du tout le python. Si l’algo est à l’image de la description qui en est faite dans la vidéo il y a un petit problème. Par exemple, le « F » à 14% de chance d’être suivi par un autre « F ». Mais si on prend le 2eme « F », il a toujours 14% de chance d’être suivi par un autre « F ». Hors dans la langue française il n’y a pas beaucoup de mot de plus de 2 « F » consécutif. Il faudrait aussi inclure une statistique de répétition, sans quoi l’algo peut produire de temps en temps des mots avec une répétition de caractère supérieur à 2 (ce qui n’est pas très français).
De la même manière, la statistique de voir un « U » suivit qu’une consonne n’est pas faible, mais l’assemblage « QU » suivit d’une consonne est plus rare (enfin … il me semble).
Mais sinon j’ai beaucoup aimé la vidéo, c’était très intéressant merci ^^.
Bonjour,
Et bravo pour votre blog ! Est-Impossible de récupérer le fichier texte des mots français qui vous a servi de base ?
Merci en tous cas.
Est-il possible, évidemment !
Vraiment géniale votre idée de créer une nouvelle manière de former des mots à partir de probabilités. Peut-être, est-ce une manière qu’il faudrait appliquer à la génétique, si on voulait accéder en plus des anciennes à de nouvelles espèces ?
Sinon voici le lien d’un poète Philippe Goron, (hélas, trop tôt décédé !) qui ne manquait pas de surprendre par l’utilisation de mots rares et précieux en plus d’être original dans la forme et dans le fond de ses poèmes.
http://goronphilippe.over-blog.com/
P.-S. : J’ai créé un jeu de plateau à base de mots français et je cherche quelqu’un capable de trouver un algorithme, afin d’obtenir un logiciel pouvant m’assister dans la création de mes grilles. Si vous êtes intéressé ou que vous connaissez quelqu’un ayant les aptitudes requises, je suis preneur. Une chose est sûre, vous ne serez pas déçu de découvrir mon jeu qui part d’une construction originale où j’arrive à lier les mots entre eux sans avoir recours à des cases noires grâce à une reformalisation des mots qui se trouvent restructurés à partir de groupe de lettres véhiculant de l’intérieur vers l’extérieur ou vice versa, formant par là-même des anagrammes. Tout cela semble compliqué, mais la simple vue du jeu réalisé explique tout.
Bien à vous…
Je pourrais peut-être aider…
bonjour,
ça me fait penser à certaines notes récentes du blog de l’écrivain Eric Chevillard, qui joue avec des mots inventés :
http://www.autofictif.blogspot.fr/
C’est tout bête mais il fallait y penser ! En tout cas ça m’a bien fait rire.
Pour ceux que ça intéresse, j’ai plus ou moins transcris ton programme en Java, en ajoutant une « fenêtre » variable (pas forcément 2 caractères) :
https://github.com/Achaaab/WordGenerator
Hello!
Très intéressante cette vidéo. En se basant sur ta méthode, je me demande s’il y a moyen de faire un truc dont j’ai beaucoup rêvé : un générateur d’anagrammes! Je suis très très nulle pour trouver des anagrammes, mais ça me fascine. Je vais demander à mon dév de mari s’il peut se pencher dessus, mais il est sur d’autres projets pour le moment… Si jamais tu te penches sur un truc comme ça en tout cas ça pourrait être super cool!
Bonne continuation à toi!
Salut San, j’espère avoir réalisé votre rêve avec ce lien qui est un excellent anagrammeur (générateur d’anagrammes) : http://www.popotanagramme.fr/Pages/accueil.php
Ah c’est très charmant comme logiciel, merci! J’ai aussi trouvé des générateurs d’anagrammes sur le net, qui fonctionnent pas trop mal en fait ^^
Super exercice. Met ton code sur github plutôt !
Pingback: Source CODE | Pearltrees
Les mots allemands sonnent moyennement allemands, ça manque de « w » et de « sch ». Quelques pistes pour améliorer ça:
– Comme pour le français, prendre en compte les 2 lettres précédentes.
– Il y a 2 probabilités à combiner: la « probabilité d’apparaître après une certaine lettre » (tableau de couleur), et la « probabilité d’apparaître » tout court, mentionnées au début de la vidéo (mais après plus du tout…). Les 2 dépendent de la langue considérée, et peut-être que la liste allemande a utilisé les proba française pour l’apparition globale des lettres.
D’ailleurs, comment faire pour combiner ces 2 probabilités a priori indépendantes? Pour la liste française, est-ce que le taux d’apparition du « e » est le même que celui trouvé dans la liste du projet Gutemberg? A vrai dire, je ne connais rien au chaînes de Markov, si vous avez un lien ou deux en guise d’intro sur le sujet, je suis preneur.
http://www.dcode.fr/liste-outils
J’ai trouver ce lien qu’il traite des chaînes de Markov dans la partie : Traitement de données, et je remercie San d’avoir parler de générateur d’anagrammes au lieu d’anagrammeur, ce qui m’a permis de découvrir ce site dCode qui, pour moi, est une mine d’or. Il y a tellement d’outils que chacun y trouvera, peut-être, un pôle d’intérêt.
Pingback: Répondre aux Pourquoi Comment? | Pearltrees
Oups, j’avais complètement oublier de balancer ce lien :
http://setosa.io/ev/markov-chains/
Il s’agit d’un site qui explique pleins de sujets de façon visuelle, et cet article parle des chaînes de Markov !
Sinon, je vous rappelle mon petit code : https://github.com/McNight/Barbarismes où j’observe très simplement la classe lexicale des mots générés par la machine.
A quoi correspond « numpy » dans le code ? Python me répond que le module n’existe pas, je suppose qu’il faut l’avoir au préalable ? Merci sinon j’adore toutes vos vidéos, une comme celle-ci a change et c’est tout aussi bien ! =D
Quelques petits indices concernant le code (pour répondre à quelques questions que j’ai vu…
1. numpy est une bibliothèque très utile dans le cadre du calcul scientifique.
2. Pour ceux pour lesquels le second script plante. Cela peut être dû au fait que le fichier .bin généré par le premier script ne correspond pas au nom attendu dans le seconf (EN -> FR). Il faut donc bien faire attention au dictionnaire de langue utilisé et aux noms des fichiers.
Cela peut également être dû au fait que ce script fonctionne avec python 3.x mais pas avec python 2.x
Hello David;
J’aimerais bien jouer un peu avec ton code, et essayer de contribuer.
Est-ce que tu peux le mettre sur Github ?
Merci d’avance.
Je ne pensais pas que ce code aurait autant de succès !
Je vais le nettoyer un peu et le mettre effectivement sur GitHub (je n’ai jamais fait mais ça ne doit pas être si compliqué…)
Oui, c’est simple 😉 (enfin, je suis dev et je bosse avec github tous les jours, alors peut etre pas très objectif ;))
Sinon, ne te prend pas trop la tête à le netoyer.
Encore merci pour ta chaine youtube, je l’ai découvert ce week-end, et j’ai déjà presque tout regardé 😉
Bonjour David, j’ai regardé avec beaucoup d’intérêt ta vidéo et j’ai essayé, en vain, de récupérer et faire fonctionner ton code (je ne suis que très amateur en programmation et ne connais pas particulièrement le Python).
Je pense que ce logiciel a un potentiel énorme -je pèse mes mots- pour l’élaboration de nouvelles langues et de noms dans le domaine de la fantasy.
Je travaille souvent sur ce sujet, j’ai beaucoup de connaissances qui travaillent aussi dessus, et la construction de nouvelles langues est quelque chose de très complexe et laborieux. C’est un processus qui nécessite une dizaine d’étapes, et des dizaines voire des centaines d’heures de travail pour atteindre un résultat correct.
Cela pourrait être considérablement facilité en utilisant un tel logiciel. Il suffirait d’en changer les probabilités d’enchaînement des lettres pour créer une langue voisine d’une langue existante ou bien de faire ces probabilités en partant de 0 (ou d’une base de données de quelques centaines de mots) pour créer une langue originale. Ce serait également très utile pour concevoir des noms propres.
As-tu eu l’occasion de nettoyer ton code et de le mettre sur GitHub ? Si non, penses-tu que tu pourrais trouver le temps ? Je pense que cela pourrait profiter à beaucoup d’artistes amateurs ou professionnels, et pas seulement à moi.
Bonjour,
Petite remarque sur la question de la longueur des mots : plutôt que de faire intervenir une mesure de la longueur (ce qui impliquerait effectivement une mémoire pour la chaîne), il serait sans doute plus dans l’esprit de l’exercice de donner des poids aux différents mots (peut-être simplement en les faisant apparaître plusieurs fois dans le corpus) en fonction de leur fréquence dans le langage courant, non ? De cette manière a priori, le « rien » deviendrait plus fréquent (de façon globale, ainsi que dans les trigrammes apparaissant fréquemment en fin de mot).
Article sympa, mais… je crois vraiment que beaucoup de gens se sont déjà essayé à ce type de programme! Je vous trouve meilleur quand vous parlez de physique. A tout hasard, vous dites que pour une fois vous ne parlerez pas de science… or, ce sujet concerne bien une science, que l’on appelle depuis bien longtemps la linguistique. Il est vrai que les linguistes ne font plus confiance à la notion naïve de « lettre » qui ne veut pas dire grand chose, et n’est pas généralisable à des langues dont les écritures ne sont pas alphabétiques, c’est la raison pour laquelle on parle de phonèmes et de morphèmes, qui sont, eux, universels. Essayez de faire des programmes d’analyse morphologique par exemple, ce sera un peu plus difficile. Consultez le site de Gérard Huet sur le sanskrit par exemple…
NB: erreur d’adresse sur le commentaire précédent
Bonjour à tous,
Merci pour cette vidéo Sciences étonnantes, tu m’as donné envie de créer un générateur de mots nouveaux.
Je l’ai mis en ligne et, cerise sur le gâteau, il gère 4 langues : français, allemand, néerlandais et norvégien. Je n’ai pas mis l’anglais car tu n’obtenais pas de résultats probants. J’ai alors préféré proposer des langues qui ont des particularités plus marquées (comme l’allemand avec le « sch », le néerlandais avec le « ij » et le norvégien avec les lettres å, ø et æ). D’autres viendront peut-être.
Amusez-vous bien et n’hésitez pas à partager le lien 😉
http://justclick.re/generateur.php
Totoyo
J’aime beaucoup quand vous dîtes que c’est facile à créer, pour les développeurs surtout. Vous devez tomber sur des mots assez marrants. Comme quoi même en langue française, on utilise les mathématiques.
Bonjour, j’ai une petite question à propos du script Python: j’ai réussi à générer un fichier .bin et j’aimerai avoir une plot 2D comme dans la video, comment je dois m’y prendre ?
Je vais bientôt refaire un billet avec les codes nettoyés et qui explique tout ça correctement !
Bonjour,
merci pour cet article (et la vidéo) très intéressante.
Il serait bien de créer dans GitHub une organisation qui puisse héberger le repository qui contient les codes de cet article.
https://help.github.com/articles/what-s-the-difference-between-user-and-organization-accounts/
j’ai moi aussi un petit soucis avec le deuxième script
https://github.com/scls19fr/word_gen
je n’ai pas eu le temps d’y regarder de plus près
Cordialement
Vous pourriez aussi en profiter pour parler des algorithmes d’apprentissage type réseaux de neurones et notamment les réseaux de neurones récurrents qui sont parfaitement adaptés à ce type d’apprentissage.
ce très cool pour la science
Bonsoir,
J’ai eu un petit souci avec le second script, mais j’ai trouvé la solution : ligne 39 j’ai remplacé chr(k) par unichr(k) (je suis sous linux ça explique peut-être ?) et je travaille en UTF-8 plutôt q’en « ISO-8859-1 »
ça me donne envie de travailler la méthode pour créer un générateur de lipsum …
J’ai commencé à travailler sur une liste de verbes à l’infinitif, le résultat est intéressant.
Merci pour tout 🙂
Pingback: La machine à inventer des mots, version Ikea | Science étonnante
Pingback: La machine à inventer des mots, version Ikea Actualités
J’ai adoré ta vidéo, notamment le poème de fin. De plus je pense qu’il pourrait être très amusant de comparer les différentes langues entre elles. Je suis sûr qu’il y aurait des choses intéressantes avec ce procédé. Encore merci pour tes vidéos, je te souhaite une très bonne continuation 😉
Tout cela m’a fait penser au Gibberish, qui exploite aussi les chaines de Markov, mais avec des groupes de n lettres au lieu de une seule. C’est cool. http://thinkzone.wlonk.com/Gibber/Gibber.htm
Je sais qu’on va me prendre pour un caca, mais je n’y connais absolument rien en codage et tout, donc si quelqu’un pouvait m’aider ce serait avec plaisir ^^ » parce que j’aimerai vraiment utiliser cet algorithme
J’arrive un peu après la bataille, mais j’ai trouvé quelque chose qui pourrait être utile aux linuxiens qui veulent tenter l’expérience avec d’autres langues.
Si vous avez Hunspell installé, allez dans le menu « Prise en charge des langues », installez les langues qui vous intéressent et allez dans « /usr/share/hunspell ». Tous les fichiers finissant en .dic contiennent alors la liste de tous les mots référencés dans cette langue !
Pour le Français, il y en a environ 754 000, pour le Breton (langue très peu connue), il y en a 465 000. Le seul problème est que les mots sont toujours suivis d’un slash et d’un nombre (peut-être une sorte de méta-donnée pour Hunspell). Idéalement, il faudrait donc faire un petit script pour supprimer tout ce qui suit les slashs sur chaque ligne de ces fichiers.
Par contre, je n’arrive pas à lancer le script sur mon pc, je ne pourrai pas vous envoyer de poème en faux Breton.
Je me suis fait piéger en regardant la vidéo. Quand j’ai voulu mettre en place l’algo, j’ai utilisé qu’une lettre, et les mots étaient effectivement super bizarre. Mais avec deux lettres, ca marche nickel ^^
Et j’ai testé aussi en jap, les mots sont à mourir de rire ^^
Finalement, vous arrivez à peu près au même résultat que finnegans wake, mais en plus clair.
Vous devriez vous pencher sur Finnegans Wake, et vous trouveriez peut-être que votre algorithme est une pure création divine!
Mais bon, pour visualiser un peu la bête, il faut imaginer 1000 pages de mots de la teneur de ceux produits en un peu moins clairs…
Merci pour la vidéo.
Pingback: La machine à inventer des mots (avec Code MU) — Science étonnante #17 — What Are You Looking For?
Quant les m’hâte-oeufs s’haies-saillent à inn-vnd-taies des maux qui ne veules rit-huns d’ir…. (rire de mes langes mets-dits-hume-mis-disques !) le raie-sue-le-tass n’est pas brille-en !
Il y a des inn-ventes-scions quilles serf’V…, à cons-dictions de les d’rire AAA-voir !§!
https://safeearthsolutions.wordpress.com
J’adore ! étant fan de excel, je me lance dans une version VBA. j’ai réussi à faire la matrice déjà.
On pourrais faire une version pour les prénoms aussi : générer de nouveaux prénoms à partir des existants et ce en fonction des pays. (j’ai trouvé une base de donnée qui en répertorie plusieurs milliers)
https://drive.google.com/file/d/0B9AXi–8e0ZdZFZFWWVFalFIUjQ/view?usp=sharing
Je me lance aussi sur le sujet en VBA avec les prénoms (j’ai la même liste que toi, et j’ai simplifié les caractères aux 26 « classiques ».
J’utilise les deux dernières lettres pour déterminer la nouvelle. Je bloque juste sur comment utiliser la matrice correctement. Actuellement je prends la probabilité la plus forte, au bout du compte, tous les mots se ressemblent).
Je cherche un moyen de faire un choix « parmi » les plus probables.
Salut Tristan, j’ai repris ton document et je l’ai complété pour pouvoir traiter les listes de mots en prenant en compte les deux dernières lettres des mots.
J’envisage de le mettre dans mon book, en te signalant en crédit, est-ce que cela te va ?
Je pense aussi que ça a un gros potentiel (notamment en peaufinant un peu le code pour que ce soit moins lourd, et en faisant un ou plusieurs fichiers avec toutes les langues, ainsi que les listes de prénoms et noms de famille) et qu’il faudrait le diffuser un peu en libre accès, qu’en penses-tu ?
Le fichier : https://www.dropbox.com/s/jb7632tm17kp150/RandomWord.xlsm?dl=0
(pour générer une liste de mots, il suffit d’utiliser la deuxième macro. Pour changer la liste de mots utilisée entre la matrice française et la matrice espagnole, les seules implémentées pour le moment, il suffit de changer le nom de la feuille au début du code de la macro)
Pourrai tu proposé une version graphique s’il te plait de ton code
Suite au visionnage de ta vidéo, j’ai fait une implémentation 1D.
En regardant le code, j’ai fait une implémentation 2D qui est beaucoup plus pertinente.
On pourrait faire la même chose en musique : un do après un la etc …
Absolument, et ce serait même une excellente idée.
Salut merci pour cet article !
Je vais essayé avec le polonais. 🙂 Bon il va falloir que j’arrive à faire tourner le code Python sur qch et comme je n’y connais rien ça va peut-être me prendre un peu de temps, En fait n’y connais rien à rien mais je m’intéresse à tout 🙂
Je te tiens au courant !
Merci.
Alex
Pingback: La machine à inventer des mots (avec Code MU) — Science étonnante #17 - Dicoy encyclopedyx citudoroy
Bonjour et merci pour cet article fabuleux.
Je me demande si l on ne pourrait pas simplifier le problème en coïnciderait uniquement les syllabes utilisées dans une langue, plutôt que les mots.
On calcul alors les mêmes statistiques aux niveaux des syllabes, ce qui donnerait des mots encore plus vrais que nature!
Qu en pensez-vous?
(correction)
Bonjour et merci pour cet article fabuleux.
Je me demande si l on ne pourrait pas simplifier le problème en considérant uniquement les syllabes utilisées dans une langue, plutôt que les lettres.
On calcul alors les mêmes statistiques aux niveaux des syllabes, ce qui donnerait des mots encore plus vrais que nature!
Qu en pensez-vous?
Bonjour David.
Premièrement félicitation pour ton travail dans son ensemble et pour cette vidéo très intéressante.
Serait-il possible d’avoir un lien vers une image du Tableau de probabilités de la langue française ? Je demande ici afin que cela servent à d’autres également ;).
Merci et bonne continuation à toi !
Je plussoie Mika ! En tant que scribouilleuse je suis diablement intéressée par votre tableau des probabilités 🙂
Merci pour le super travail que vous fournissez !
Pingback: La machine à inventer des mots (avec Code MU) — Science étonnante #17 - Blog NSellier TV
Intéressant. Ca me rappelle le logotron de Jean-Pierre Petit (savoir-sans-frontieres.com)
Salut David,
J’ai créé un petit program python sur Github à partir de tes exemples. Les résultats sont vraiment sympa!
https://github.com/buddly27/jound
Merci pour cette vidéo et pour toute la chaîne, que je regarde avec grand plaisir depuis que je l’ai découvert il y a quelques semaines.
Pour ceux qui aiment les néologismes : le Baleinié
https://fr.wikipedia.org/wiki/Le_Baleini%C3%A9
Merci beaucoup pour cette vidéo et ce billet ! Voilà quelques temps que j’essaye de mettre au point un générateur simple et efficaces me permettant de construire des nom « typiques » pour de la fiction !
Je penses essayer de customiser grandement le tableau pour créer d’autres « marqueur » dans les sonorités afin de créer des mots/noms qui donnent cette effet de même origine 🙂 ! Beaucoup d’expériences hyper intéressante en vue grâce à cette ouverture, encore merci !!!
(Bon par contre moi je suis nul en Python donc il va falloir traduire en vba ou en c …)
La bonne journée !
Bonjour, j’aimerais savoir si c’est possible de se procurer la base de donnée initiale des mots en français, le fameux mots_fr.txt (ou quelque chose qui en tienne lieu) parce que je ne vois pas comment faire fonctionner les codes python sans ^^
EDIT : Pour ceux qui se poseraient la même question que moi, il suffit d’aller chercher les bases de données de Lexique sur http://www.lexique.org puis de faire quelques manipulations via Excel pour en extraire la première colonne de la base de données Lexique 3.82, qui correspond aux mots en eux-mêmes.
Merci beaucoup pour le lien vers le dictionnaire français, ça m’a beaucoup aidé ! 🙂
Pingback: Les machines peuvent-elles inventer des mots ? – MasterTSM@Lille
Pour ceux qui seraient intéressés et qui codent des appli sous node.js, j’ai récemment codé un module de génération de pseudo-mots disponible sur « npm » et qui reproduit le modèle décrit dans cet article.
Largement inspiré par la vidéo de David, je m’en suis servi pour générer des noms de créatures fantastiques (nains, elfes, goblins, …).
module : https://www.npmjs.com/package/wordgenie
doc (disponible en anglais) : https://40thoughts.github.io/node-wordgenie/
Pingback: La machine à inventer des mots (avec Code MU) — Science étonnante #17 – PHP coding
Bonjour David.
On est longtemps après la sortie de la vidéo mais j’aurais voulu tester tes programmes et les liens ont l’air d’être morts…
Ai-je encore la possibilité de les trouver ?
Bonjour,
je suis aussi intéressé par les codes python mais effectivement les liens sont morts 🙁
Entre temps j’avais réussi à retrouver le github sur lequel se trouve le projet :
https://github.com/scls19fr/word_gen
Bonne création :p
Les liens vers le code sont morts. 🙁
Je confirme que les liens sont erronés.
Les liens sont morts 🙁
Coucou, j’avais pour ma part écrit un algorithme à base de racines latines et grecques, voire nordiques… Cela donne des mots hautement signifiants (comme le célèbre “capillotracté”)
J’aime beaucoup ce que tu fais 😉
Philippe (pallares@free.fr)
Bonjour,
Quand je clique sur les liens pour afficher le code ou pour générer des mots le navigateur me dit que les pages sont indisponibles.
Pourriez vous les remettre s’il vous plaît ?
Merci d’avance
Cordialement,
Salut ! je reviens de nombreuses années plus tard mais on sait jamais, mon sauveur se trouve peut être ici ! Je n’ai aucunes connaissances python mais j’ai vu un autre commentaire qui demandait comment trouver et lancer l’algorithme, j’ai suivi la procédure, j’ai winpython, j’ai ouvert spyder, et quand je cherche à lancer l’algorithme, on me dit : « [Errno 2] No such file or directory: ‘mots_FR.txt' », du coup j’imagine qu’il faut que je trouve la liste de mots, mais comment je fais pour que python la retrouve ? Si c’est une manœuvre trop compliquée pour un novice vous embêtez pas
Un radoteur et une routarde même lettres https://www.anagrammeur-expert.com/anagramme.php?letter=Radoteur mais un sens différent pour des jeux de mots en mouvement