Comment créer une bonne liste de mots vides

9

Je suis à la recherche de conseils sur la façon de gérer une liste de mots vides. Quelqu'un sait-il / quelqu'un peut-il recommander une bonne méthode pour extraire des listes de mots vides du jeu de données lui-même pour le prétraitement et le filtrage?

Les données:

une énorme quantité de texte humain de longueur variable (termes de recherche et phrases entières (jusqu'à 200 caractères)) sur plusieurs années. Le texte contient beaucoup de spam (comme la saisie de machines par des bots, des mots simples, des recherches stupides, des recherches de produits ...) et seulement quelques% semblent utiles. J'ai réalisé que parfois (mais très rarement) les gens fouillent mon côté en posant des questions vraiment cool. Ces questions sont tellement cool que je pense qu'il vaut la peine de les approfondir pour voir comment les gens recherchent au fil du temps et quels sujets les gens ont été intéressés à utiliser mon site Web.

Mon problème:

c'est que j'ai vraiment du mal avec le prétraitement (c'est-à-dire la suppression du spam). J'ai déjà essayé une liste de mots vides sur le Web (NLTK, etc.), mais cela n'aide pas vraiment mes besoins concernant cet ensemble de données.

Merci pour vos idées et vos discussions!

PlagTag
la source
1
Le module Python NLTK fournit des données de mots vides et s'il ne vous a pas aidé à mieux fournir plus d'informations sur votre jeu de données. Pourquoi cela n'a-t-il pas été utile dans votre cas?
Kasra Manshaei
@kasramsh: Quand j'ai filtré pour ces logiciels, j'avais l'impression que cela ne filtrait pas de manière significative le spam. Je pense que la raison en est que ces listes sont générées sur des textes naturels (pas sûr) et ne sont donc pas utilisables pour les mots de recherche et les requêtes de site. Comme lorsque vous classez (sur la base de la similitude des chaînes de recherche), j'ai eu l'impression que le spam a un fort effet au niveau de l'entropie et mélange ainsi le résultat final: - /.
PlagTag
1
Je pense que @PlagTag ne comprend pas ce que c'est stop words. Stop-wrods est une liste de la plupart des mots dans une langue, par exemple I, the, aet ainsi de suite. Vous allez simplement supprimer ces mots de votre texte avant de commencer à former votre algorithme qui essaie d'identifier quel texte est du spam ou non. Cela ne vous a pas aidé à identifier le texte spam ou non, cela peut améliorer votre algorithme d'apprentissage.
itdxer
@itdxer, merci pour votre commentaire. J'ai utilisé le terme mots d'arrêt ici dans une extension plus large (car je pensais que cela pourrait convenir à cet effet). Merci d'avoir
résolu

Réponses:

5

Une approche consisterait à utiliser le score tf-idf . Les mots qui apparaissent dans la plupart des requêtes ne seront d'aucune utilité pour différencier les bonnes requêtes de recherche des mauvaises. Mais celles qui surviennent très fréquemment (tf élevé ou fréquence de terme) dans seulement quelques requêtes (idf élevé ou fréquence de document inverse) sont susceptibles d'être plus importantes pour distinguer les bonnes requêtes des mauvaises.

Shagun Sodhani
la source
merci beaucoup, je vais essayer celui-ci et rapporter ici!
PlagTag
en fait, un score élevé de l'IDF suffirait à lui seul
CpILL
2

Cela dépend de votre application.

Lorsque vous effectuez une modélisation de rubrique, essayez d'abord les mots d'arrêt par défaut. Lorsqu'il y a des mots en évidence dans de nombreux sujets (notez ma formulation plutôt vague), ils sont de bons candidats pour des mots d'arrêt supplémentaires.

Par exemple, dans un corpus contenant des textes contenant des figures et des éléments tabulaires, les mots "fig", "figure", "tab" ou "table" sont de bons mots-clés supplémentaires. En conséquence, vos sujets deviennent plus bien définis.


la source
1

L'utilisation de TFIDF (terme fréquence fréquence de document inverse) résoudra votre objectif. Obtenez le score TFIDF pour chaque mot de votre document et triez les mots en fonction de leurs scores grâce auxquels vous pouvez sélectionner les mots importants dans vos données.

Thilak Adiboina
la source
1

Une approche que j'ai utilisée pour construire une liste de mots vides est de construire et de former un modèle de régression logistique (en raison de son interprétabilité) sur vos données texte. Prenez la valeur absolue des coefficients pour chaque jeton. Ensuite, triez par ordre décroissant la valeur absolue des coefficients des jetons. Ensuite, créez une liste de tous les jetons avec une valeur absolue de coefficient élevé qui pourraient conduire à un sur-ajustement ou qui pourraient répondre à d'autres critères pour être un mot-clé. Cette liste est votre liste de mots vides. Vous pouvez ensuite appliquer cette liste de mots vides à un autre ensemble de documents de ce type (un peu comme un ensemble de tests), pour voir si leur suppression augmente la précision, la précision ou le rappel du modèle de l'ensemble de tests.

Cette stratégie est efficace car elle prend en compte l'impact des jetons lors de la construction d'une liste de mots vides.

dshefman
la source
0

Les mots vides peuvent faire partie de la solution à un moment donné, mais pas la clé. Dans tous les cas, pour toutes les langues principales, de bonnes listes de mots vides existent, elles ne doivent pas être spécifiques à un domaine.

Je ne pense pas non plus que l'utilisation de TD-IDF seule soit vraiment correcte. Il peut y avoir des mots très rares (potentiellement des ordures) dans des chaînes de mauvaise qualité.

Au lieu d'essayer de deviner quelles fonctionnalités exactes sont utiles: je commencerais par créer un ensemble de données en sélectionnant au hasard certaines des données et en les étiquetant à la main (comme goodou bad, ou sur une échelle de 0,0 à 1,0). Ensuite, codez quelque chose qui extrait de nombreuses fonctionnalités (longueur, nombre de mots (jetons), score de spam, qu'il contienne des URL ou des caractères botish, langue détectée, qu'il y ait un point d'interrogation, qu'il soit correctement capitalisé). N'oubliez pas non plus d'inclure les fonctionnalités non linguistiques que vous pourriez avoir, comme le pays du geoIP de l'utilisateur qui a fait la requête, si l'utilisateur était connecté, quel âge a le compte de l'utilisateur. Donc, à ce stade, vous aurez une table / CSV massive, et une plus petite avec une colonne supplémentaire pour l'étiquette que vous avez ajoutée.

Ensuite, formez un package d'apprentissage automatique avec ces exemples étiquetés pour créer un modèle suffisamment précis pour vous. Laissez ensuite ce modèle s'exécuter sur le reste des données.

Si vous ne souhaitez pas trop coder, vous pouvez même simplement intégrer ces fonctionnalités au format CSV et les donner à l' interface de feuille de calcul de l'API Google Prediction .

Adam Bittlingmayer
la source