Classification des séquences vectorielles

9

Mon ensemble de données est composé de séquences vectorielles. Chaque vecteur a 50 dimensions réelles. Le nombre de vecteurs dans une séquence va de 3-5 à 10-15. En d'autres termes, la longueur d'une séquence n'est pas fixe.

Une bonne partie des séquences (pas des vecteurs!) Sont annotées avec une étiquette de classe. Ma tâche est d'apprendre un classifieur qui, étant donné une séquence de vecteurs, l'étiquette de classe pour la séquence entière est calculée.

Je ne peux pas dire la nature exacte des données mais la nature des séquences n'est pas temporelle. Néanmoins, un vecteur ne peut pas être échangé avec un vecteur sans changer l'étiquette ( ). En d'autres termes, l'ordre des vecteurs est important. Les vecteurs eux-mêmes sont comparables, par exemple, il est logique de calculer un produit scalaire et d'utiliser cette valeur de similitude.XjeXjjej

Ma question est: quels sont les outils / algorithmes qui peuvent aider à classer ces données?

MISE À JOUR: Les données ont une telle propriété qu'un ou très peu de vecteurs influencent fortement l'étiquette de classe.

SOLUTION POSSIBLE: Après quelques recherches, il semble que les réseaux de neurones récurrents (RNN) conviennent assez naturellement. L'idée primordiale est de choisir une taille de contexte , de concaténer des vecteurs de mots, de faire un regroupement maximal et de les alimenter via NN classique. À chaque position de fenêtre de contexte possible dans une phrase, un vecteur d'entité est construit. Le vecteur d'entité final est construit en utilisant le regroupement maximal par exemple. La rétropropagation est effectuée pour ajuster les paramètres du réseau. J'ai déjà obtenu des résultats positifs (le GPU est un must).k

Vladislavs Dovgalecs
la source

Réponses:

3

Comme vous ne pouvez pas divulguer beaucoup de détails, je suis obligé d'être un peu générique dans ma réponse. J'espère que ce sera néanmoins utile. Tout d'abord, je n'envisagerais de réduire les séquences avant la classification (que ce soit en utilisant le produit scalaire ou autre) si vous pouvez vous assurer de ne pas perdre les informations dont vous avez besoin pour la classification par la suite. Cette approche n'est donc faisable que si vous avez une idée de la nature de la classification. Pour donner un exemple simple: si l'étiquette de classe est juste le nombre de vecteurs dans votre séquence, vous ne réussirez pas très bien à prédire l'étiquette de classe à partir du produit scalaire.

Par conséquent, je prendrais la séquence complète comme entrée pour la classification et imposer un maximum sur la longueur de séquence que vous souhaitez considérer. Vous pouvez le faire en trouvant d'abord la longueur de séquence maximale m dans votre ensemble d'entraînement, puis en transformant chaque séquence de vecteurs à 50 dimensions en un vecteur de dimension 50 * m, éventuellement avec quelques valeurs manquantes à la fin si votre séquence n'a pas longueur maximale. Vous voudrez probablement vous débarrasser de ces valeurs manquantes et vous voudrez peut-être simplement les remplacer par des zéros.

Vous pouvez emprunter deux routes à partir d'ici: 1.) Vous appliquez directement des méthodes de classification connues pour être adaptées aux dimensions élevées. Essayez quelque chose de simple qui n'a pas besoin de beaucoup de réglages comme les Bayes naïfs. De cette façon, vous pouvez voir si cette approche est réalisable sans perdre trop de temps si ce n'est pas le cas. 2.) Vous essayez d'abord de réduire la dimension et de mieux comprendre la nature de la classification. Vous voudrez peut-être utiliser quelque chose comme l'analyse des composants principaux ou analyser la corrélation / association entre chaque composant vectoriel et l'étiquette de classe. Si vous réussissez, vous savez comment réduire correctement la dimension de votre saisie avant d'appliquer la classification.

Si vous souhaitez suivre l'une de ces idées, veuillez garder à l'esprit que les détails concrets de vos données et la classification peuvent rendre irréalisable l'une des idées proposées ci-dessus. Veuillez donc faire attention à vérifier les détails que vous connaissez mais ne pouvez pas poster ici avant d'essayer de vous assurer que vous ne perdez pas votre temps.

MightyCurious
la source
0

Les données ont une telle propriété qu'un ou très peu de vecteurs influencent fortement le label de classe.

L'approche la meilleure (et la plus simple) serait probablement de simplement former un classificateur sur chaque vecteur, puis de faire la moyenne des prédictions à travers les vecteurs pour une séquence donnée. Les vecteurs importants auraient une forte influence sur leurs prédictions, tandis que les prédictions pour les vecteurs sans importance seraient proches de 0,5 (ou similaire pour un problème de classification non binaire).

pir
la source
Pas vraiment. Surtout si vous avez de nombreux vecteurs sans informations importantes .. Si vous suivez cette voie, utilisez certainement LSTM :)
pir