Aller au contenu

Plongements Vectoriels (Embeddings)

Ce que vous saurez dans 3 minutes

Vous découvrirez comment les machines “comprennent” le sens sans rien connaître au langage. Nous coderons en Python un calculateur de similarité pour prouver mathématiquement que “Roi” est plus proche de “Reine” que de “Camion”, et nous explorerons l’arithmétique des idées qui permet d’additionner et soustraire des concepts.


1. Comprendre

L’Analogie du Supermarché

Comment expliquer à un robot que “Lait” et “Yaourt” vont ensemble, mais “Marteau” va ailleurs ? Imaginez un supermarché. Chaque rayon a des coordonnées GPS (X, Y).

  • Lait : Rayon 4, Étagère 2 -> Coordonnées [4, 2]
  • Yaourt : Rayon 4, Étagère 3 -> Coordonnées [4, 3]
  • Marteau : Rayon 42, Étagère 1 -> Coordonnées [42, 1]

En calculant la distance entre les points, le robot “sait” que le lait est proche du yaourt. Un Embedding fait exactement la même chose, mais dans un espace à 1536 dimensions (pour OpenAI text-embedding-3-small), capturant des nuances infiniment subtiles (tonalité, genre, technicité, émotion, etc.).

La Visualisation Mentale

xychart-beta
    title "Espace Sémantique Simplifié (2D)"
    x-axis "Royal <---> Roturier" [0, 10]
    y-axis "Féminin <---> Masculin" [0, 10]
    line [9, 9] text "Roi"
    line [9, 1] text "Reine"
    line [1, 9] text "Homme"
    line [1, 1] text "Femme"
    line [5, 5] text "Chaise (Neutre)"

(Note : Ce diagramme est une simplification conceptuelle. Les vrais embeddings sont multidimensionnels et non linéaires).


2. Appliquer (Hard Tech)

Comment calcule-t-on la “proximité” ? Pas avec une règle, mais avec le Cosinus Similarité.

La Mathématique (LaTeX)

L’objectif est de mesurer l’angle theta entre deux vecteurs A et B.

  • Si cos(theta) = 1 : Vecteurs alignés (Synonymes parfaits).
  • Si cos(theta) = 0 : Vecteurs orthogonaux (Aucun rapport).
  • Si cos(theta) = -1 : Vecteurs opposés (Antonymes).

La formule utilisée par toutes les bases de données vectorielles (Pinecone, Milvus) est :

\text{similarity}(\mathbf{A}, \mathbf{B}) = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \|\mathbf{B}\|} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \sqrt{\sum_{i=1}^{n} B_i^2}}

Implémentation Python

Voici à quoi cela ressemble concrètement avec les librairies standard de Data Science (numpy et scikit-learn).

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
# 1. Définissons des "Concepts" (Vecteurs simplifiés à 3 dimensions)
# Imaginons les axes : [Royauté, Masculinité, Comestible]
vec_roi = np.array([[0.9, 0.9, 0.0]]) # Très royal, Très masculin, Pas comestible
vec_reine = np.array([[0.9, 0.1, 0.0]]) # Très royal, Peu masculin, Pas comestible
vec_pomme = np.array([[0.0, 0.5, 0.9]]) # Pas royal, Neutre, Très comestible
# 2. Calculons les distances (Similarité Cosinus)
dist_roi_reine = cosine_similarity(vec_roi, vec_reine)[0][0]
dist_roi_pomme = cosine_similarity(vec_roi, vec_pomme)[0][0]
print(f"Similarité Roi <-> Reine : {dist_roi_reine:.4f}")
# Output attendu: ~0.89 (Très proche)
print(f"Similarité Roi <-> Pomme : {dist_roi_pomme:.4f}")
# Output attendu: ~0.37 (Éloigné)

3. Aller plus loin

L’Algèbre du Sens (Word2Vec)

En 2013, les chercheurs de Google (Mikolov et al.) ont découvert une propriété fascinante. On peut additionner et soustraire des sens :

Vecteur(“Roi”) - Vecteur(“Homme”) + Vecteur(“Femme”) ≈ Vecteur(“Reine”)

Cela signifie que le modèle a encapsulé le concept de “Genre” comme un vecteur de direction constant dans l’espace. “Aller d’Homme vers Femme” est le même mouvement géométrique que d’aller de “Roi vers Reine” ou de “Oncle vers Tante”.

Le RAG : Le Moteur de Recherche Vectoriel

C’est l’application reine en entreprise.

  1. Query : “J’ai perdu mon badge.”
  2. Vectorisation : La phrase devient un vecteur.
  3. Recherche : On trouve dans la base de connaissance le paragraphe dont le vecteur est le plus proche (ex: “Procédure de remplacement de carte d’accès”).
  4. Magie : Ça marche même s’il n’y a aucun mot commun (“Badge” vs “Carte d’accès”).

La Malédiction de la Dimensionnalité

Plus on ajoute de dimensions, plus les points s’éloignent les uns des autres, rendant la recherche exhaustive trop lente. C’est pourquoi on utilise des algorithmes d’indexation approximative comme HNSW (Hierarchical Navigable Small World) pour naviguer dans ces espaces gigantesques en quelques millisecondes.


Questions Fréquentes

Quelle est la différence entre Tokenisation et Vectorisation ? La Tokenisation découpe le texte en morceaux (ex: “Chat” -> ID 452). C’est juste un dictionnaire. La Vectorisation attribue le sens (ex: ID 452 -> [0.2, 0.9, ...]). C’est la compréhension.

Les Embeddings fonctionnent-ils entre les langues ? Oui ! Dans des modèles multilingues, le vecteur pour “Cat” (Anglais), “Gato” (Espagnol) et “Chat” (Français) est quasiment identique. Ils atterrissent au même endroit dans l’espace sémantique, permettant de faire de la recherche cross-lingue sans traduction explicite.


Notions Liées (Spider Web)

  • Application : RAG (L’usage principal).
  • Fondation : Token (L’unité de base).
  • Architecture : Transformer (Le créateur de vecteurs).

Ressources Externes

  • Outil : TensorFlow Projector (Extraordinaire visualisation 3D).
  • Papier Fondateur : Efficient Estimation of Word Representations in Vector Space (Word2Vec, 2013).