Dans cette section, vous découvrirez plusieurs moyens d'obtenir des embeddings et comment transformer des embeddings statiques en embeddings contextuels.
Techniques de réduction de la dimensionnalité
De nombreuses techniques mathématiques capturent les structures importantes d'un espace de grande dimension dans un espace de dimension inférieur. En théorie, chacune de ces techniques peut être utilisée en vue de créer un embedding pour un système de machine learning.
Par exemple, l'analyse en composantes principales (ACP) a été utilisée pour créer des embeddings lexicaux (ou "plongements lexicaux"). Lorsqu'on lui donne un ensemble d'instances, comme des vecteurs de sac de mots, l'ACP tente d'identifier les dimensions hautement corrélées qui peuvent être regroupées en une seule dimension.
Entraîner un embedding dans le cadre d'un réseau de neurones
Vous pouvez créer un embedding tout en entraînant un réseau de neurones pour votre tâche cible. Cette approche permet d'obtenir un embedding parfaitement adaptée à votre système, mais peut prendre plus de temps que d'entraîner l'embedding séparément.
En général, vous pouvez créer une couche cachée de taille d dans votre réseau de neurones, appelée couche d'embedding, où d représente à la fois le nombre de nœuds dans la couche cachée et le nombre de dimensions dans l'espace d'embedding. Cette couche d'embedding peut être combinée avec d'autres caractéristiques et couches cachées. Comme dans tout réseau de neurones profond, les paramètres seront optimisés lors de l'entraînement pour réduire au maximum la perte sur les nœuds de la couche de sortie du réseau.
Pour revenir à notre exemple d'aliments recommandés, notre objectif est de prédire de nouveaux plats qui plairont à un utilisateur en fonction de ses plats favoris actuels. Tout d'abord, nous pouvons compiler des données supplémentaires sur les cinq aliments préférés de nos utilisateurs. Ensuite, nous pouvons modéliser cette tâche comme un problème d'apprentissage supervisé. Nous définissons quatre de ces cinq aliments comme données de caractéristiques, puis nous choisissons de manière aléatoire le cinquième aliment comme étiquette positive que notre modèle doit prédire, en optimisant les prédictions du modèle avec une perte softmax.
Lors de l'entraînement, le modèle de réseau de neurones apprendra les pondérations optimales pour les nœuds de la première couche cachée, qui sert de couche d'embedding. Par exemple, si le modèle contient trois nœuds de la première couche cachée, il pourrait déterminer que les trois dimensions d'aliments les plus pertinentes sont la sandwichité, la dessertité et la liquidité. La figure 12 montre la valeur d'entrée avec un encodage one-hot pour "hot dog" transformée en vecteur tridimensionnel.
![Figure 12. Réseau de neurones pour l'encodage one-hot de hot dog. La première couche est une couche d'entrée comportant cinq nœuds, chacun accompagné d'une icône de l'aliment qu'il représente (bortsch, hot dog, salade, ... et shawarma). Ces nœuds ont respectivement les valeurs [0, 1, 0, ... et 0], représentant l'encodage one-hot de "hot dog". La couche d'entrée est liée à une couche d'embedding à trois nœuds, lesquels ont respectivement les valeurs 2,98, -0,75 et 0. La couche d'embedding est liée à une couche cachée à cinq nœuds, elle-même liée à une couche de sortie à cinq nœuds.](https://developers.google.com/static/machine-learning/crash-course/embeddings/images/one_hot_hot_dog_embedding.png?hl=fr)
hot dog
fourni en entrée à un réseau de neurones profond. Une couche d'embedding traduit l'encodage one-hot en vecteur d'embedding tridimensionnel [2.98, -0.75, 0]
.
Au cours de l'entraînement, les pondérations de la couche d'embedding seront optimisées afin que les vecteurs d'embedding pour des exemples similaires soient plus proches les uns des autres. Comme mentionné précédemment, les dimensions qu'un modèle réel choisit pour ses embeddings ne seront probablement pas aussi intuitives ni compréhensibles que dans cet exemple.
Embeddings contextuels
L'une des limites des vecteurs d'embeddings statiques word2vec
est que les mots peuvent avoir différentes significations selon le contexte. "C'est ça ?" signifie une chose en soi, mais le contraire dans l'expression "Oui, c'est vrai". De même, "poster" peut signifier, entre autres, "publier", "envoyer un message", "mettre à la poste" ou "placer à un poste déterminé".
Toutefois, avec des embeddings statiques, chaque mot est représenté par un seul point dans l'espace vectoriel, même s'il peut avoir différentes significations.
Dans le dernier exercice, vous avez découvert les limites des embeddings statiques pour le mot orange, qui peut être une couleur ou un fruit. Avec un seul embedding statique, orange sera toujours plus proche d'autres couleurs que du jus de fruit quand ce mot est entraîné sur l'ensemble de données word2vec
.
Les embeddings contextuels ont été développés pour pallier cette limite. Ils permettent à un mot d'être représenté par plusieurs embeddings qui intègrent des informations sur des mots apparentés ainsi que sur le mot lui-même. Orange aurait un embedding différent pour chaque phrase unique contenant le mot dans l'ensemble de données.
Certaines méthodes de création d'embeddings contextuels, comme ELMo, prennent l'embedding statique d'un exemple, tel que le vecteur word2vec
d'un mot dans une phrase, et le transforment par une fonction qui intègre des informations sur les mots qui l'entourent. Cela aboutit à un embedding contextuel.
Cliquez ici pour en savoir plus sur les embeddings contextuels
- Pour les modèles ELMo en particulier, l'embedding statique est agrégé avec des embeddings provenant d'autres couches, qui encodent les lectures de la phrase de l'avant vers l'arrière et inversement.
- Les modèles BERT masquent une partie de la séquence qu'ils prennent comme entrée.
- Les modèles Transformer utilisent une couche d'auto-attention pour pondérer la pertinence des autres mots d'une séquence pour chaque mot individuel. Ils ajoutent aussi la colonne appropriée d'une matrice d'embedding de position (voir encodage de position) à chaque embedding de jeton appris précédemment, élément par élément, pour produire l'embedding d'entrée qui est transmis au reste du modèle pour l'inférence. Cet embedding d'entrée, propre à chaque séquence textuelle distincte, est un embedding contextuel.
Même si les modèles décrits ci-dessus sont des modèles de langage, les embeddings contextuels sont utiles dans d'autres tâches génératives, comme les images. Un embedding des valeurs RVB des pixels d'une photo de cheval fournit plus d'informations au modèle quand il est combiné à une matrice de position représentant chaque pixel et à un encodage des pixels voisins, créant ainsi des embeddings contextuels, que les embeddings statiques originales des seules valeurs RVB.