Dans les cas d'usage "classiques", on traite d'informations chiffrées en entrée (un chiffre d'affaires, une taille de magasin, un nombre d'employés, un montant dépensé). Ces chiffres peuvent être ordonnés (4 est plus grand que 2), et positionnés sur une échelle (4 est 2 fois plus grand que 2). Pour les mots, cela devient plus complexe. Le mot "chien" n'est pas plus grand que le mot "chat" et "chien" ne vaut pas 2 fois "chat". Ces mots sont simplement des symboles arbitraires. Or, pour être capable de générer un label, toutes les relations mathématiques doivent permettre de comparer les informations entre elles pour ensuite définir des notions de proximité.
Première solution : les transformer en vecteur binaire. Supposons qu'il y ait 100 mots dans la langue française. On attribue un chiffre arbitraire à chaque mot, par exemple "chien" sera le mot 27. Ensuite, chaque mot sera représenté par un vecteur (un tableau d'une seule ligne) qui ne contient que des 0 sauf dans la case qui correspond à son chiffre. Dans notre cas, le mot chien aura donc un 1 en 27ème position et 0 partout ailleurs. On appelle cette représentation un token.
Le résultat obtenu peut être manipulé par un modèle mathématique. En revanche, cette définition apporte très peu d'information au modèle, car tous les mots sont exactement à la même distance les uns des autres. "Chien" est tout aussi différent de "chat" que de "voiture".
Plusieurs évolutions ont eu lieu dans le monde de la recherche, mais la plus performante est celle de l'embedding. La méthode consiste à chercher un vecteur, de taille plus petite que l'ensemble du vocabulaire (dans notre cas 100) qui représente correctement la distance qui sépare les mots entre eux. Pour apprendre ce vecteur, on cherche une relation mathématique entre les tokens précédents et un label. En 2013, des chercheurs de Google ([1]) développent un Algorithme qui cherche cette relation en prenant un morceau de phrase à laquelle ils retirent un mot au hasard. Le mot (son token) enlevé sera l'information d'entrée du modèle et les labels seront les tokens restants. Effectivement, prédire les 2 mots qui précèdent et succèdent à un autre peut paraître une tâche très compliquée, mais pour l'instant, on recherche surtout une bonne manière de représenter un mot.
Ce modèle fonctionne en 2 parties : une partie qui génère un vecteur de petite taille à partir du jeton d'entrée, et une partie qui donne une probabilité à ce que ce vecteur représente chaque jeton du dictionnaire.
Pour visualiser le résultat, on peut appliquer l'algorithme en dimension 2 (voir figure ci-dessous), bien qu'en pratique il est préférable de travailler en dimension bien plus élevée (autour de 500) pour améliorer la qualité de la représentation. Les dimensions n'ayant pas vraiment de sens humain, le travail de l'algorithme est de rapprocher les mots qui sont employés dans des contextes similaires.
Les mots représentant des pays sont proches les uns des autres, et loin des capitales qui sont proches entre elles. On remarque également une certaine cohérence géographique entre les mots.
La manière de calculer les embeddings à beaucoup évolué mais l'idée reste la même : les tokens doivent être transformés en vecteurs plus petits puis donnés à une tâche précise de Machine learning.
La génération de texte a connu une avancée significative avec l'arrivée des réseaux de neurones récurrents (RNN pour Recurrent Neural Network). Ces derniers rappellent un jeu auquel vous avez sûrement déjà participé : une personne choisit un mot, puis son voisin doit le redire en ajoutant un second mot, et le joueur suivant répète ces deux mots avant d'y ajouter un troisième, et ainsi de suite jusqu'à ce que la phrase se termine. L'idée des RNN est similaire avec la modification suivante : au lieu d'entendre la phrase complète avant de jouer, chaque joueur n'entend que son résumé donné par la personne précédente. À partir de celui-ci, il ajoute un mot, crée un nouveau résumé puis le transmet à son voisin.
Chaque mot passe par une couche de calcul pour être transformé en embedding puis est agrégé dans une seconde couche avec le résumé du joueur précédent. La tâche de supervision est de générer le prochain mot correctement.
Ces méthodes ont permis d'améliorer l'état de l'art mais peinent à générer un résumé suffisamment précis pour une longue histoire. Plusieurs modifications y ont été apportées, notamment l'arrivée des LSTM ([2] Long Short Term Memory), qui (comme leur nom l'indique) ont pour but d'avoir une mémoire sur le long terme... Mais toujours toujours pas assez long pour travailler sur des documents entiers.
Àretenir : dans un RNN, un résumé est mis à jour mot après mot. Ce résumé permet de générer le prochain mot.
Découvrez les dernières actualités, articles, replays de webinars et événements fifty-five dans notre newsletter mensuelle Tea O’Clock.