Apprendre à rapper à un ordinateur
On vous explique comment on a réussi à créer un algorithme qui génère des rimes comme ton rappeur préféré
2022-05-06
On utilise de l’IA pour tout faire aujourd’hui, alors pourquoi pas pour écrire des lyrics de rap ? Avec tous les textes et les punchlines qu’on a collectés, on s’est mis en tête de construire un générateur de lyrics. Pour faire vite : une IA écrit des textes en s’exprimant de la même manière que des rappeurs. On vous explique comment ça marche.
Posons d'abord les bases
Notre objectif : essayer de créer une "IA", un "générateur", un "bot", capable d'enchaîner un texte français et cohérent, d’utiliser le vocabulaire et les thématiques du rap, de reproduire ses structures de texte (longueur des phases, nombre de mesures par exemple). Et si en plus de tout ça le texte contient des rimes… dinguerie.
Bien sûr, l’objectif, c’est que cette IA ne reproduise pas juste à l’identique des couplets ou des punchlines qui existent déjà, mais qu’elle soit capable de proposer un texte inédit.
Comprendre les codes du Rap FR
Dans des textes de rap, il y a des codes constants à travers de nombreux textes sans que ce soit explicite : figures de style, structures, rimes, rythme, ad-libs. Tous ces éléments sont régis par des règles qu’on ne voit pas au premier abord, mais que l'on ressent. Ces règles peuvent être captées par des algorithmes, moyennant une kichta de données assez conséquente.
Ça veut bien dire qu'on a une constante, un truc en nous
On répond déjà à un algorithme
Voilà, c'est ça, c'est un putain d'algorithme
Y'a un espèce d'algorithme de la vie
- VALD - No Friends
D'abord, il faut avoir en tête qu’un ordinateur sait lire. Lire, ça veut dire constater statistiquement le sens, les liens et les rôles qu’ont les mots, en fonction de leur place dans leur phrase (on a écrit un article à ce sujet ici).
Pour écrire, on ré-utilise globalement toutes les méthodes de la lecture mais avec une étape supplémentaire : apprendre à l’ordinateur à évaluer les liens entre les mots et leurs contextes au lieu de “simplement” les constater.
Lil GPT-2
L'architecture qu’on a retenue pour créer ce générateur est un modèle de Deep Learning, "réseau de neurones profonds" en français, appelé GPT-2. Certains éléments techniques sont expliqués ici si tu veux en savoir un peu plus.
De nombreux modèles pré-entraînés sur certaines tâches spécifiques sont disponibles en open-source (ça veut dire que c’est gratuit, en gros) pour la communauté scientifique. Le modèle GPT-2 que l’on a utilisé est le modèle Small (petit en anglais, on pourrait le surnommer Lil GPT-2), qui contient déjà 124 millions de paramètres. Un modèle XL existe, et contient 1.5 milliards de paramètres. Mais il existe aussi une nouvelle version, GPT-3, qui comprend (attention) 175 milliards de paramètres (the notorious GPT-3).
Le fonctionnement d’un modèle GPT-2 se résume en fait simplement : à partir d'un mot, d’un début de phrase, d’une phrase qu’on lui soumet, l'ordinateur va essayer de prédire la suite. Plus précisément : il va donner à chaque mot qu'il connait une probabilité d'être le prochain. C’est le même principe qu’un clavier de smartphone, qui propose souvent des suggestions de mots suivants. Et si on répète ça plusieurs fois en injectant au fur et à mesure nos nouveaux mots, on va générer plusieurs mots à la suite, une phrase, puis un couplet.
Ces modèles sont récents et innovants, mais aussi assez complexes techniquement. Ils sont même difficilement interprétables par l’être humain : on connaît leurs structures, la façon dont ils fonctionnent et leurs résultats, mais on ne sait pas vraiment expliquer comment chaque paramètre influe sur le résultat. C'est souvent le cas pour des algorithmes complexes, on parle de phénomène de "black box". On sait que ça fonctionne, mais on ne peut pas expliquer le résultat.
Pourtant, ils sont (relativement) simples à manipuler. Ils sont populaires car ils marchent très bien, et dans plein de domaines différents : chatbots de services clients, résumés automatiques de textes, génération de scripts... Tellement bien, que des versions encore plus poussées ne sont pas dévoilées au grand public pour éviter des utilisations mal intentionnées, comme par exemple générer en masse des fake news.
Commençons nos cours de Rap
Pour que l'algorithme soit exploitable, il faut d’abord l’avoir formé correctement à notre tâche. Comment lui faire apprendre quels mots utiliser pour ressembler à un couplet de rap ? Quels mots sont meilleurs que d’autres à un moment précis d’une phrase ? C'est ce qu'on appelle la phase d’apprentissage ou d’entraînement d’un modèle. Ça consiste en gros à lui soumettre des exemples de texte, et à lui laisser mettre à jour progressivement ses paramètres, ses “critères” qui lui permettent d’expliquer les liens entre les mots. Prenons un petit exemple simplifié :
Porte de la Chapelle, terminus
Tout le monde descend, reste ou prend son bus
- Doc Gynéco - Dans ma rue
Très belle rime en -us, avec des termes d'un même champ lexical : "terminus" et "bus". Pour s'entraîner à faire pareil, l'algorithme va par exemple retirer le dernier mot "bus", et essayer de prédire une suite lui-même.
Porte de la Chapelle, terminus
Tout le monde descend, reste ou prend son métro
- Bot Gynéco - Dans ma puce
“Bus” et “métro” sont dans le même champ lexical (ils sont généralement employés dans un même contexte), ça semble bien. Par contre, “terminus” et “métro” ne riment pas (ils ne sont généralement pas employés l’un après l’autre en fin de vers), ça semble moins bien. Il ajuste alors ses paramètres pour qu’une “meilleure” réponse soit proposée à l’avenir si on lui repose une question similaire.
Plus on a de textes à lui soumettre, plus il aura été confronté à des cas de figures différents, et meilleur il sera. Avec trop peu de textes, l’ordinateur apprendra mal à généraliser et ressortira alors des séquences identiques. On appelle ça du sur-apprentissage.
Step by step
En général, on va préférer entraîner ces gros modèles par étapes. On va essayer dans un premier temps d'apprendre des concepts génériques à l’algorithme (c’est la partie la plus longue, qui nécessite le plus de données), pour ensuite lui donner des caractéristiques plus précises.
On a procédé en trois étapes : on est parti de l’algorithme pré-entraîné GPT-FR-cased-small (générateur de texte en français, entraîné par Quantmetry et le Laboratoire de Linguistique Formelle), qu’on a ensuite spécialisé à rapper sur des couplets de rap Français (pour apprendre à créer des vers, des rimes, du rythme...) puis enfin spécialisé à nouveau sur chaque rappeur pour imiter leur style, leur vocabulaire, leurs gimmicks.
Un peu de déstabilisation pour finir ...
Pour vulgariser, on a menti (déso). Notre modèle ne prédit pas des mots, mais des octets (des "bytes" en anglais). Disons des morceaux de mots, ce qui peut s'apparenter à des syllabes par exemple. Ça rend le modèle capable de créer des mots, sur des bases sémantiques réelles, et probablement de mieux identifier les rimes.
Autre point, on ne veut pas toujours retenir le mot le plus probable au risque d’être peu créatif et trop proche des textes originaux. L'idée, c'est d’aller choisir aléatoirement dans les mots possibles, mais en les pondérant par leurs probabilités. Comme ça, des mots plus inattendus, surprenants, pourront être utilisés tout en restant appropriés au contexte.
Et voilà le résultat
Cousin, y a pas d'mystère, j'dis c'que j'veux et je nique tout comme ce militaire
Ouais fils, tu peux m'croiser avec une p'tite-tasse en string panthère (ouais gros)
- Alkbote
Oui mes gars kiffent le son, oui c’est moi qui les ai choqué
Bande organisée sur l’autoroute avec mon équipe on est là posés
- Jool
Négro paralysé, loin du haram et des sheytanisés
J'ai toujours été là, malgré les années, niquer des mères : ma destinée
- B2oia
C'est pas trop mal hein ? Si tu veux générer des couplets, c'est par ici