Apprendre à lire à un ordinateur
On vous explique comment on arrive aujourd'hui à faire comprendre le sens des mots à nos ordinateurs
2022-03-18
Un ordinateur ne comprend généralement pas grand-chose tout seul. Pour lui, toute information n’est qu'une suite de “bits”, de l’information sous forme binaire : 01101000101. À vrai dire, il ne sait manipuler que des chiffres… Mais alors, comment réussir à lui faire comprendre du texte en français ? Et même plus, un texte de rap ?
Stratégie générale
Et bien comme on aime beaucoup le faire en science, on va essayer de se ramener à un “cas connu” que l’on sait résoudre. Comme on l’a dit précédemment, un ordinateur sait manipuler des chiffres. Il sait même faire plus que ça : manipuler ce qu’on appelle des “vecteurs”. Un vecteur, c’est une représentation mathématique qui comprend plusieurs chiffres à la fois. On peut faire un parallèle avec la géométrie en 2D ou en 3D : un vecteur va être défini par les valeurs de ses positions selon les axes x, y, et z. Mais on peut évidemment dépasser 3 dimensions, 4, 5, 6… Autant qu’on veut, en fait.
L’avantage des chiffres, c’est qu’ils sont faits pour être mesurés. On peut comparer deux nombres, ou encore mesurer la distance entre deux vecteurs. Donc a priori, réussir à représenter du texte sous la forme de vecteur semble être une bonne idée pour que notre ordinateur nous comprenne enfin. Comment faire alors ?
Il existe beaucoup, beaucoup de méthodes pour y arriver. C’est le cœur de la discipline qu’on appelle “NLP” pour “Natural Language Processing” en français : “Traitement du Langage Naturel”. On appelle “Language Naturel” toute langue qui a évolué naturellement au sein de l’humanité.
Une première méthode
La méthode la plus naïve pour y arriver est de simplement créer une dimension de vecteur par mot. Par exemple, si on cherche à représenter des couplets de rap de cette manière, c’est un peu comme si on créait un gros tableau dont les colonnes représentent tous les mots existants, et les lignes des couplets de rap. On remplit alors ce tableau en faisant figurer le nombre d'occurrences de chaque mot pour chaque couplet.
Mais cette méthode mène à des dimensions bien trop grandes (autant que de mots en l'occurrence), et ne permet pas de rapprocher des mots synonymes, ou même des mots qui ont un sens similaire. Avec cette méthode : “Kichta” sera aussi prêt de “Moula” que de “Bonjour”, et ça, c’est problématique.
Une meilleure méthode
C’est en 2013, qu’une équipe de chercheurs de Google vont créer un algorithme révolutionnaire, qu’ils ont appelé Word2Vec (à ne pas confondre avec Guy2Bezbar qui n’est bien évidemment pas un algo, mais ça, vous le savez). La méthode d'apprentissage de cet algo est basée sur des réseaux de neurones artificiels, un domaine de l'intelligence artificielle. Une explication plus profonde est disponible dans cet article.
Pour faire court, cet algorithme va apprendre à prédire un mot en fonction de son contexte, c'est-à-dire des mots qui l'entourent. Avec cette technique, les mots qui sont souvent entourés du même contexte vont être représentés sous la forme de vecteurs proches, des mots similaires. On peut choisir le nombre de dimensions qu’on souhaite, en général, ce chiffre est compris entre 100 et 1000.
De cette manière, des phrases comme :
"Tout ce que je veux c’est la moula"
"Tout ce que je veux c’est la kichta"
"Bonjour moi c’est Michel"
Vont rapprocher "moula" et "kichta", et éloigner "bonjour", et ça, c’est quand même mieux. Cette technique permet aussi de retrouver les champs lexicaux d’un texte en trouvant les plus grands groupes ou "clusters" de mots similaires. C'est cette méthode qu'on utilise dans nos analyses d'albums Tape Analysis pour extraire les 3 principaux champs lexicaux :
Et ce qui est le plus impressionnant, c’est que ces vecteurs peuvent être combinés entre eux, tout en gardant leur sens. En notant vect(mot) le vecteur représentant le mot associé, on peut même constater ce genre d’opérations :
vect(rappeur) - vect(mec) + vect(meuf) = vect(rappeuse)
vect(Michael Jackson) - vect(musique) + vect(basket) = vect(Michael Jordan)
Pour représenter un couplet de rap, ou même un artiste, on peut alors simplement faire la moyenne de tous les vecteurs de mots, et former ainsi un vecteur pour l'ensemble du couplet, ou l'ensemble de la discographie d'un artiste.
Pour aller plus loin ...
On peut même faire plus précis : filtrer uniquement certains mots comme les noms communs ou les verbes, réduire les mots à leur racines (infinitif pour les verbes, singulier pour les noms communs...) et même pondérer chaque vecteur par son score de “mot caractéristique”, mais ça, c'est le sujet d'un autre article.
Comme on a pu le préciser ci-dessus, il existe depuis une grande sélection d'algorithmes pour transformer un mot, une phrase, un paragraphe, ou même un livre en vecteur. Parmi eux :
Word2Vec, Doc2Vec, Sentence2Vec, GloVe, BERT, ...
Tant de méthodes qui permettent aujourd'hui de créer des outils complexes comme les chatbots de nos smartphones 🤖