Domanda

Diciamo che si ha accesso a un account di posta elettronica con la storia delle email ricevute degli ultimi anni (~ 10K) messaggi di posta elettronica classificati in 2 gruppi

  • vera e propria e-mail
  • Spam

Come ci si avvicina il compito di creare una soluzione di rete neurale che potrebbe essere utilizzato per il rilevamento dello spam - in pratica classificare qualsiasi email o come spam o non spam

?

Supponiamo che il recupero e-mail è già in atto e abbiamo bisogno di concentrarsi su solo una parte di classificazione.

I punti principali che vorrei sperare di ottenere una risposta potrebbe essere:

  1. quali parametri scegliere come input per il NN, e perché?
  2. Quale struttura del NN molto probabilmente il lavoro migliore per tale compito?

Anche eventuali raccomandazioni di risorse, o implementazioni esistenti (preferibilmente in C #) sono più che benvenuti

Grazie

Modifica

  • Io sono impostata sull'utilizzo di reti neurali, come l'aspetto principale del progetto è quello di verificare come l'approccio NN avrebbe funzionato per il rilevamento dello spam
  • Inoltre si tratta di un "problema giocattolo" semplicemente per esplorare soggetto su reti neurali e spam
È stato utile?

Soluzione

Se ti ostini a NNs ... Vorrei calcolare alcune caratteristiche per ogni e-mail

Entrambe le caratteristiche testuale, Word-based, e Vocabolario (Circa il 97 come ho contano questi):

  1. nessuna totale di caratteri (C)
  2. nessuna totale di caratteri alfa / C Rapporto di caratteri alfa
  3. nessuna totale di caratteri cifra / C
  4. nessuna totale di caratteri di spazio bianco / C
  5. La frequenza di ogni lettera / C (36 lettere della tastiera - A-Z, 0-9)
  6. Frequenza di caratteri speciali (10 caratteri: *, _, +, =,%, $, @,, \, /)
  7. nessuna totale di parole (M)
  8. nessuna totale di parole brevi / M Due lettere o meno
  9. nessuna totale di caratteri in parole / C
  10. Durata media di parola
  11. Avg. lunghezza delle frasi in caratteri
  12. Avg. lunghezza delle frasi con le parole
  13. lunghezza Word freq. distribuzione / M Rapporto di parole di lunghezza n, n tra 1 e 15
  14. tipo di token Rapporto N. di canali unici / M
  15. Hapax legomena Freq. parole di una volta che si verificano
  16. Hapax Dislegomena Freq. parole di due volte che si verificano
  17. misura K di Yule
  18. misura D Simpson
  19. misura S di Sichel
  20. misura W Brunet
  21. misura R Honore
  22. Frequenza di caratteri di punteggiatura 18 punteggiatura:. ,; ? ! : () - “«»<> [] {}

Si potrebbe anche aggiungere alcune altre funzionalità in base alla formattazione: colori, font, dimensioni, ... usati

.

La maggior parte di queste misure si possono trovare online, in carte, o anche Wikipedia (sono calcoli tutti semplici, probabilmente sulla base di altre caratteristiche).

Quindi, con circa 100 funzioni, è necessario 100 ingressi, un numero di nodi in un livello nascosto, e un nodo di uscita.

Gli ingressi dovrebbero essere normalizzata secondo il vostro attuale pre-classificati corpus.

Mi piacerebbe dividere in due gruppi, utilizzarne uno come gruppo di formazione, e l'altro come un gruppo di test, non li miscelazione. Forse con un rapporto 50/50 di gruppi treno / test con simili rapporti di spam / nonspam.

Altri suggerimenti

Stai impostato a farlo con una Rete Neurale? Sembra che il gioco è fatto abbastanza bene da usare Bayesiano classificazione, che è delineato bene in un paio di saggi di Paul Graham:

La storia classificato si ha accesso ad renderebbe molto forte corpora per alimentare ad un algoritmo bayesiano, si sarebbe probabilmente finire con un risultato molto efficace.

  1. Avrai fondamentalmente sono un intero problema, di portata analoga alla progettazione e formazione della rete neurale, di estrazione di caratteristiche. Dove vorrei iniziare, se fossi in te, è in affettare e sminuzzare il testo di input in un gran numero di modi, ognuno dei quali è un potenziale ingresso funzione lungo le linee di "questa neuroni segnali 1.0 se 'prezzo' e 'viagra' si verificano entro 3 parole l'uno dall'altro", e abbattimento quelle secondo correlazione migliore assoluta identificazione spam.
  2. mi piacerebbe iniziare prendendo i miei migliori 50 a 200 sono dotate di ingresso neuroni e li collegare ad un singolo neurone di uscita (i valori addestrati per 1,0 = lo spam, -1.0 = non spam), vale a dire un perceptron singolo strato. Potrei provare un backpropagation rete multistrato se ha funzionato male, ma non sarebbe trattenendo il respiro per grandi risultati.

In generale, la mia esperienza ha mi ha portato a credere che le reti neurali mostreranno prestazioni mediocre in questo compito, e mi piacerebbe sicuramente consigliare qualcosa bayesiana come suggerisce il Ciad Birch, se questo è qualcosa di diverso da un problema giocattolo per esplorare neurale reti.

Chad, le risposte che hai ottenuto finora sono ragionevoli, ma io rispondere alla vostra aggiornamento che:

  

sono incaricato di utilizzare reti neurali come l'aspetto principale del progetto è quello di verificare come l'approccio NN avrebbe funzionato per il rilevamento dello spam.

Bene, allora avete un problema: un test empirico come questo non può dimostrare inadeguatezza

.

Sei probabilmente meglio fuori imparare un po 'di quello NN effettivamente fare e non fare, di vedere il motivo per cui non sono particolarmente buona idea per questo tipo di problema di classificazione. Probabilmente un modo utile per pensare a loro è come approssimatori funzione universale. Ma per qualche idea di come tutto questo si inserisce insieme nella zona di classificazione (che è ciò che il problema filtraggio dello spam è), la navigazione di un testo introduttivo come modelli di classificazione potrebbe essere utile.

In mancanza di questo, se si è determinata a vederlo correre, basta usare qualsiasi libreria generale NN per la rete stessa. La maggior parte del problema sta per essere come rappresentare i dati di input in ogni caso. La struttura `migliore' non è ovvio, e probabilmente non importa più di tanto. Gli ingressi sono costrette a essere un numero di misurazioni (normalizzate) (caratteristiche) sul corpus stessa. Alcuni sono ovvi (conti di parole 'Spam', ecc), alcune molto meno. Questa è la parte che si può davvero giocare con, ma si dovrebbe aspettare di fare male rispetto ai filtri bayesiani (che hanno i loro problemi qui) a causa della natura del problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top