Représentations vectorielles continues : données d'entrées catégorielles

Les données catégorielles désignent les caractéristiques d'entrée qui représentent un ou plusieurs éléments discrets d'un ensemble limité de choix. Par exemple, il peut s'agir d'un ensemble de films qu'un utilisateur a regardés, d'un ensemble de mots dans un document ou de la profession d'une personne.

Les données catégorielles sont mieux représentées par les Tensors creux, c'est-à-dire les Tensors comportant très peu d'éléments non nuls. Prenons l'exemple d'un modèle de recommandation de films. Nous pouvons attribuer un identifiant unique à chacun des films, puis représenter chaque utilisateur par un Tensor creux correspondant aux films qu'il a regardés, comme illustré dans la figure 3.

Un échantillon d'entrées pour notre problème de recommandation de films.

Figure 3 : Données pour notre problème de recommandation de films.

Dans la figure 3, chaque ligne de la matrice correspond à l'historique de visionnage de films d'un utilisateur et est représentée en tant que Tensor creux, puisque chaque utilisateur ne regarde qu'une partie de tous les films disponibles. La dernière ligne correspond au Tensor creux [1, 3, 999999], utilisant les indices de vocabulaire présentés au-dessus des icônes des films.

De même, on peut représenter des mots, des phrases et des documents en tant que vecteurs creux où chaque mot du vocabulaire joue un rôle similaire aux films dans l'exemple accompagnant notre recommandation.

Afin d'utiliser de telles représentations dans un système de Machine Learning, nous devons trouver une manière de représenter chaque vecteur creux en tant que vecteur de nombres, de sorte que des éléments sémantiquement similaires (films ou mots) aient une distance similaire dans l'espace vectoriel. Cependant, comment représenter un mot comme un vecteur de nombres ?

Le plus simple est de définir une énorme couche d'entrée avec un nœud pour chaque mot de votre vocabulaire, ou au moins un nœud pour chaque mot qui apparaît dans vos données. Si 500 000 mots uniques apparaissent dans vos données, vous pouvez représenter un mot avec un vecteur de 500 000 de longueur et attribuer chaque mot à une case du vecteur.

Si vous attribuez le mot "cheval" à l'index 1 247, pour utiliser le terme "cheval" dans votre réseau, vous pouvez copier le chiffre 1 dans le 1 247e nœud d'entrée et un 0 dans tous les autres. Ce type de représentation s'appelle un encodage one-hot, car seul un index possède une valeur différente de zéro.

Plus généralement, votre vecteur peut contenir le nombre de mots dans une plus grande portion de texte. Cela est connu sous le nom de représentation par "sac de mots" (bag of words). Dans un vecteur sac de mots, plusieurs nœuds parmi les 500 000 ont une valeur différente de zéro.

Mais quelle que soit la manière dont vous déterminez les valeurs différentes de zéro, un nœud par mot vous donne des vecteurs d'entrée très creux (de très grands vecteurs avec relativement peu de valeurs différentes de zéro). Les représentations creuses présentent deux problèmes qui peuvent compliquer l'apprentissage efficace d'un modèle.

Taille du réseau

Les grands vecteurs d'entrée entraînent un très grand nombre de pondérations pour un réseau neuronal. S'il existe un nombre M de mots dans votre vocabulaire et un nombre N de nœuds dans la première couche du réseau au-dessus de l'entrée, vous devez entraîner MxN pondérations pour cette couche. Un grand nombre de pondérations peut générer d'autres problèmes :

  • La quantité de données. Plus il y a de pondérations dans votre modèle, plus vous avez besoin de données pour effectuer un apprentissage efficace.

  • La quantité de calcul. Plus il y a de pondérations, plus vous devez effectuer de calculs pour entraîner et utiliser le modèle. Vous pouvez facilement dépasser les capacités de votre matériel.

Manque de relations pertinentes entre les vecteurs

Si vous utilisez les valeurs en pixels des canaux RVB dans un classificateur d'images, il est logique de parler de valeurs "proches". Le bleu rougeâtre est proche du bleu pur, d'une manière sémantique et en termes de distance géométrique entre les vecteurs. Cependant, un vecteur avec un 1 à l'index 1 247 pour "cheval" n'est pas plus proche d'un vecteur avec un 1 à l'index 50 430 pour "antilope" qu'il ne l'est d'un vecteur avec un 1 à l'index 238 pour "télévision".

La solution : les représentations vectorielles continues

Pour résoudre ces problèmes, la solution consiste à utiliser des représentations vectorielles continues, qui projettent de grands vecteurs creux en un espace de plus faible dimension qui préserve les relations sémantiques. Les sections suivantes de ce module explorent les représentations vectorielles continues de manière intuitive, conceptuelle et programmatique.

Envoyer des commentaires concernant…

Cours d'initiation au machine learning