Question

Disons que vous avez accès à un compte de messagerie avec l'historique des e-mails reçus des dernières années (~ emails 10k) classés en 2 groupes

  • authentique email
  • Spam

Comment aborderez-vous la tâche de créer une solution de réseau de neurones qui pourrait être utilisé pour la détection de spam - classer essentiellement un courriel soit comme spam ou non de spam

?

Supposons que l'extraction de courrier électronique est déjà en place et nous devons nous concentrer sur une partie de classification.

Les principaux points que j'espérer obtenir une réponse serait:

  1. Quels sont les paramètres à choisir comme entrée pour le NN, et pourquoi?
  2. Quelle est la structure du travail NN serait très probablement le mieux pour cette tâche?

En outre des recommandations de ressources, ou mises en œuvre existantes (de préférence en C #) sont plus que bienvenus

Merci

EDIT

  • Je suis mis sur l'utilisation des réseaux de neurones comme l'aspect principal du projet est de tester comment l'approche NN travaillerait pour la détection de spam
  • En outre, il est un « problème de jouet » tout simplement pour explorer sujet sur les réseaux de neurones et le spam
Était-ce utile?

La solution

Si vous insistez ... Je NNs calculer certaines caractéristiques pour chaque e-mail

Les deux caractères à base, à base de Word et fonctionnalités de vocabulaire (A propos de 97 comme je compte ces):

  1. Nombre total de caractères (C)
  2. Nombre total de caractères alpha / C Ratio de caractères alpha
  3. Nombre total de caractères chiffres / C
  4. Nombre total de caractères blancs / C
  5. Fréquence de chaque lettre / C (36 lettres du clavier - A-Z, 0-9)
  6. Fréquence des caractères spéciaux (10 caractères: *, _, +, =,%, $, @,, \, /)
  7. Nombre total de mots (M)
  8. Nombre total de mots courts / M Deux lettres ou moins
  9. Nombre total de caractères en mots / C
  10. Durée moyenne des mots
  11. Moy. durée de la peine dans les caractères
  12. Moy. longueur de phrase en mots
  13. Longueur de mot fréq. Répartition / M Ratio de mots de longueur n, n entre 1 et 15
  14. Type Ratio jeton No. de mots uniques / M
  15. hapax Freq. d'autrefois se produisant mots
  16. Hapax Dislegomena Freq. des mots deux fois se produisant
  17. Yule la mesure K
  18. La mesure de Simpson D
  19. Sichel de la mesure S
  20. La mesure W Brunet
  21. La mesure de R Honoré
  22. Fréquence de la ponctuation 18 caractères de ponctuation. ,; ? ! : () - « «»<> [] {}

Vous pouvez également ajouter quelques fonctionnalités basées sur la mise en forme: couleurs, polices, tailles, ... utilisées

.

La plupart de ces mesures peuvent être consultées en ligne, dans les journaux, ou même Wikipedia (ils sont tous les calculs simples, probablement sur la base des autres caractéristiques).

Donc, avec environ 100 fonctions, vous avez besoin de 100 entrées, un certain nombre de noeuds dans une couche cachée, et un noeud de sortie.

Les entrées devraient être normalisées en fonction de votre corpus préclassifiées en cours.

Je le diviser en deux groupes, l'utiliser comme un groupe de formation, et l'autre en tant que groupe d'essai, ne jamais les mélanger. Peut-être dans un rapport 50/50 de groupes train / d'essai avec des rapports de spam / nonspam similaires.

Autres conseils

Vous définissez sur le faire avec un réseau de neurones? On dirait que vous êtes mis en place assez bien utiliser , qui est décrit bien dans un deux essais par Paul Graham:

L'histoire classée vous avez accès à serait corpora très forte pour alimenter un algorithme bayésien, vous finiriez probablement avec un résultat tout à fait efficace.

  1. Vous aurez essentiellement un problème dans son ensemble, de même portée à la conception et à la formation du réseau de neurones, de l'extraction de caractéristiques. Là où je commencerais, si je vous étais, est en tranchage et découpant le texte d'entrée dans un grand nombre de façons, chacun étant une caractéristique d'entrée de potentiel le long des lignes de « ce signal de neurone 1.0 si « prix » et « viagra » se produisent dans les 3 mots les uns des autres », et celles selon culling corrélation absolue meilleure avec l'identification de spam.
  2. Je commence par prendre mes 50 à 200 neurones caractéristiques d'entrée et de les brancher à un seul neurone de sortie (valeurs formées pour 1,0 = spam, -1,0 = pas du spam), à savoir un perceptron simple couche. Je pourrais essayer un filet de rétropropagation à plusieurs couches si cela a fonctionné mal, mais je ne retiendrai pas mon souffle pour de grands résultats.

En général, mon expérience m'a amené à croire que les réseaux de neurones montreront des performances médiocres au mieux dans cette tâche, et je recommanderais certainement quelque chose bayésienne que le Tchad Birch suggère, si cela est autre chose qu'un problème de jouet pour explorer de neurones filets.

Tchad, les réponses que vous avez obtenu jusqu'à présent sont raisonnables, mais je vais répondre à votre mise à jour:

  

Je suis mis sur l'utilisation des réseaux de neurones comme l'aspect principal du projet est de tester comment l'approche NN travaillerait pour la détection de spam.

Eh bien, alors vous avez un problème: un test empirique comme celui-ci ne peut pas prouver l'inadaptation

.

Vous êtes probablement mieux loti apprendre un peu plus sur ce que NN ne fait et ne le font pas, de voir pourquoi ils ne sont pas une idée particulièrement bonne pour ce genre de problème de classification. Probablement un moyen utile de penser à eux est aussi approximateurs fonction universelle. Mais pour une certaine idée de la façon dont tout cela se ensemble dans le domaine de la classification (ce qui est le problème de filtrage de spam est), la navigation d'un texte d'introduction comme classification de motifs pourrait être utile.

A défaut si vous êtes bien décidés à le voir courir, il suffit d'utiliser une bibliothèque générale NN pour le réseau lui-même. La plupart de votre question va être comment représenter les données d'entrée de toute façon. La structure `meilleure » est non évidente, et il n'a probablement pas beaucoup. Les entrées vont devoir être un certain nombre de mesures (normalisées) (caractéristiques) sur le corpus lui-même. Certains sont évidents (chiffres de mots « spam », etc.), d'autres beaucoup moins. Ceci est la partie que vous pouvez vraiment jouer avec, mais vous devriez vous attendre à faire mal par rapport aux filtres bayésiens (qui ont leurs propres problèmes ici) en raison de la nature du problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top