Comment appliquez-vous SMOTE sur la classification de texte?

13

La technique de suréchantillonnage des minorités synthétiques (SMOTE) est une technique de suréchantillonnage utilisée dans un problème de jeu de données déséquilibré. Jusqu'à présent, j'ai une idée de comment l'appliquer sur des données génériques et structurées. Mais est-il possible de l'appliquer sur un problème de classification de texte? De quelle partie des données avez-vous besoin pour suréchantillonner? Il y a déjà une autre question à ce sujet, mais elle n'a pas de réponse. Où puis-je éventuellement apprendre à commencer avec cela?

catris25
la source

Réponses:

11

En fait, la PNL est l'un des domaines les plus courants dans lesquels un rééchantillonnage des données est nécessaire car de nombreuses tâches de classification de texte traitent d'un problème déséquilibré (pensez au filtrage du spam, à la détection de commentaires insultants, à la classification d'articles, etc.). Mais SMOTE semble poser problème ici pour plusieurs raisons:

  • SMOTE fonctionne dans l'espace des fonctionnalités. Cela signifie que la sortie de SMOTE n'est pas une donnée synthétique qui est un véritable représentant d'un texte à l'intérieur de son espace de fonctionnalité.
  • D'un côté, SMOTE fonctionne avec KNN et de l'autre, les espaces de fonctionnalité pour le problème PNL sont énormément énormes. KNN échouera facilement dans ces énormes dimensions.

Je peux donc vous proposer deux approches:

  1. Ne vous souciez pas de la représentation textuelle réelle des nouveaux échantillons synthétiques qui, je suppose, devraient convenir. Vous devez équilibrer la distribution de votre classificateur et non d'un lecteur de données texte. Donc, appliquez SMOTE comme traditionnel (cependant j'utilise habituellement la solution 2 ci-dessous, donc je ne garantis pas le résultat!) Avec une étape de réduction de la dimensionnalité.

1) Supposons que vous vouliez faire vos échantillons de données à partir de classes mineures en utilisant 3-NN. Ignorez les classes principales et ne conservez que des échantillons de classes secondaires.

2) Pour chaque point d'échantillonnage dans l'espace d'objet, choisissez 5 voisins les plus proches. Ensuite, choisissez 3 d'entre eux au hasard (n'est-ce pas inutile compliqué? Si je ne voulais pas expliquer l'algorithme d'origine, je dirais juste choisir 3 voisins!)

3) Pour chaque dimension, calculez la distance entre l'échantillon et les voisins et multipliez-la en un nombre aléatoire entre 0-1 et ajoutez-la à la valeur d'origine de l'échantillon dans cette dimension. (ce paragraphe compliqué signifie simplement que pour chaque dimension, choisissez une valeur aléatoire entre l'échantillon d'origine et ce voisin!)

  1. Mais je fais généralement un autre suréchantillonnage qui est sur le texte (donc plus intuitif) et qui est en quelque sorte SMOTE.

k=2

n

mmnkk

Kasra Manshaei
la source
Merci pour la réponse, mais SMOTE peut-il être appliqué pour des échantillons s'ils sont représentés à l'aide d'un codage à chaud? ou ils devraient être représentés d'une autre manière?.
adnanmuttaleb
Salut Kasra, pouvez-vous partager une mise en œuvre liée aux étapes que vous avez mentionnées
Payal Bhatia
2

Si vous souhaitez ajouter plus de données de traduction de texte / phrases, vous pouvez utiliser des incorporations de mots pré-formés. Des modèles pré-formés comme fournit une représentation vectorielle de chaque mot du dictionnaire. Il fournit également des mots 'most_smiliar'.

Vous pouvez simplement utiliser une phrase d'exemple et générer de nouveaux échantillons en effectuant des permutations de chaque mot avec ses mots TOP_N similaires.

Par exemple, si votre phrase contient 3 mots et si vous choisissez les 3 plus similaires pour chaque mot, vous pouvez suréchantillonner 27 fois.

Yashodhan Pawar
la source
Salut Yashodhan, comment pouvons-nous utiliser ce processus s'il est spécifique au domaine? Merci
Payal Bhatia