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

Comment se traduit la proximité sémantique dans le modèle de langage ?

Rappelons l’objectif que nous nous étions fixé lors de l’introduction à cette série d’articles : nous souhaitons construire un moteur de recherche qui va “au-delà des mots” et est capable d’intégrer le sens du texte.

Nous avons à disposition un modèle de langage, Universal Sentence Encoder (USE), qui produit une représentation géométrique sémantiquement cohérente sous forme de vecteurs de grandes dimensions. Une des caractéristiques de cette représentation est de traduire la proximité sémantique des textes entre eux. Plus deux textes sont sémantiquement proches, plus leurs représentations vectorielles respectives sont proches.

Notre moteur va effectuer ses recherches dans les corpus de textes, chacun étant représenté par un vecteur. Une requête faite par un utilisateur sera elle aussi traduite par un vecteur. Le résultat qui sera retourné à l’utilisateur est l’ensemble des textes du corpus dont la représentation vectorielle est suffisamment proche.

La notion de proximité employée ici doit vous sembler bien vague. Une clarification est nécessaire.

Éloignons-nous un moment du modèle USE au profit d’un modèle de langage plus simple : le “Bag Of Words” (littéralement sac de mots) où on se contente pour un texte donné de compter le nombre d’occurrences de chaque mot du vocabulaire.

Prenons maintenant un exemple très simple : on va considérer pour des besoins d’illustration seulement deux mots du vocabulaire : disons “politique” et “culture” et examinons le nombre d’occurrences de ces deux mots pour quelques textes.

Texte #nombre d’occurrences de “politique”nombre d’occurrences de “culture”
1103
2102
329
414

Sur le schéma qui suit on a représenté chaque texte par un vecteur dont la coordonnée x est le nombre d’occurrences du mot “politique” et la coordonnée y est le nombre d’occurrences du mot “culture”

Il est facile de se convaincre que les textes 1 et 2 peuvent être vus comme “assez” similaires car ils utilisent à peu près le même nombre de fois les deux mots qui nous intéressent.

L’exemple des textes 3 et 4 nous permet d’aller plus loin en disant que deux textes sont similaires s’ils utilisent les mots en proportions similaires.

Visuellement, on peut traduire ces propriétés de la manière suivante : les vecteurs représentant des textes similaires “pointent” ou “regardent” à peu près dans la même direction. Autrement dit, l’angle l’angle entre les 2 vecteurs est petit.

Nous y sommes presque : si nous avons un moyen de quantifier la “petitesse” de l’angle entre deux vecteurs, nous pourrons quantifier la similarité entre les deux textes qu’ils représentent. 

C’est à ce moment que les allergiques aux mathématiques risquent de souffrir sur les quelques lignes qui vont suivre, je leur témoigne toute ma compassion 😉 ; ne vous inquiétez pas ça va bien se passer !

Il existe une fonction mathématique qui a une valeur maximale (1) lorsque l’angle entre deux vecteurs est nul, prend la valeur 0 lorsque les vecteurs sont orthogonaux (90°) et une valeur minimale (-1) lorsqu’ils sont de directions opposées (180°) : il s’agit de la fonction cosinus. Or il se trouve qu’elle est très simple à calculer avec des vecteurs : il s’agit du rapport entre le produit scalaire1 des deux vecteurs et le produit des longueurs des deux vecteurs.

Donc calculer la similarité entre deux textes revient à calculer cette expression mathématique :

Au numérateur, on calcule le produit scalaire des représentations vectorielles des deux textes.

Au dénominateur, on calcule le produit des longueurs des représentations vectorielles des deux textes.

Cette similarité est appelée “similarité cosinus”.

Avec nos exemples, tous calculs faits, voici ce que nous obtenons 

Similarité CosinusAngle correspondant2 (°)
Texte 1, Texte 11.00
Texte 1, Texte 20.99557950271408155.39
Texte 3, Texte 40.99965391935284721.51
Texte 1, Texte 30.4882869822248527360.77
Texte 2, Texte 40.428086344739044764.65

Ces résultats nous permettent de vérifier que la similarité est bien proche de 1 quand les textes sont similaires et s’éloigne de cette valeur quand ils ne le sont pas.

Nous n’avons considéré pour la simplicité de l’exposé que des représentations des textes à deux dimensions, mais la notion de similarité telle que définie ici reste valable pour un nombre quelconque de dimensions.

Quittons maintenant ce modèle “Bag of Words” pour revenir à l’”Universal Sentence Encoder” qu’on peut voir par analogie comme un “Bag of Concepts”.

Pour celui-ci, la représentation d’un texte se base sur des concepts abstraits en lieu et place des mots du vocabulaire, les coordonnées des vecteurs représentent le “poids” de chaque concept alors que le Bag of Words compte le nombre d’occurrences de chaque mot. Cependant, la notion de similarité telle qu’elle vient d’être définie reste utilisable pour déterminer si deux textes sont similaires, à la différence que l’un (Universal Sentence Encoder) mesure une similarité sur des concepts, donc du sens, alors que l’autre (Bag Of Words) mesure la similarité sur les mots.

Et voilà ! Maintenant, nous avons à disposition les pièces nécessaires à la solution de recherche de texte sémantique que nous cherchons à bâtir :

  • un modèle de texte qui prend en compte le sens,
  • un moyen de mesurer la similarité entre les concepts sous-jacents au texte.

La suite au prochain épisode ! Cette fois on commencera à mettre les mains dans le cambouis : on va enfin voir du code !


(1) Le calcul du produit scalaire est la somme des produits de chaque coordonnée des deux vecteurs. La longueur d’un vecteur est la racine carrée de la somme des carrés de chaque coordonnée du vecteur, cette somme pouvant elle-même s’exprimer comme le produit scalaire du vecteur avec lui-même.

(2) Cet angle est calculé en utilisant la fonction “inverse cosinus” qui retourne l’angle dont le cosinus est la valeur d’entrée.

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

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 :