Le problème que j'aborde est de classer les textes courts en plusieurs classes. Mon approche actuelle consiste à utiliser les fréquences des termes pondérés tf-idf et à apprendre un classificateur linéaire simple (régression logistique). Cela fonctionne assez bien (environ 90% de macro F-1 sur le test, près de 100% sur le set d'entraînement). Un gros problème sont les mots / n-grammes invisibles.
J'essaie d'améliorer le classificateur en ajoutant d'autres fonctionnalités, par exemple un vecteur de taille fixe calculé en utilisant des similitudes de distribution (telles que calculées par word2vec) ou d'autres caractéristiques catégorielles des exemples. Mon idée était d'ajouter simplement les fonctionnalités aux fonctionnalités d'entrée clairsemées du sac de mots. Cependant, cela se traduit par de moins bonnes performances sur l'ensemble de test et d'entraînement. Les fonctionnalités supplémentaires donnent à elles seules environ 80% de F-1 sur l'ensemble de test, donc elles ne sont pas des ordures. La mise à l'échelle des fonctionnalités n'a pas aidé non plus. Ma pensée actuelle est que ce type de fonctionnalités ne se mélange pas bien avec le sac (clairsemé) de fonctionnalités de mots.
La question est donc la suivante: en supposant que les fonctionnalités supplémentaires fournissent des informations supplémentaires, quelle est la meilleure façon de les incorporer? Pourrait former des classificateurs séparés et les combiner dans une sorte de travail d'ensemble (cela aurait probablement l'inconvénient qu'aucune interaction entre les caractéristiques des différents classificateurs ne pourrait être capturée)? Y a-t-il d'autres modèles plus complexes que je devrais considérer?
la source
Réponses:
Si je comprends bien, vous avez essentiellement deux formes de fonctionnalités pour vos modèles. (1) Les données textuelles que vous avez représentées comme un sac de mots épars et (2) des caractéristiques denses plus traditionnelles. Si tel est le cas, il existe 3 approches communes:
TruncatedSVD
) sur vos données clairsemées pour les rendre denses et combinez les fonctionnalités en une seule matrice dense pour former vos modèles.hstack
dans une matrice clairsemée unique pour former votre modèle (s).Pipeline
si vous le souhaitez).Les trois approches sont valides et ont leurs propres avantages et inconvénients. Personnellement, je trouve que (1) est généralement le pire car il est, relativement parlant, extrêmement lent. Je trouve également que (3) est généralement le meilleur, étant à la fois suffisamment rapide et entraînant de très bonnes prédictions. Vous pouvez évidemment faire une combinaison des deux si vous êtes prêt à faire un assemblage plus étendu.
Quant aux algorithmes que vous utilisez, ils peuvent essentiellement tous s'inscrire dans ce cadre. La régression logistique fonctionne étonnamment bien la plupart du temps, mais d'autres peuvent faire mieux en fonction du problème à résoudre et de la façon dont vous les réglez. Je suis moi-même partisan des GBM, mais l'essentiel est que vous pouvez essayer autant d'algorithmes que vous le souhaitez et même faire de simples ensembles pondérés de leurs prédictions conduira presque toujours à une meilleure solution globale.
la source
Les modèles linéaires ajoutent simplement leurs caractéristiques multipliées par les poids correspondants. Si, par exemple, vous avez 1000 entités éparses dont seulement 3 ou 4 sont actives dans chaque instance (et les autres sont des zéros) et 20 entités denses qui ne sont pas toutes des zéros, alors il est fort probable que les entités denses tireront le meilleur parti de l'impact alors que les fonctionnalités clairsemées n'ajouteront qu'une petite valeur. Vous pouvez le vérifier en examinant les pondérations des entités pour quelques cas et comment elles influencent la somme résultante.
Une façon de le corriger est de s'éloigner du modèle additif. Voici quelques modèles candidats.
SVM est basé sur la séparation des hyperplans. Bien que l'hyperplan soit lui-même un modèle linéaire, SVM ne résume pas ses paramètres, mais essaie plutôt de diviser l'espace des fonctionnalités de manière optimale. Compte tenu du nombre de fonctionnalités, je dirais que le SVM linéaire devrait fonctionner correctement, tandis que les noyaux plus compliqués peuvent avoir tendance à surcharger les données.
Malgré son nom, Naive Bayes est un modèle statistique assez puissant qui a montré de bons résultats pour la classification de texte. Il est également suffisamment flexible pour capturer le déséquilibre dans la fréquence des fonctionnalités rares et denses, vous devriez donc certainement essayer.
Enfin, les forêts aléatoires peuvent fonctionner comme une bonne méthode d'ensemble dans ce cas. La randomisation garantira que différents types de caractéristiques (clairsemés / denses) seront utilisés comme nœuds de décision principaux dans différents arbres. Les arbres RF / décision sont également bons pour inspecter les fonctionnalités elles-mêmes, il convient donc de noter leur structure de toute façon.
Notez que toutes ces méthodes ont leurs inconvénients qui peuvent les transformer en ordures dans votre cas. Combiner des fonctionnalités clairsemées et denses n'est pas vraiment une tâche bien étudiée, alors laissez-nous savoir laquelle de ces approches fonctionne le mieux pour votre cas.
la source