De l’algorithme à la solution : un exemple d’exploitation d’un algorithme d’intelligence artificielle (2).

voir l’article précédent

Les modèles de langage

Résumé pour le lecteur pressé : le modèle de langage que nous allons utiliser fournit une représentation géométrique du langage qui modélise le sens des mots.

Pour approfondir vos connaissances sur le traitement du langage naturel, vous pouvez commencer par regarder cette vidéo très bien faite que la chaîne youtube Science Étonnante a publiée récemment. Je vous suggère également l’écoute de cet épisode de la Méthode Scientifique sur France Culture: « Traitement automatique des langages : do you speak computer« 

Comme vu en introduction, la solution que nous allons mettre en œuvre utilise un modèle de langage. Ici, nous allons chercher à comprendre les résultats produits par le modèle de langage “Universal Sentence Encoder” (USE pour faire court). 

Les modèles appliqués aux mots

USE fait partie d’une famille de modèles dits de plongement de texte (text embedding). Tous ces algorithmes ont la même “signature” : en entrée c’est du texte et en sortie un vecteur de dimension donnée, cette dimension étant assez grande (quelques centaines).

Ce vecteur est une représentation utile du texte. Plus précisément, un vecteur étant une succession de nombres, chaque nombre indique le poids d’un “certain” concept. Cet ensemble de vecteurs, un pour chaque mot, représente un modèle de langage.

Prenons des exemples pour nous donner une intuition : considérons le mot “ingénieur” et essayons de le caractériser à l’aide de concepts : “science”, “technique”, “métier”, “industrie” sont des concepts qui viennent à l’esprit. Pour le mot “Paris” viennent “capitale”, “France”, “ville”, « culture ». 

Ce que nous pouvons faire, c’est essayer de quantifier le “poids” de ces concepts pour chaque mot.

ingénieurParismédecin
science0.40.20.5
technique0.90.10.3
métier0.800.8
industrie0.70.10.1
capitale010
France010
ville010
culture0.20.50.2

Les modèles de plongement de texte produisent ce genre de quantification, à la différence notable que les concepts qu’ils manipulent n’auront pas de signification tangible pour nous. Il se trouve que cette limitation n’en est pas une, car l’utilité de ces modèles est d’obtenir une représentation qui modélise la plus ou moins grande proximité des mots entre eux. Cette représentation est un vecteur de grandes dimensions (512 dans le cas de USE).

Comprendre en détail comment ces modèles de langage sont générés sort du cadre de cet article, mais on peut quand même retenir la démarche : on utilise un grand ensemble de textes (qu’on nommera par la suite corpus ou corpus de texte) qu’on fournit à un algorithme chargé de découvrir (c’est à dire apprendre) la représentation des mots. 

Cet apprentissage se fait en essayant de prédire la présence d’un mot dans un contexte donné. Plus précisément, l’algorithme va essayer de prédire la probabilité qu’un mot apparaisse dans un contexte donné (une phrase, ou un groupe de mots successifs du corpus par exemple) en masquant ce mot du contexte. Au fur et à mesure de l’apprentissage sur le corpus, la représentation des mots s’affine.

On peut intuitivement comprendre que cette représentation sera par exemple apte à prendre en compte les synonymes : il est naturel qu’un mot ou ses synonymes apparaissent dans un contexte équivalent, c’est-à-dire qu’ils aient une probabilité équivalente d’apparaître dans un contexte donné. De ce fait, des synonymes auront une représentation proche.

Il se trouve que ce processus amène à une représentation du texte qui a des propriétés particulièrement intéressantes : en particulier, ces modèles de langage ont des propriétés “géométriques” surprenantes.

Ainsi, si l’on considère la représentation (vectorielle) des mots “Paris” et “France” d’une part puis “Londres” et “Angleterre”, il se trouve que l’égalité suivante est correctement vérifiée:

Paris – France ≈ Londres – Angleterre

Autrement dit : “Paris est à la France ce que Londres est à l’Angleterre”

Si l’on traduit graphiquement cette propriété, on obtient cette représentation

Dans cet exemple, le vecteur reliant une “certaine” ville à un pays traduit la notion de capitale. C’est là un résultat surprenant : l’espace de représentation sémantique que l’on a obtenu comporte une cohérence géométrique.

Paris – France ≈ Londres – Angleterre ≈ capitale

Ces propriétés géométriques nous permettent ainsi d’avoir une bonne intuition et une bonne compréhension des résultats fournis par les algorithmes de plongement de texte.

J’attire votre attention sur le point suivant : ces égalités qui vous sont présentées ne sont pas des égalités strictes. Elles sont en fait approximatives. Il existe un certain nombre d’outils en ligne qui vous permettent de jouer avec des modèles de langages, comme celui-ci WebVectors: Semantic Calculator. Vous pourrez vérifier la (plus ou moins grande) validité de ces propriétés sur vos propres exemples1.

Pour terminer sur ces modèles de langages, sachez qu’il en existe de nombreux, mais on peut citer les plus connus par ordre chronologique de découverte:

Ces modèles produisent leurs résultats avec des approches différentes. Le détail de ces modèles sort du cadre de cet article. Pour les plus téméraires, vous pouvez lire les publications de recherche 😉

En ce qui concerne leurs performances, comme on peut s’en douter, plus ils sont récents, meilleures sont leurs performances. 

Extension aux phrases

Jusqu’à présent nous nous sommes cantonnés à obtenir un modèle applicable à des mots, c’est-à-dire qu’à un mot donné, le modèle associe une représentation pertinente sous forme d’un vecteur.

Nous voulons maintenant une représentation pour un ensemble de mots qui forme une ou des phrases. C’est ce que propose le modèle USE (La publication est disponible ici).

Une première approche naïve pourrait consister à effectuer une moyenne des représentations de chaque mot constituant la phrase en entrée. Hélas, les résultats sont décevants. Et ceci est intuitivement compréhensible : une moyenne ne tient pas compte de la place relative des mots entre eux. Autrement dit, la notion d’ordre est perdue. On perçoit donc la limitation d’un tel modèle.

Il se trouve que l’on n’a pas sous la main une heuristique satisfaisante pour définir la représentation d’une phrase à partir de la représentation des mots qui la constituent. L’approche suivie par les concepteurs d’USE consiste à apprendre cette heuristique, c’est-à-dire comment combiner les représentations des mots via un encodeur.

L’apprentissage des paramètres de cet encodeur est fait de la manière suivante : 

  • phase dite de propagation ou feed forward : pour un texte qu’on lui soumet, il calcule une représentation de cette phrase en fonction de ses paramètres actuels2
  • Cette représentation est soumise à une tâche de traitement du langage. Au vu des objectifs de cette tâche, une erreur est commise. 
  • phase de rétro propagation ou backward propagation : cette erreur permet de mettre à jour les paramètres pour diminuer l’erreur constatée. 

Cette opération est répétée sur un très grand nombre de phrases et sur plusieurs tâches de traitement du langage :

  • prévision des phrases précédentes et suivantes pour une phrase donnée issue d’un corpus de textes longs.
  • détection de la réponse pertinente à une question ou un post de forum, la réponse étant présentée en même temps que d’autres phrases aléatoirement prises dans le corpus.
  • déterminer si, étant donné une phrase, une autre phrase confirme, contredit ou est neutre par rapport à la première phrase.

Bien évidemment, on passe sous silence ici de très nombreux “détails” d’implémentation (très) techniques car notre objectif se limite ici à décrire les grandes lignes du processus. 

Avant de finir cette présentation, il faut ajouter un point : le modèle de language USE se comporte bien pour des textes “pas trop longs”, typiquement des phrases ou des paragraphes courts. Au-delà, il y a un phénomène de dilution du sens qui apparaît.

Nous avons maintenant une meilleure compréhension de ce qu’est un modèle de langage, nous allons pouvoir l’exploiter pour bâtir une solution. C’est ce que nous allons voir dans le prochain article.


(1) Cette démo est valable pour l’anglais. Les mots que l’on saisit doivent être suffixés par leur type (“_NOUN”, “_PROPN”, “_VERB”,..) une autocompletion vous est proposée. Vous pouvez également regarder ces démos: Word to Vec JS Demo ou Word embedding demo

(2) Ces paramètres sont fixés aléatoirement au départ.

4 réflexions sur “De l’algorithme à la solution : un exemple d’exploitation d’un algorithme d’intelligence artificielle (2).

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

%d blogueurs aiment cette page :