# 6. Plongements et apprentissage de représentations

Les réseaux de neurones transforment des entrées brutes en caractéristiques utiles en les apprenant plutôt qu'en les concevant à la main. Pour les symboles discrets (mots, identifiants de produits, identifiants d'utilisateurs, catégories), la représentation naturelle est un vecteur dense appris appelé plongement (embedding). Cette leçon montre pourquoi les codes one-hot sont une mauvaise entrée, comment une matrice de plongement associe chaque symbole à un vecteur compact, comment word2vec apprend de tels vecteurs à partir de la cooccurrence, et pourquoi les plongements sont l'entrée standard des modèles de séquences et des Transformers qui suivent.

## 6.1 Du one-hot aux vecteurs denses

### 6.1.1 La représentation one-hot

Supposons que le vocabulaire comporte $V$ symboles distincts. La façon classique de fournir le symbole $i$ à un réseau est le vecteur one-hot $x_{\text{onehot}} \in \{0, 1\}^V$, qui ne contient que des zéros à l'exception d'un unique $1$ à la position $i$. Il ne porte aucune structure : chaque paire de symboles distincts est exactement aussi éloignée que toutes les autres paires, si bien que le code ne contient aucune notion de similarité. Il est aussi énorme, un vocabulaire moderne a un $V$ de l'ordre de dizaines ou de centaines de milliers, et il est presque entièrement composé de zéros.

| propriété | one-hot | plongement appris |
| --- | --- | --- |
| dimension | $V$ (dizaines de milliers) | $d$ (dizaines à centaines) |
| creux | une seule entrée non nulle | dense, toutes les entrées utilisées |
| similarité | toutes les paires équidistantes | des vecteurs proches signifient des symboles liés |
| paramètres | aucun, fixe | appris à partir des données |
| taille en aval | énormes matrices de poids | caractéristiques compactes et réutilisables |

*Remarque :* fournir un vecteur one-hot à une couche linéaire $W x_{\text{onehot}}$ revient simplement à sélectionner une colonne de $W$. La recherche de plongement ci-dessous rend cette sélection explicite et peu coûteuse.

### 6.1.2 La recherche de plongement

Une matrice de plongement $E \in \mathbb{R}^{V \times d}$ stocke une ligne de dimension $d$ par symbole. Le plongement d'une entrée one-hot est le produit matrice-vecteur

$$\boxed{\; e = E^{T} x_{\text{onehot}} \in \mathbb{R}^{d} \;}$$

Comme $x_{\text{onehot}}$ possède un unique $1$ à la position $i$, ce produit renvoie simplement la ligne $i$ de $E$, si bien qu'en pratique il est implémenté comme une recherche dans une table $e = E_{i,:}$ et jamais comme une véritable multiplication. Le vecteur $e$ est court (dimension $d \ll V$) et dense.

*Remarque :* les lignes de $E$ sont des paramètres ordinaires. Elles démarrent aléatoires et sont mises à jour par rétropropagation en même temps que le reste du réseau, de sorte que la géométrie de l'espace est façonnée par la tâche sur laquelle le réseau est entraîné.

## 6.2 Apprendre des plongements de mots avec word2vec

Les plongements peuvent être appris de bout en bout à l'intérieur de n'importe quelle tâche, mais ils peuvent aussi être appris seuls à partir de texte non étiqueté. Le modèle skip-gram de word2vec fait exactement cela : il apprend un vecteur par mot en prédisant les mots de contexte environnants à partir d'un mot central.

### 6.2.1 Objectif skip-gram

Chaque mot $w$ possède un vecteur d'entrée $v_w$ (sa ligne dans la matrice de plongement). Étant donné un mot central $w_I$, le modèle attribue un score à chaque mot de sortie candidat $w_O$ par un produit scalaire et normalise sur l'ensemble du vocabulaire avec un softmax :

$$\boxed{\; p(w_O \mid w_I) = \frac{\exp\!\left(v_{w_O}^{T} v_{w_I}\right)}{\sum_{w=1}^{V} \exp\!\left(v_{w}^{T} v_{w_I}\right)} \;}$$

L'entraînement maximise cette probabilité pour les paires (central, contexte) qui cooccurrent réellement dans une fenêtre glissante le long du texte. Les mots qui apparaissent dans des contextes similaires sont poussés à avoir de grands produits scalaires, de sorte que leurs vecteurs finissent proches les uns des autres.

### 6.2.2 Échantillonnage négatif

Le dénominateur somme sur tous les $V$ mots, ce qui est bien trop coûteux à calculer pour chaque paire d'entraînement. L'échantillonnage négatif remplace le softmax complet par un problème binaire peu coûteux : pour chaque paire réelle (central, contexte), on tire quelques mots aléatoires comme négatifs et on entraîne le modèle à distinguer le vrai mot de contexte des faux. Cela transforme une normalisation à $V$ voies en une poignée de mises à jour logistiques par étape, ce qui rend word2vec assez rapide pour s'entraîner sur des milliards de mots.

![Flux du skip-gram, du mot central à la prédiction du contexte](/fr/Deep%20Learning/06%20Embeddings%20and%20representation%20learning/a/skipgram.svg)

*Le modèle skip-gram apprend des plongements en prédisant le contexte d'un mot à partir d'un mot central.*

*Remarque :* l'espace appris présente une structure linéaire frappante. Les directions qu'il contient encodent des relations cohérentes, de sorte que les analogies apparaissent sous forme d'arithmétique vectorielle, l'exemple classique étant que le vecteur de « roi » moins « homme » plus « femme » tombe près de « reine ».

## 6.3 Mesurer la similarité

Une fois les symboles devenus des vecteurs denses, « à quel point deux symboles sont-ils liés » devient une question géométrique. La réponse standard est la similarité cosinus, le cosinus de l'angle entre deux vecteurs $u$ et $v$ :

$$\boxed{\; \cos(u, v) = \frac{u^{T} v}{\lVert u \rVert \, \lVert v \rVert} \;}$$

Elle se situe dans $[-1, 1]$ : une valeur proche de $1$ signifie que les vecteurs pointent dans la même direction (très similaires), proche de $0$ signifie qu'ils sont sans rapport, et proche de $-1$ signifie qu'ils sont opposés. Le cosinus ignore la longueur des vecteurs et ne considère que la direction, ce qui est généralement ce que nous voulons, puisque le sens d'un mot ne devrait pas dépendre de sa fréquence d'apparition.

![Un nuage de points 2D de plongements de mots en deux groupes avec des flèches d'analogie parallèles](/fr/Deep%20Learning/06%20Embeddings%20and%20representation%20learning/a/embedding-space.png)

*Les plongements appris placent les mots liés les uns près des autres, et des directions cohérentes dans l'espace capturent les analogies.*

*Remarque :* la recherche des plus proches voisins sous la similarité cosinus est la façon dont les plongements alimentent la recherche d'information et la recommandation. Trouvez les vecteurs stockés dont la direction est la plus proche d'un vecteur de requête et vous obtenez les articles les plus pertinents.

## 6.4 Les plongements au-delà des mots

Rien dans cette construction n'est spécifique au langage. Tout ensemble de symboles discrets peut être plongé en lui attribuant une matrice $E$ et en apprenant ses lignes.

| domaine | symbole | ce que le plongement capture |
| --- | --- | --- |
| langage | mot ou token | sens et usage |
| recommandation | identifiant d'article | produits achetés ou consultés ensemble |
| recommandation | identifiant d'utilisateur | le profil de goûts d'un utilisateur |
| données tabulaires | modalité de catégorie | comportement de cette catégorie |

Dans un système de recommandation, une affinité prédite entre un utilisateur et un article se lit comme le produit scalaire de leurs plongements, la même opération qui attribuait un score aux mots plus haut :

$$\boxed{\; \text{score}(\text{user}, \text{item}) = v_{\text{user}}^{T} \, v_{\text{item}} \;}$$

Dans les modèles tabulaires, remplacer une colonne catégorielle à forte cardinalité par un plongement appris surpasse souvent l'encodage one-hot, car le modèle peut placer les catégories similaires les unes près des autres au lieu de les traiter comme sans rapport.

*Remarque :* les plongements sont aussi une forme de réduction de dimension. Ils compressent un symbole à $V$ voies en $d$ nombres tout en conservant l'information dont une tâche en aval a besoin, ce qui est l'essence même de l'apprentissage de représentations.

## 6.5 Les plongements comme entrée des modèles de séquences

Une séquence de symboles devient une séquence de vecteurs en recherchant chacun d'eux dans $E$. Cette matrice de plongements est exactement l'entrée qu'un réseau récurrent lit étape par étape (leçon [Réseaux récurrents](/fr/Deep%20Learning/07%20Recurrent%20networks)) et l'entrée sur laquelle un Transformer porte son attention (leçon [Transformers](/fr/Deep%20Learning/10%20Transformers)). Dans les deux cas, la table de plongement est apprise conjointement avec le reste du modèle, de sorte que les représentations sont ajustées à la tâche finale plutôt que fixées à l'avance.

![Un token one-hot multiplié par la matrice E sélectionnant un vecteur ligne dense](/fr/Deep%20Learning/06%20Embeddings%20and%20representation%20learning/a/embedding-lookup.svg)

*Une recherche de plongement sélectionne une ligne de la matrice E, faisant correspondre un token one-hot creux à un vecteur dense appris.*

*Remarque :* des plongements pré-entraînés peuvent être chargés comme point de départ puis affinés, de sorte qu'un modèle n'a pas à réapprendre la sémantique de base à partir de zéro. Ce transfert de représentations apprises est l'une des raisons pour lesquelles les modèles profonds généralisent si bien sur des données limitées.

*Les vecteurs denses nous donnent une entrée compacte et sensible à la similarité. La prochaine leçon fournit une telle séquence de vecteurs, une étape à la fois, à un réseau récurrent qui transporte un état caché à travers le temps.*

---
Suivant : [Réseaux récurrents](/fr/Deep%20Learning/07%20Recurrent%20networks) · [Vue d'ensemble du cours](/fr/Deep%20Learning)
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9