J'ai créé un classificateur Naive Bayes qui utilise la technique du sac de mots pour classer les messages de spam sur un babillard. Cela fonctionne, mais je pense que je pourrais obtenir de bien meilleurs résultats si mes modèles tenaient compte des ordonnances et des phrases. (ex: «filles» et «en direct» peuvent ne pas déclencher un score de spam élevé, même si les «filles en direct» sont très probablement des ordures). Comment créer un modèle prenant en compte l'ordre des mots?
J'ai envisagé de stocker des n-grammes (check-out, out-these-live, these-live-girls), mais cela semble augmenter radicalement la taille du dictionnaire dans lequel je garde le score et provoque une incohérence en tant que phrases avec très un libellé similaire mais un ordre différent s'écoulera.
Je ne suis pas lié à la classification bayésienne, mais j'aimerais quelque chose qu'une personne sans solide expérience en statistique pourrait grok et mettre en œuvre.
la source
Réponses:
Il existe un hack très simple pour incorporer l'ordre des mots dans une implémentation de modèle de sac de mots existante. Traitez certaines des phrases, comme les biogrammes fréquemment utilisés (par exemple New York) comme une unité, c'est-à-dire un seul mot au lieu de les traiter comme des entités distinctes. Cela garantira que "New York" est différent de "York New". Vous pouvez également définir des bardeaux de mots d'ordre supérieur comme pour n = 3,4, etc.
Vous pouvez utiliser le Lucene ShingleFilter pour décomposer le texte de votre document en bardeaux comme étape de prétraitement, puis appliquer le classificateur sur ce texte décomposé.
la source
Essayez quelques modèles génératifs comme HMM. Vérifiez simplement le lien suivant: /stats/91290/how-do-i-train-hmms-for-classification
la source
Il existe un tas de techniques. Vous avez déjà mentionné n-gramme, puis il y a la combinaison de mots et d'autres. Mais le principal problème (au moins de votre point de vue) est que lorsque la fonctionnalité devient plus complexe (comme le n-gramme), le nombre de fonctionnalités augmente considérablement. C'est gérable. Fondamentalement, avant la classification, vous devez marquer vos caractéristiques, puis seuil à un certain score. de cette façon, les fonctionnalités (ou dans votre cas, les n-grammes) qui sont notées en dessous d'un certain niveau sont omises et le nombre de fonctionnalités devient gérable. quant à la notation. Il existe de nombreuses façons (dont la sélection dépend de votre application) de noter les fonctionnalités. Vous pouvez commencer par "séparation BiNormal", "chi square", "Information Gain" et etc. Je ne sais pas si cette réponse vous aide mais si vous êtes intéressé je peux élaborer ...
J'ai oublié, dans la combinaison de mots, vous mettez une fenêtre de taille m sur le texte et extrayez chaque combinaison de n mots. bien sûr n
la source