17

Diciamo che ha accesso a un account di posta elettronica con la storia delle email ricevute degli ultimi anni (~ email 10K) classificati in 2 gruppiLe reti neurali per il rilevamento e-mail di spam

  • genuino e-mail
  • di spam

Come ti appresti al compito di creare una soluzione di rete neurale che potrebbe essere utilizzata per il rilevamento di spam, classificando sostanzialmente qualsiasi e-mail come spam o non spam?

Supponiamo che il recupero delle e-mail sia già attivo e che dobbiamo concentrarci solo sulla parte di classificazione.

I punti principali che vorrei sperare di ottenere risposta sarebbe:

  1. quali parametri scegliere come input per il NN, e perché?
  2. Quale struttura dell'NN potrebbe funzionare meglio per tale compito?

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

Grazie

EDIT

  • sono incaricato di utilizzare reti neurali come l'aspetto principale del progetto è testare come l'approccio NN potrebbe funzionare per il rilevamento di spam
  • Al quindi è un "problema giocattolo" semplicemente per esplorare l'argomento su reti neurali e spam

risposta

24

Se ti ostini a NNs ... Vorrei calcolare alcune caratteristiche per ogni email

, basata Word-Entrambi basati su caratteri, e le caratteristiche Vocabolario (Circa il 97 come ho contare questi):

  1. N. totale di caratteri (C)
  2. totale N. di caratteri alfa/C Rapporto di caratteri alfa
  3. totale N. di caratteri numerici/C
  4. non di caratteri di spaziatura totale/C
  5. Frequenza di ogni lettera/C (36 lettere della tastiera - AZ, 0-9)
  6. Frequenza di caratteri speciali (10 caratteri: *, _, +, =,%, $, @,, \, /)
  7. totale N. di parole (M)
  8. totale N. di parole brevi/M due lettere o meno
  9. totale N. di caratteri in parole/C
  10. parola media lunghezza
  11. medio. lunghezza della frase in caratteri
  12. lunghezza della frase nelle parole
  13. lunghezza della parola freq. distribuzione/M Rapporto di parole di lunghezza n, n tra 1 e 15
  14. Tipo Token Ratio No. Di parole uniche/M
  15. Hapax Legomena Freq.di una volta che si verificano le parole
  16. Hapax Dislegomena Freq. di due volte si verificano parole
  17. misura K di Yule
  18. misura D di Simpson
  19. misura S di Sichel
  20. misura W Brunet
  21. di Honore R misura
  22. Frequenza di caratteri punteggiatura 18 punteggiatura. ,; ? ! :() - “«»<> [] {}

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

La maggior parte di queste misure può essere trovata online, in documenti o anche in Wikipedia (sono tutti semplici calcoli, probabilmente basati sulle altre funzionalità).

Quindi con circa 100 funzioni, sono necessari 100 ingressi, un certo numero di nodi in un livello nascosto e un nodo di uscita.

Gli ingressi dovrebbero essere normalizzati in base al corpus pre-registrato corrente.

L'ho diviso in due gruppi, ne uso uno come gruppo di allenamento e l'altro come gruppo di prova, senza mai mischiarli. Forse con un rapporto 50/50 di treni/gruppi di test con simili rapporti spam/nonspam.

8

Sei impostato per farlo con una rete neurale? Sembra che il gioco è fatto abbastanza bene da usare Bayesian classification, che è delineato bene in un paio di saggi di Paul Graham:

La storia classificato si ha accesso per creare corpora fortissime da alimentare con un algoritmo bayesiano, probabilmente si otterrebbe un risultato abbastanza efficace.

+0

Grazie Chad, sì, sono pronto a farlo con NN, questo è un requisito, ed è proprio per verificare se l'approccio NN funzionerebbe in questo contesto. – kristof

2
  1. Fondamentalmente avrete un intero problema, di portata simile alla progettazione e all'addestramento della rete neurale, dell'estrazione delle caratteristiche. Dove vorrei iniziare, se fossi in te, è in affettare e tagliare a cubetti il ​​testo di input in un gran numero di modi, ognuno dei quali è un potenziale ingresso di input sulla falsariga di "questo neurone segnala 1.0 se si verificano 'prezzo' e 'viagra' entro 3 parole l'una dall'altra ", e selezionando quelle in base alla migliore correlazione assoluta con l'identificazione dello spam.
  2. Vorrei iniziare prendendo i miei migliori neuroni di input da 50 a 200 e collegandoli a un singolo neurone di uscita (valori addestrati per 1.0 = spam, -1.0 = non spam), cioè un perceptron a livello singolo. Potrei provare una rete di backpropagation multistrato se questo ha funzionato male, ma non avrei trattenuto 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 reti neurali.

+0

Cheers Caos, buon punto. Considererei anche l'estrazione di feature come un problema di complessità simile a quello di NN stesso. E sì, è davvero un problema di giocattoli per esplorare le reti neurali – kristof

2

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

sono incaricato di utilizzare reti neurali come l'aspetto principale del progetto è quello di testare come l'approccio NN potrebbe funzionare per il rilevamento di spam.

Bene, allora avete un problema: un test empirico come questo non può rivelarsi inadeguato.

Probabilmente stai meglio imparando un po 'su ciò che NN effettivamente fa e non fa, per capire perché non sono particolarmente adatte a questo tipo di problema di classificazione. Probabilmente un modo utile per pensarli è come approssimatori di funzioni universali. Ma per una qualche idea di come tutto questo rientri nella zona della classificazione (che è il problema del filtro antispam), la navigazione di un testo introduttivo come pattern classification potrebbe essere utile.

In caso contrario, se sei morto impostato su vederlo eseguito, basta utilizzare qualsiasi libreria NN generale per la rete stessa. La maggior parte del tuo problema sarà come rappresentare comunque i dati di input. La struttura "migliore" non è ovvia e probabilmente non ha molta importanza. Gli input dovranno essere un numero di misure (caratteristiche) (normalizzate) sul corpus stesso. Alcuni sono ovvi (conteggi di parole "spam", ecc.), Alcuni molto meno. Questa è la parte con cui puoi davvero giocare, ma dovresti aspettarti di fare uno scarso confronto con i filtri bayesiani (che hanno i loro problemi qui) a causa della natura del problema.

+0

Grazie Simon, la prima cosa che mi è venuta in mente quando ho sentito dell'idea era in realtà: quale tipo di parametri potrebbero essere usati per l'input. Hai anche ragione che questo tipo di test non può davvero dimostrarsi inadeguato. Probabilmente dovrei aggiungere che questo è in realtà solo un esercizio solo per giocare con NN e problemi di rilevamento dello spam per qualcuno che è piuttosto nuovo nel campo dell'IA - aggiornerò la mia domanda per gettare un po 'più di luce su questo :) – kristof