Transformer des données catégorielles

Certaines de vos caractéristiques peuvent être des valeurs discrètes qui ne sont pas dans une relation ordonnée. (par exemple, un chien, un mot ou un code postal). Ces caractéristiques sont appelées catégories et chaque valeur est appelée catégorie. Vous pouvez représenter des valeurs catégorielles sous forme de chaînes, voire de nombres, mais vous ne pourrez pas comparer ces chiffres, ni les soustraire.

Souvent, vous devez représenter des caractéristiques contenant des valeurs entières sous forme de données catégorielles plutôt que numériques. Prenons l'exemple d'une caractéristique de code postal dans laquelle les valeurs sont des entiers. Si vous représentez cette caractéristique sous forme numérique, vous demandez au modèle de trouver une relation numérique entre différents codes postaux. Par exemple, vous vous attendez à ce que le modèle détermine que le code postal 20004 est le double (ou la moitié) du signal en tant que code postal 10002. En représentant les codes postaux comme des données catégorielles, vous permettez au modèle de trouver des signaux distincts pour chaque code postal.

Si le nombre de catégories d'un champ de données est faible, par exemple le jour de la semaine ou une palette limitée de couleurs, vous pouvez créer une caractéristique unique pour chaque catégorie. Exemple :

Chaque couleur de la palette est représentée par une caractéristique distincte.
Autrement dit, chaque couleur est une caractéristique distincte du vecteur.
Par exemple, le rouge est une caractéristique, l'orange est une caractéristique distincte, etc. Figure 1: Fonctionnalité unique pour chaque catégorie

 

Un modèle peut ensuite apprendre une pondération distincte pour chaque couleur. Par exemple, le modèle pourrait apprendre que les voitures rouges sont plus chères que les voitures vertes.

Les éléments géographiques peuvent ensuite être indexés.

Chaque couleur de la palette appartient désormais à la même caractéristique. 
Autrement dit, la couleur n'est plus qu'un élément du vecteur.
Chaque couleur a une valeur unique. Par exemple, rouge a la valeur 0, orange la valeur 1, et ainsi de suite. Figure 2: Fonctionnalités indexées.

 

Ce type de mappage est appelé vocabulaire.

Vocabulaire

Dans un vocabulaire, chaque valeur représente une caractéristique unique.

Index NumberCategory
0Red
1Orange
2Blue
......

Le modèle recherche l'index à partir de la chaîne, en attribuant 1,0 à l'emplacement correspondant dans le vecteur de caractéristiques et 0,0 à tous les autres emplacements dans le vecteur de caractéristiques.

Schéma du processus de bout en bout permettant de mapper des catégories sur des vecteurs de caractéristiques
Dans le diagramme, les caractéristiques d'entrée sont jaune, orange, bleu et bleu. Le système utilise un vocabulaire stocké (le rouge est égal à 0, l'orange correspond à 1, le bleu à 2, le jaune à 3, etc.) pour mapper la valeur d'entrée à un ID. Ainsi, le système mappe le jaune, l'orange, le bleu et le bleu sur 3, 1, 2, 2. Le système convertit ensuite ces valeurs en un vecteur de caractéristiques one-hot. Par exemple, pour un système avec sept couleurs possibles, 3 devient 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0. Figure 3: Processus de bout en bout pour mapper des catégories sur des vecteurs de caractéristiques

Remarque sur la représentation creuse

Si vos catégories correspondent aux jours de la semaine, vous pourriez par exemple représenter le vendredi avec le vecteur de caractéristiques [0, 0, 0, 0, 1, 0, 0]. Toutefois, la plupart des implémentations de systèmes de ML représenteront ce vecteur en mémoire avec une représentation creuse. Une représentation courante consiste en une liste de valeurs non vides et leurs index correspondants (par exemple, 1.0 pour la valeur et [4] pour l'index). Cela vous permet de dépenser moins de mémoire pour le stockage d'une quantité considérable de zéros, et ainsi de multiplier plus efficacement la matrice. En termes de mathématiques sous-jacentes, [4] équivaut à [0, 0, 0, 0, 1, 0, 0].

Hors vocabulaire

Tout comme les données numériques, les données catégorielles sont également aberrantes. Prenons l'exemple d'un ensemble de données contenant des descriptions de voitures. La couleur de la voiture est l'une des caractéristiques de cet ensemble de données. Supposons que les couleurs courantes de la voiture (noir, blanc, gris, etc.) soient bien représentées dans cet ensemble de données, et que vous les configuriez chacune dans une catégorie afin que vous puissiez découvrir l'impact de ces différentes couleurs sur la valeur. Supposons toutefois que cet ensemble de données contienne un petit nombre de voitures aux couleurs excentriques (mauve, puce, avocat). Plutôt que de classer chacune de ces couleurs dans une catégorie distincte, vous pouvez les regrouper dans une catégorie générique intitulée Out of Vocab (Hors de Vocabulaire) (OOV). Grâce à la fonction OOV, le système ne perd pas de temps à entraîner chacune de ces couleurs rares.

Hashing

Une autre option consiste à hacher toutes les chaînes (catégorie) dans votre espace d'index disponible. Le hachage provoque souvent des conflits, mais vous devez compter sur l'apprentissage par le modèle d'une représentation partagée des catégories d'un même index qui fonctionne bien pour le problème donné.

Pour les termes importants, le hachage peut être pire que la sélection d'un vocabulaire, en raison de conflits. En revanche, le hachage ne nécessite pas l'assemblage d'un vocabulaire, ce qui est avantageux si la distribution des caractéristiques change beaucoup au fil du temps.

Schéma illustrant deux listes de mots. Une liste contient 10 mots. L'autre liste contient les 10 mots divisés en huit buckets de hachage. Ainsi, six des buckets de hachage contiennent un mot, tandis que deux des buckets de hachage contiennent deux mots.  Chaque bucket de hachage est identifié par un chiffre compris entre 1 et 8 (inclus). Figure 4: Mise en correspondance d'éléments avec un vocabulaire

Combinaison du hachage et du vocabulaire

Vous pouvez adopter une approche hybride et combiner le hachage à un vocabulaire. Utilisez un vocabulaire pour les catégories les plus importantes de vos données, mais remplacez le bucket OOV par plusieurs buckets OOV et utilisez le hachage pour attribuer des catégories aux buckets.

Les catégories des buckets de hachage doivent partager un index, et le modèle ne fournira probablement pas de bonnes prédictions, mais nous avons alloué une certaine quantité de mémoire pour essayer d'apprendre les catégories en dehors de notre vocabulaire.

Schéma montrant trois listes de mots. Une liste comprend 10 mots à classer. Les deux autres listes mappent ces 10 mots dans des buckets de vocabulaire et de hachage. Autrement dit, cinq mots correspondent directement à un vocabulaire, tandis que cinq mots correspondent à deux buckets de hachage. Un bucket de hachage contient deux mots et l'autre, trois mots.  Le vocabulaire contient des mots courants, tandis que le bucket de hachage contient des mots plus rares. Figure 5: Approche hybride combinant le vocabulaire et le hachage.

Remarque sur les représentations vectorielles continues

Comme nous l'avons vu dans le cours d'initiation au machine learning, une représentation vectorielle continue est une caractéristique catégorielle représentée comme une caractéristique à valeur continue. Les modèles profonds convertissent fréquemment les index d'un index en représentation vectorielle continue.

Schéma illustrant le processus de bout en bout permettant de mapper des catégories sur des vecteurs de caractéristiques via une représentation vectorielle continue Une table de représentations vectorielles continues est constituée d'un ensemble numéroté de lignes. Chaque ligne est composée d'un ensemble de valeurs à virgule flottante comprises entre 0,0 et 1,0. Pour convertir une catégorie, le système copie la ligne correspondante de la table de représentations vectorielles continues.
Par exemple, si la catégorie d'entrée était 0, le système copie la première ligne de la table de représentations vectorielles continues dans le vecteur de caractéristiques. Si la catégorie d'entrée est 1, le système copie la deuxième ligne de la table de représentations vectorielles continues dans le vecteur de caractéristiques. Figure 6: Vecteurs de caractéristiques creuses via une représentation vectorielle continue

Les autres transformations dont nous avons parlé peuvent être stockées sur un disque, mais les représentations vectorielles continues sont différentes. Étant donné que les représentations vectorielles continues sont entraînées, elles ne font pas partie des transformations de données types. Elles font partie du modèle. Ils sont entraînés avec d'autres pondérations du modèle et fonctionnent de manière fonctionnelle comme une couche de pondérations.

Qu'en est-il des représentations vectorielles continues pré-entraînées ? Les représentations vectorielles continues pré-entraînées restent généralement modifiables pendant l'entraînement. Elles font donc toujours partie du concept.