web-dev-qa-db-fra.com

Sélection et réduction des fonctionnalités pour la classification de texte

Je travaille actuellement sur un projet, un analyseur de sentiments simple tel qu'il y aura 2 et 3 classes dans cas séparés. J'utilise un corpus qui est assez riche au moyen de mots uniques (environ 200.000). J'ai utilisé sac de mots méthode pour sélection de fonctionnalités et pour réduire le nombre de fonctionnalités uniques, une élimination est effectuée en raison d'un - valeur seuil de fréquence d'occurrence. Le ensemble final de fonctionnalités comprend environ 20.000 fonctionnalités, ce qui est en fait un diminution de 90%, mais pas assez pour la destination précision de test-prédiction. J'utilise LibSVM et SVM-light tour à tour pour l'entraînement et la prédiction (à la fois linéaire et noyau RBF) et aussi Python et Bash en général.

Le précision la plus élevée observé jusqu'à présent est d'environ 75% et I besoin d'au moins 90%. C'est le cas pour classification binaire. Pour formation multi-classes, la précision tombe à ~ 60%. I besoin d'au moins 90% dans les deux cas et je ne sais pas comment l'augmenter: via optimisation des paramètres d'entraînement ou via l'optimisation de la sélection des fonctionnalités?

J'ai lu des articles sur sélection de fonctionnalités dans la classification de texte et ce que j'ai trouvé, c'est que trois méthodes différentes sont utilisées, qui ont en fait une corrélation claire entre elles. Ces méthodes sont les suivantes:

  • Approche en fréquence de sac de mots (BOW)
  • Gain d'informations (IG)
  • Statistique X ^ 2 (CHI)

La première méthode est déjà celle que j'utilise, mais je l'utilise très simplement et j'ai besoin de conseils pour une meilleure utilisation afin d'obtenir une précision suffisamment élevée. Je manque également de connaissances sur les implémentations pratiques de IG et CHI et je recherche tout aider à me guider de cette façon.

Merci beaucoup, et si vous avez besoin d'informations supplémentaires pour obtenir de l'aide, faites le moi savoir.


  • @larsmans: Frequency Threshold: Je recherche les occurrences de mots uniques dans les exemples, de sorte que si un mot se produit assez fréquemment dans différents exemples, il est inclus dans l'ensemble de fonctionnalités en tant que fonctionnalité unique.

  • @TheManWithNoName: Tout d'abord merci pour vos efforts en expliquant les préoccupations générales de la classification des documents. J'ai examiné et expérimenté toutes les méthodes que vous proposez et d'autres. J'ai trouvé Différence proportionnelle (PD) la meilleure méthode pour la sélection des fonctionnalités, où les fonctionnalités sont des grammes et Présence terminologique (TP) pour la pondération (je ne comprenais pas pourquoi vous avez étiqueté Term-Frequency-Inverse-Document-Frequency (TF-IDF) comme méthode d'indexation, je le considère plutôt comme une approche pondération des caractéristiques). Pré-traitement est également un aspect important pour cette tâche comme vous l'avez mentionné. J'ai utilisé certains types d'élimination des chaînes pour affiner les données ainsi que analyse morphologique et stemming. Notez également que je travaille sur turc, qui a différentes caractéristiques par rapport à l'anglais. Enfin, j'ai réussi à atteindre précision de ~ 88% (mesure f) pour la classification binaire et ~ 84% pour multi- classe. Ces valeurs sont des preuves solides du succès du modèle que j'ai utilisé. C'est ce que j'ai fait jusqu'à présent. Travaillant maintenant sur des modèles de clustering et de réduction, ont essayé LDA et LSI et sont passés à autre chose à moVMF et peut-être modèles sphériques (LDA + moVMF), ce qui semble mieux fonctionner sur les corpus qui ont un caractère objectif, comme les corpus de nouvelles. Si vous avez des informations et des conseils sur ces questions, j'apprécierai. J'ai besoin d'informations en particulier pour configurer une interface (orientée python, open-source) entre réduction de la dimension de l'espace des fonctionnalités méthodes (LDA, LSI, moVMF etc.) et méthodes de clustering (k -moyens, hiérarchique etc.).

49
clancularius

C'est probablement un peu tard pour la table, mais ...

Comme le souligne Bee et vous le savez déjà, l'utilisation de SVM comme classificateur est inutile si vous avez déjà perdu les informations dans les étapes précédant la classification. Cependant, le processus de classification de texte nécessite beaucoup plus que quelques étapes et chaque étape a des effets significatifs sur le résultat. Par conséquent, avant d'examiner des mesures de sélection de fonctionnalités plus complexes, il existe un certain nombre de possibilités beaucoup plus simples qui nécessiteront généralement une consommation de ressources beaucoup plus faible.

Prétraitez-vous les documents avant d'effectuer la tokensiation/représentation dans le format de sac de mots? La simple suppression des mots vides ou de la ponctuation peut améliorer considérablement la précision.

Avez-vous envisagé de modifier votre représentation du sac de mots pour utiliser, par exemple, des paires de mots ou des n-grammes à la place? Vous pouvez constater que vous avez plus de dimensions pour commencer, mais qu'elles se condensent beaucoup plus loin et contiennent des informations plus utiles.

Il est également intéressant de noter que la réduction de dimension est la sélection/extraction de caractéristiques. La différence est que la sélection des fonctionnalités réduit les dimensions de manière univariée, c'est-à-dire qu'elle supprime les termes sur une base individuelle tels qu'ils apparaissent actuellement sans les modifier, tandis que l'extraction des fonctionnalités (à laquelle je pense que Ben Allison fait référence) est multivaritée, combinant un ou plusieurs regrouper des termes uniques pour produire des termes orthangonaux supérieurs qui (espérons-le) contiennent plus d'informations et réduisent l'espace des fonctionnalités.

En ce qui concerne votre utilisation de la fréquence des documents, utilisez-vous simplement la probabilité/le pourcentage de documents contenant un terme ou utilisez-vous les densités de termes trouvées dans les documents? Si la première catégorie n'a que 10 doutes et qu'ils contiennent chacun un terme une fois, alors la première catégorie est bien associée au document. Cependant, si la catégorie deux ne contient que 10 documents contenant chacun le même terme cent fois, la catégorie deux a évidemment une relation beaucoup plus élevée avec ce terme que la catégorie un. Si les densités de termes ne sont pas prises en compte, ces informations sont perdues et moins vous avez de catégories, plus cette perte a d'impact. Sur une note similaire, il n'est pas toujours prudent de ne conserver que les termes qui ont des fréquences élevées, car ils ne fournissent pas réellement d'informations utiles. Par exemple, si un terme apparaît cent fois dans chaque document, il est considéré comme un terme de bruit et, bien qu'il semble important, il n'y a aucune valeur pratique à le conserver dans votre ensemble de fonctionnalités.

De plus, comment indexez-vous les données, utilisez-vous le modèle d'espace vectoriel avec une indexation booléenne simple ou une mesure plus compliquée telle que TF-IDF? Compte tenu du faible nombre de catégories dans votre scénario, une mesure plus complexe sera bénéfique car elles peuvent rendre compte de l'importance du terme pour chaque catégorie par rapport à son importance dans l'ensemble de l'ensemble de données.

Personnellement, j'expérimenterais d'abord certaines des possibilités ci-dessus, puis envisagerais de peaufiner la sélection/extraction des fonctionnalités avec une (ou une combinaison de) équations complexes si vous avez besoin d'une amélioration supplémentaire des performances.


Supplémentaire

Sur la base des nouvelles informations, il semble que vous soyez sur la bonne voie et une précision de 84% + (F1 ou BEP - précision et rappel basés sur des problèmes multi-classes) est généralement considérée comme très bonne pour la plupart des ensembles de données. Il se peut que vous ayez déjà acquis avec succès toutes les fonctionnalités riches en informations à partir des données, ou que quelques-unes soient encore en cours d'élagage.

Cela dit, l'analyse du `` nombre de valeurs aberrantes '', qui utilise le déclin du gain d'informations dans les entités périphériques pour déterminer la probabilité que ces informations soient utilisées, permet de prédire à quel point la réduction de dimension agressive peut être bonne pour un ensemble de données particulier. être perdu lors de la sélection des fonctionnalités. Vous pouvez l'utiliser sur les données brutes et/ou traitées pour donner une estimation de l'agressivité que vous devriez viser pour élaguer les fonctionnalités (ou les effacer selon le cas). Un article le décrivant peut être trouvé ici:

Papier avec informations sur le nombre de valeurs aberrantes

En ce qui concerne la description de TF-IDF en tant que méthode d'indexation, vous avez raison en ce qu'il s'agit d'une mesure de pondération des fonctionnalités, mais je considère qu'elle est principalement utilisée dans le cadre du processus d'indexation (bien qu'elle puisse également être utilisée pour la réduction de dimension). Le raisonnement en est que certaines mesures sont mieux orientées vers la sélection/extraction de fonctionnalités, tandis que d'autres sont préférables pour la pondération des fonctionnalités spécifiquement dans vos vecteurs de document (c'est-à-dire les données indexées). Cela est généralement dû au fait que les mesures de réduction de dimension sont déterminées sur une base par catégorie, tandis que les mesures de pondération d'indice ont tendance à être davantage orientées vers le document pour donner une représentation vectorielle supérieure.

En ce qui concerne LDA, LSI et moVMF, je crains d'en avoir trop peu d'expérience pour fournir des conseils. Malheureusement, je n'ai pas non plus travaillé avec des ensembles de données turcs ou la langue python.

36
TheManWithNoName

Je recommanderais une réduction de dimensionnalité au lieu d'une sélection de fonctionnalités. Considérez soit décomposition de valeurs singulières , analyse en composantes principales , ou mieux encore, étant donné qu'il est adapté aux représentations par sac de mots, Allocation Dirichlet latente . Cela vous permettra de conserver théoriquement des représentations qui incluent tous les mots, mais de les réduire à moins de dimensions en exploitant les relations de similitude (ou même de type synonymie) entre eux.

Toutes ces méthodes ont des implémentations assez standard auxquelles vous pouvez accéder et exécuter --- si vous nous faites savoir quelle langue vous utilisez, moi ou quelqu'un d'autre pourra vous orienter dans la bonne direction.

5
Ben Allison

Le svm linéaire est recommandé pour les caractéristiques de grande dimension. D'après mon expérience, la limitation ultime de la précision SVM dépend des "caractéristiques" positives et négatives. Vous pouvez faire une recherche dans la grille (ou dans le cas d'un svm linéaire, vous pouvez simplement rechercher la meilleure valeur de coût) pour trouver les paramètres optimaux pour une précision maximale, mais à la fin vous êtes limité par la séparabilité de vos ensembles de fonctionnalités. Le fait que vous n'obteniez pas 90% signifie que vous avez encore du travail à faire pour trouver de meilleures fonctionnalités pour décrire vos membres des classes.

1
Bee

Je suis sûr que c'est trop tard pour être utile à l'affiche, mais peut-être que cela sera utile à quelqu'un d'autre. L'approche chi carré de la réduction des fonctionnalités est assez simple à mettre en œuvre. En supposant une classification binaire BoW dans les classes C1 et C2, pour chaque caractéristique f dans candidate_features, calculer la fréquence de f dans C1; calculer le nombre total de mots C1; répéter les calculs pour C2; Calculer un chi carré déterminer le filtre candidate_features selon que la valeur de p est inférieure à un certain seuil (par exemple p <0,05). Un tutoriel utilisant Python et nltk peut être vu ici: http://streamhacker.com/2010/06/16/text-classification-sentiment-analysis-eliminate-low-) information-features / (mais si je me souviens bien, je pense que l'auteur applique incorrectement cette technique à ses données de test, ce qui fausse les résultats rapportés).

1
Brandon Loudermilk