Come imparare il rilevamento della posta elettronica spam?


8

Voglio imparare come viene fatto un rilevatore di e-mail di spam. Non sto cercando di costruire un prodotto commerciale, sarà un serio esercizio di apprendimento per me. Pertanto, sto cercando risorse, come progetti esistenti, codice sorgente, articoli, documenti ecc. Che posso seguire. Voglio imparare con esempi, non penso di essere abbastanza bravo da farlo da zero. Idealmente, mi piacerebbe sporcarmi la mano in bayesiano.

C'è qualcosa del genere? Il linguaggio di programmazione non è un problema per me.

Risposte:


6

Prima di tutto controllare questo con attenzione. Troverai un semplice set di dati e alcuni documenti da rivedere.

MA, dato che vuoi iniziare un semplice progetto di apprendimento, ti consiglio di non leggere documenti (che ovviamente non sono di base ), ma prova a costruire il tuo studente bayesiano che non è così difficile.

Personalmente suggerisco le diapositive di Andrew Moore sui modelli grafici probabilistici che sono disponibili gratuitamente e che puoi imparare da loro semplicemente e passo dopo passo.

Se hai bisogno di un aiuto più dettagliato, commenta questa risposta e sarò felice di aiutarti :)

Goditi l'apprendimento baysian!



2

C'è un'introduzione di base al metodo bayesiano per il rilevamento dello spam nel libro "Doing Data Science - Straight Talk from the Frontline" di Cathy O'Neil, Rachel Schutt.

Il capitolo è buono, perché spiega perché altri modelli comuni di data science non funzionano per i classificatori di spam. L'intero libro usa R in tutto, quindi prendilo solo se sei interessato a lavorare con R.

Utilizza l'e-mail Enron impostata come dati di addestramento, poiché ha già e-mail divise in spam / non spam.


2

Questo è in realtà un problema davvero approfondito su cui molte persone e aziende hanno lavorato. Ecco alcune nozioni di base:

Innanzitutto, dobbiamo rappresentare bene i dati. Ciò implica in qualche modo rappresentare ogni documento come un vettore indspazio tridimensionale. Idealmente, in questo spazio, vogliamo che campioni con la stessa etichetta siano vicini a distanza euclidea, e campioni che sono etichette diverse siano distanti da distanza euclidea. Questo passaggio può essere davvero difficile, ma una rappresentazione provata e vera è chiamata Frequenza di frequenza inversa del documento (tf-idf). Qui, ogni dimensione nello spazio rappresenta una parola particolare e il valore in quella dimensione per un particolare campione rappresenta fondamentalmente il numero normalizzato di volte in cui quella parola compare nel documento. Puoi leggere di più qui . C'è un'implementazione abbastanza buona di questa rappresentazione se vuoi provare.

Ora i dati si trovano in uno spazio utile, ma in uno spazio veramente ad alta dimensione. Consiglierei di ridurre questa dimensionalità in qualche modo, ma questo è un argomento completo per un altro thread.

Infine potresti addestrare un algoritmo per classificare i campioni (che è quello di cui parlano le altre risposte). Ci sono molte grandi scelte: reti neurali, adaboost, SVM, Naive Bayes e modelli grafici di classificazione ti daranno tutti buoni risultati. Molti di questi hanno implementazioni anche in scikit-learn.

Ma i migliori algoritmi sfruttano il fatto che questo problema è in realtà un trasferimento di apprendimento. Cioè, le distribuzioni da cui provengono i dati di formazione e test potrebbero non essere esattamente le stesse - perché il tipo di cose che una persona pensa che siano spam potrebbe essere diverso dal tipo di cose che un'altra persona pensa siano spam.


Puoi approfondire il tuo ultimo paragrafo ("transfer learning")? Potresti fornire link o nomi?
Valentas,

1
Nell'apprendimento automatico convenzionale, abbiamo alcuni dati che provengono da una particolare distribuzione di probabilità. Quindi apprendiamo una sorta di modello su quei dati, sperando che il modello si generalizzi ad esempi non visti durante l'allenamento. Funzionerà solo se questi campioni invisibili provengono dalla stessa distribuzione di probabilità, quindi supponiamo che sia così. Nell'apprendimento del trasferimento, non facciamo questa ipotesi. Ecco un documento di indagine sul campo.
Giordania,

E come ti viene in mente la dvariabile? È un numero fisso scelto da uno scienziato?
Martin Vseticka,

Un approccio comune è avere d parole e ognuna delle dgli elementi nel vettore rappresentano la frequenza con cui quella parola compare nel testo. Ci sono solo tante parole uniche usate in tutti i campioni che stai prendendo in considerazione, quindi c'è un preciso limite superiored. I ricercatori di solito rimuovono anche alcuni tipi di parole che non ritengono utili per la classificazione, come "the", "e" "it", ecc.
Jordan A
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.