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

Les données catégorielles font référence à des caractéristiques d'entrée représentant un ou plusieurs éléments discrets d'un ensemble limité de choix. Il peut s'agir de l'ensemble de films qu'un utilisateur a regardés, de l'ensemble de mots d'un document ou de la profession d'une personne.

Les données catégorielles sont mieux représentées par les Tensors creux, qui sont des Tensors comportant très peu d'éléments non nuls. Par exemple, si nous créons un modèle de recommandation de films, nous pouvons attribuer un identifiant unique à chaque film possible, puis représenter chaque utilisateur par un Tensor creux des films qu'il a regardés, comme illustré dans la Figure 3.

Exemple d'entrée pour notre problème de recommandation de films.

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

Chaque ligne de la matrice de la figure 3 est un exemple qui capture l'historique de visionnage de films d'un utilisateur. Elle est représentée par un Tensor creux, car chaque utilisateur ne regarde qu'une petite partie de tous les films possibles. La dernière ligne correspond au Tensor creux [1, 3, 999999], qui utilise les index de vocabulaire affichés au-dessus des icônes de films.

De même, vous pouvez représenter des mots, des phrases et des documents comme des vecteurs creux, où chaque mot du vocabulaire joue un rôle semblable aux films dans notre exemple de recommandation.

Afin d'utiliser ces représentations dans un système de machine learning, nous avons besoin d'un moyen de représenter chaque vecteur creux en tant que vecteur de nombres afin que les éléments sémantiquement similaires (films ou mots) aient des distances similaires dans l'espace vectoriel. Mais comment représenter un mot comme un vecteur de nombres ?

Le moyen le plus simple consiste à définir une couche d'entrée géante avec un nœud pour chaque mot de votre vocabulaire, ou au moins un nœud pour chaque mot figurant 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 à un emplacement vecteur.

Si vous attribuez l'index 1247 à votre cheval, vous pouvez copier un "1" dans votre réseau en copiant un "1" dans le 1247e nœud d'entrée et un "0" dans le reste. Ce type de représentation est appelé encodage one-hot, car un seul index a une valeur non nulle.

Plus généralement, votre vecteur peut contenir le nombre de mots dans une plus grande partie. C'est ce que nous appelons la "sac de mots". Dans un vecteur de sac de mots, plusieurs des 500 000 nœuds auraient une valeur non nulle.

Cependant, quelle que soit la manière dont vous déterminez les valeurs non nulles, 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 empêcher l'apprentissage efficace d'un modèle.

Taille du réseau

D'immenses vecteurs d'entrée représentent un très grand nombre de pondérations pour un réseau de neurones. Si votre vocabulaire comporte M mots et N nœuds dans la première couche du réseau au-dessus de l'entrée, vous devez entraîner des pondérations MxN pour cette couche. Un grand nombre de pondérations pose d'autres problèmes:

  • Quantité de données. Plus votre modèle comporte de pondérations, plus vous aurez besoin de données pour l'entraînement efficace.

  • Quantité de calcul. Plus il y a de pondérations, plus le calcul nécessaire pour entraîner et utiliser le modèle est important. Il est facile de dépasser les capacités de votre matériel.

Manque de relations significatives entre les vecteurs

Si vous intégrez les valeurs en pixels des canaux RVB dans un classificateur d'images, il est logique de parler des valeurs "close". Le bleu rougeâtre est proche du bleu pur, à la fois sémantiquement et en termes de distance géométrique entre les vecteurs. Toutefois,un vecteur avec un 1 à l'index 1247 pour "cheval" n'est pas plus proche d'un vecteur avec un 1 à l'index 50 430 pour "antelope" qu'un vecteur avec un 1 à l'index 238 pour "television".

La solution: représentations vectorielles continues

La solution à ces problèmes consiste à utiliser des représentations vectorielles continues, qui traduisent de grands vecteurs creux en un espace de dimension inférieure qui préserve les relations sémantiques. Nous explorerons les représentations vectorielles continues de manière intuitive, conceptuelle et programmatique dans les sections suivantes de ce module.