Façons de consommer du texte avec les modèles Tensorflow Decision Forest

Ceci est une page de documentation Markdown. Pour plus d'informations, consultez la référence Markdown (go/documentation-reference) et le guide de style de la documentation (go/documentation-style).

Arrière-plan

Les algorithmes d'apprentissage décisionnel par forêt fonctionnent différemment des modèles basés sur la descente de gradient comme les réseaux de neurones ou les prédicteurs linéaires. Ces différences se manifestent dans diverses décisions de modélisation, mais sont particulièrement prononcées lorsqu'un ensemble de données contient des fonctionnalités catégorielles de longueur variable, telles que des fonctionnalités de texte tokenisées, qui ont tendance à nécessiter une ingénierie de fonctionnalités spécifique à l'architecture. Ce guide décrit les compromis entre les différentes stratégies d'ingénierie de fonctionnalités pour les fonctionnalités de texte dans les modèles de forêt de décision.

Dans les sections suivantes, nous ferons référence à un ensemble de données présentant ces fonctionnalités et supposerons que nous prédisons si un utilisateur va acheter un produit spécifique :

Fonctionnalité ID de l'utilisateur Achats antérieurs Titre du produit Description du produit
Exemples de données 1234 [« TV », « Aspirateur »] "Routeur WiFi" "Ce routeur est..."


Dans cet exemple, « Achats antérieurs » est une fonctionnalité de texte clairsemé (ou un ensemble d'éléments catégoriels). Le « titre du produit » l'est également, mais n'est pas symbolisé dans cet exemple. La « Description du produit » est une fonctionnalité du langage naturel, qui a des propriétés différentes des autres fonctionnalités, car nous nous attendons à ce que le vocabulaire soit vaste (ou illimité), que l'ordre des mots soit important et qu'il ait d'autres propriétés sémantiques et lexicales inhérentes à l'ordre des mots. langue. Les stratégies que nous décrivons ci-dessous sont appropriées pour toutes ces fonctionnalités, mais comporteront des compromis différents pour chacune d'entre elles.

Référence rapide

La meilleure solution, si le coût de formation et d'inférence n'est pas un problème, consiste à utiliser à la fois des ensembles de catégories et des intégrations pré-entraînées pour chaque fonctionnalité de texte, car elles ont des forces et des faiblesses complémentaires. Nous le recommandons sauf si l’une des contraintes mentionnées ci-dessous est présente.

Vitesse d'inférence Vitesse d'entraînement Possibilité de mémoriser les relations jeton <> étiquette Généralisation
Plusieurs catégories Le plus rapide (++) Le plus rapide (++) Limité Limité (+)
multi-chaud Rapide (+) Rapide (en supposant une taille de vocabulaire relativement petite) (++) Bien Limité (+)
Ensembles catégoriels Le plus rapide (+++) Plus lent (+) Meilleur Limité (++)
intégration Le plus lent (en supposant des opérations d'encodeur non triviales, comme les multiplications matricielles) (+ à +++) Le plus rapide (en supposant la taille du vocabulaire >> dimension d'intégration) (+++) Mauvais Bon (++ à +++)

N-grammes

N-grammes (par exemple {"le", "chat", "est", "bleu"} -> {"<start> le", "le chat", "le chat est", "est bleu", "bleu < end>"}) peut être bénéfique dans de nombreux cas et capturer des informations lexicales locales. Ils sont pris en charge dans toutes les méthodes ci-dessous, mais se font au prix d'un vocabulaire considérablement plus grand, ce qui peut les rendre peu pratiques en raison du coût de formation.

Stratégies découragées

Encodage One-hot / Multi-hot / Sac de mots

L’encodage à chaud est une stratégie classique pour densifier un texte clairsemé. Ici, nous supposons une extension dans laquelle une fonctionnalité de texte clairsemé est représentée soit par une vectorisation multi-hot (1s pour tous les jetons contenus) ou basée sur le nombre (le nombre pour chaque jeton dans le vocabulaire).

Par exemple, si le vocabulaire est de 4 éléments, et indexé comme [« TV », « Aspirateur », « Wifi », « Routeur »], la fonctionnalité « Achats antérieurs » serait un vecteur dense <1, 1, 0, 0 >. Si les décomptes étaient pris en compte et que la caractéristique était [« TV », « TV », « Vacuum »], elle serait <2, 1, 0, 0>.

Avantages

  • Étant donné que les divisions de forêt de décision sont apprises sur des caractéristiques individuelles, cela coûte moins cher au moment de la formation que les ensembles catégoriels.
  • Contrairement au premier, il ne nécessite aucun découpage ni remplissage, et les jetons ont la même sémantique dans tous les exemples (c'est-à-dire que « TV » sera constant dans toutes les divisions, quelle que soit leur position).

Inconvénients

  • Cette stratégie conduit souvent à des divisions très déséquilibrées et clairsemées, ce qui peut rendre les algorithmes d'apprentissage DF soit plus lents à converger, soit inférieurs à la moyenne. C'est parce que :
    • Plus de fractionnements sont nécessaires pour apprendre les mêmes informations
    • Les arbres très clairsemés se généralisent moins bien que les arbres équilibrés, ce qui donne généralement lieu à un modèle moins précis.
  • Ne prend pas en compte les informations de position. Cela peut nuire aux performances des fonctionnalités de langage naturel.
  • L'apprentissage des divisions numériques sur des données catégorielles n'est pas optimal ; il existe des optimisations pour trouver des divisions catégorielles qui ne sont pas exploitées ici.
  • La complexité informatique de la formation évolue linéairement avec le nombre d'éléments de vocabulaire (qui seront chacun consommés comme une caractéristique numérique). En pratique, à moins que l'ensemble de données ne soit très petit (auquel cas des vocabulaires volumineux peuvent encourager le surapprentissage), cela rend les vocabulaires de > 5 000 éléments très lents à entraîner.
  • La consommation de mémoire d'entraînement sera de 1 octet (pour one-hot) ou 4 octets (pour counts) par élément de vocabulaire par exemple, car au moment de l'indexation, les données seront stockées comme une version dense des données clairsemées. Cela peut devenir prohibitif pour des vocabulaires et des ensembles de données plus volumineux.

Plusieurs fonctionnalités catégorielles avec une longueur fixe

Étant donné que les caractéristiques catégorielles peuvent être apprises efficacement par les algorithmes de forêt de décision, une façon naturelle de consommer des jetons clairsemés consiste à remplir/découper de telle sorte qu'il y ait un nombre fixe de jetons d'entrée par exemple, et que chaque position de jeton soit une fonctionnalité distincte et indépendante. Dans l'exemple ci-dessus, si « Achats antérieurs » a au plus 5 jetons, nous pouvons créer des fonctionnalités f1...f5 représentant les jetons 1 à 5, supprimer tous les jetons > 5 et ajouter des valeurs manquantes pour les exemples où il y en a < 5.

Avantages

  • C’est efficace pour s’entraîner.
  • Cela ne nuira peut-être pas à la qualité du modèle s'il existe une faible variance dans le nombre de jetons par exemple et si les jetons sont indépendants.
  • Cela peut capturer des sémantiques supplémentaires (comme le bon de commande dans l'exemple) plus naturellement que d'autres méthodes.

Inconvénients

  • Ajoute une sémantique aux jetons rembourrés « manquants » qui serviront de bruit au modèle. Cela sera particulièrement prononcé s'il existe une grande variation dans le nombre de jetons par exemple, ce qui peut se produire par exemple avec la fonctionnalité « Description du produit ».
  • Les arbres appris seront très sensibles à l'ordre, c'est-à-dire que si la caractéristique est ["A", "B"] la prédiction sera différente de la prédiction pour ["B", "A"], et si cette dernière n'a jamais été vue dans les données, le modèle ne pourra pas généraliser à partir du premier. En général, cela nécessitera beaucoup plus de données pour apprendre l'invariance de position.
  • Par défaut, chaque token sera représenté par une fonctionnalité avec un vocabulaire différent. Même si vous forcez l’implémentation à considérer le même ensemble d’éléments de vocabulaire par fonctionnalité, f1=”TV” sera un élément de vocabulaire différent de f2=”TV”. Cela signifie que l'algorithme sera moins efficace pour apprendre la relation entre le jeton « TV » et l'étiquette : il devra l'apprendre séparément pour chaque position du jeton.

De meilleures stratégies

Ensembles catégoriels

Les ensembles catégoriels ( https://arxiv.org/pdf/2009.09991.pdf ) sont la représentation des fonctionnalités par défaut de TF-DF pour le texte clairsemé. Un ensemble catégoriel est en fait un sac de mots, ignorant les doublons et l'ordre. Par exemple, la fonctionnalité « Le téléviseur est le meilleur » serait représentée par l'ensemble catégorique {« le meilleur », « est », « le », « TV}.

Le séparateur d'ensembles catégoriels natif, selon des références sur une variété de tâches (voir article), surpasse généralement les fonctionnalités catégorielles multi-hot et de longueur fixe. En théorie, les divisions d'ensembles catégoriques et les divisions booléennes sur les fonctionnalités codées à chaud peuvent apprendre les mêmes informations. Cependant, prenons l'exemple suivant, où l'arbre tente d'apprendre la fonction suivante :

if description contains “high” AND “speed” AND “gaming”:
  return True

Dans ce cas, le séparateur d'ensembles catégoriels natif apprendra 1 division, où {"high", "speed", "gaming"} => True.

Une représentation unique nécessiterait 3 divisions, sur « haut », « split » et « jeu », et devrait trouver des nœuds feuilles raisonnables pour toutes les disjonctions possibles de ces catégories (c'est-à-dire « haut » et non « vitesse »). En pratique, l’encodage à chaud conduit à des arbres très déséquilibrés qui ne peuvent pas être optimisés efficacement par les algorithmes d’apprentissage de forêt de décision les plus performants.

Avantages

  • Idéal pour apprendre des informations sous forme de sacs de mots pour les forêts de décision.
  • Très efficace à servir (peut être servi avec QuickScorer, qui peut servir de grands arbres en un temps inférieur à la microseconde par exemple). La complexité du temps de service est linéaire en termes de nombre d'éléments dans l'ensemble catégoriel de chaque exemple, qui en pratique est beaucoup plus petit que la taille du vocabulaire.
  • Optimise un seul vocabulaire par fonctionnalité, afin que la sémantique soit partagée.

Inconvénients

  • Le coût de la formation d'un ensemble catégorique d'échelles divisées avec num_examples * taille du vocabulaire, si similaire à l'algorithme one-hot, la taille du vocabulaire entraînable peut être assez petite (N mille) dans des contextes pratiques. Notez que cette vitesse d'entraînement peut être améliorée en ajustant la fraction d'échantillonnage de l'algorithme glouton, mais elle peut atteindre une qualité sous-optimale.

Intégrations

Les réseaux de neurones ont affiché des performances de pointe sur une variété de tâches PNL, et les intégrations pré-entraînées utilisées comme fonctionnalités numériques fonctionnent également empiriquement bien avec les algorithmes de forêt de décision, bien que les fonctionnalités soient utilisées très différemment en interne. Notez qu'ici nous faisons référence à « intégration » comme à tout codage de réseau neuronal, par exemple la sortie de couches transformateur/convolutionnelles/récurrentes.

L'utilisation d'intégrations pré-entraînées fonctionne bien avec les réseaux de neurones, en partie parce que l'initialisation d'un espace vectoriel où des jetons ou des phrases similaires sont proches dans l'espace euclidien s'est avérée bien transférée entre les tâches PNL, et les gradients de cette initialisation sont plus petits et plus rapides à converger. qu'une initialisation totalement aléatoire. Cependant, les arbres de décision utilisent les intégrations en tant que caractéristiques numériques individuelles et apprennent les partitions alignées sur les axes de ces caractéristiques individuelles 1 . Cela signifie qu'il est presque impossible d'utiliser la même information sémantique : un produit scalaire ou une multiplication matricielle, par exemple, ne peut pas être représenté par un ensemble de divisions alignées sur les axes. De plus, contrairement aux réseaux de neurones, qui peuvent mettre à jour les intégrations par descente de gradient pendant la formation, les algorithmes d'apprentissage de forêt de décision par défaut ne sont pas différentiables, ce qui signifie que les intégrations doivent rester figées. Notez qu'il existe des travaux ( https://arxiv.org/pdf/2007.14761.pdf, par exemple) sur les forêts de décision différenciables. Cependant, peut-être en partie parce qu'en pratique, tous les éléments d'information d'une intégration ne sont pas réellement utilisés, même par les réseaux de neurones, cette stratégie fonctionne toujours bien avec les forêts de décision.

Avantages :

  • Peut gérer des tailles de vocabulaire beaucoup plus grandes : étant donné qu'une intégration est en fait une densification en un petit nombre de dimensions d'intégration, il est peu probable que le nombre de fonctionnalités d'entrée dans la forêt de décision augmente de façon spectaculaire.
  • Peut mieux généraliser, en théorie, puisque des intégrations similaires peuvent partager des ensembles de partitions. Notez qu'une grande mise en garde ici est que, comme mentionné ci-dessus, les transformations de base ou les rotations dans l'espace vectoriel peuvent avoir deux intégrations similaires complètement différentes dans l'espace partitionné aligné sur l'axe pour les forêts de décision.
  • Peut naturellement encapsuler la récurrence/l'ordre des mots, par exemple si l'encodeur contient des convolutions, une attention ou un RNN.
  • Peut exploiter les informations d'un autre ensemble de données (pré-formation pour l'apprentissage par transfert).

Inconvénients

  • Pas bon pour mémoriser les informations -- les divisions peuvent provoquer des classifications floues ou une sensibilité élevée à la formulation (c'est-à-dire « le routeur est génial » vs « un excellent routeur ») produira des intégrations différentes, qui peuvent être proches dans l'espace euclidien mais pas nécessairement similaires. caractéristiques numériques.
  • Le service est le plus lent, car la passe avant complète de l'encodeur doit être effectuée au moment de l'inférence. La latence réelle dépend fortement de l'architecture qui a produit les intégrations ; c'est-à-dire qu'un encodeur de transformateur sera généralement beaucoup plus lent qu'une recherche de table d'intégration brute avec pool de moyennes.

Remarques


  1. L'activation des divisions obliques peut permettre l'apprentissage d'informations non alignées sur les axes, mais cela se fera toujours dimension par dimension.