Générateur de pseudos aléatoires
Ce générateur de noms aléatoires essaie de fabriquer des noms prononçables, en imitant les fréquences des bigrammes qu'on trouve dans un dictionnaire : dans chaque langue, une lettre donnée a une certaine chance d'être suivie par une autre lettre donnée dans l'alphabet. Par exemple, en français, la lettre Q est presque toujours suivie par un U, et le C ne l'est presque jamais par un B. En tentant de reproduire ces "fréquences de suivi" dans les mots qu'on fabrique, on peut faire semblant qu'ils font partie d'une langue.
Dans mon alphabet, j'ai ajouté la "lettre" espace, qui détermine la fin d'un mot. La première lettre de chaque mot est choisie en fonction des fréquences des lettres après un espace (comme si tous mes mots commençaient par un espace, que je ne montre pas), et j'estime que quand un espace arrive dans ma chaine de caractères, le mot est terminé. Si je ne faisais pas ça, on pourrait potentiellement obtenir des phrases aléatoires, toutefois, puisque mes fréquences sont extraites d'un dictionnaire (sans les définitions), les fréquences de chaque lettre dans la phrase pourraient être légèrement incorrectes. Pour contrer cela, il faudrait faire une analyse de fréquences sur des articles ou des livres, ou quelque chose qui contient des phrases réelles : pour imiter des phrases il faut se baser sur des phrases, qui peuvent contenir plusieurs fois le mot "le", "des" ou autre, et pas une liste de mots dans laquelle chaque mot n'apparait qu'une seule fois. En plus de cela, j'ai retiré les mots de plus de 4 caractères de long de mon dictionnaire, ce qui ne serait pas réaliste de faire sur une collection de phrases.
Il me semble que ce que j'ai fait est très similaire aux chaines de Markov (si ce n'est identique ?). À l'avenir, j'aimerais recréer ce programme en me basant sur un réseau neuronal récurrent. Avec le même dictionnaire que celui mentionné précédemment, j'entrainerais le réseau neuronal à prédire quelle lettre suit une lettre donnée, en mélangeant l'ordre des mots dans le dictionnaire entre chaque session d'entrainement, pour ne pas convaincre le réseau que tous les mots commencent par X, Y ou Z, parce que c'est ce pour quoi il a été entrainé le plus récemment (à chaque fin d'entrainement). En "production", je demanderais au réseau quelle lettre il choisit pour faire suite à un espace, avant de lui demander quelle lettre suit celle qu'il vient de choisir et ainsi de suite. Une fois que le réseau aura choisi la "lettre" espace, je l'arrête et je prends comme "nom aléatoire" la chaine de caractères qu'il vient d'écrire.
Une ressource excellente pour apprendre à connaitre les réseaux neuronaux récurrents se trouve ici : karpathy.github.io/2015/05/21/rnn-effectiveness