Sieci neuronowe do wykrywania spamu w wiadomościach e-mail

Załóżmy, że masz dostęp do konta e-mail z historią otrzymanych e-maili z ostatnich lat (~10K e-maili) podzielonych na 2 grupy

  • oryginalny email
  • spam

Jak podchodziłbyś do zadania stworzenia rozwiązania sieci neuronowej, które mogłoby być używane do wykrywania spamu - zasadniczo klasyfikując każdą wiadomość e-mail jako spam lub nie spam?

Załóżmy, że pobieranie wiadomości e-mail jest już na miejscu i musimy skupić się na części klasyfikacji tylko.

Główne punkty, na które mam nadzieję uzyskać odpowiedź, to:

  1. jakie parametry wybrać jako Wejście dla NN i dlaczego?
  2. jaka struktura NN najlepiej sprawdziłaby się do takiego zadania?

Również wszelkie rekomendacje zasobów, lub istniejące implementacje (najlepiej w C#) są bardziej niż mile widziane

Thank you

EDIT

    Jestem nastawiony na wykorzystanie sieci neuronowych jako głównego aspektu na projekt ma na celu przetestowanie, jak podejście NN będzie działać dla wykrywania spamu Jest to również "problem zabawki" po prostu zbadać temat na sieci neuronowe i spam
Author: Gyan Veda, 2009-04-21

4 answers

Jeśli nalegasz na NNs... Obliczyłbym kilka funkcji dla każdego e-maila

Zarówno funkcje znakowe, słownikowe, jak i słownikowe (około 97 z tego co liczę):

  1. całkowita liczba znaków (C)
  2. całkowita liczba znaków Alfa / Współczynnik C znaków Alfa
  3. całkowita liczba znaków cyfr / C
  4. całkowita liczba znaków spacji / C
  5. Częstotliwość każdej litery / C (36 liter klawiatury – A-Z, 0-9)
  6. Częstotliwość znaków specjalnych (10 znaków: *, _ ,+,=,%,$,@,ـ,\,/)
  7. całkowita liczba słów (M)
  8. całkowita liczba krótkich słów / M dwie litery lub mniej
  9. całkowita liczba znaków w słowach / C
  10. Średnia długość słowa
  11. Avg. długość zdania w znakach
  12. Avg. długość zdania w słowach
  13. długość słowa freq. stosunek rozkładu / m słów o długości n, n między 1 a 15
  14. Type Token Ratio No. Unikalnych słów / M
  15. Hapax Legomena Freq. z raz występujących słowa Hapax Dislegomena Freq. z wyrazów dwukrotnie występujących
  16. Yule ' s k measure
  17. miara D Simpsona
  18. miara Sichela
  19. miara bruneta
  20. Honore ' S R measure
  21. Częstotliwość znaków interpunkcyjnych 18 znaków interpunkcyjnych: . ، ; ? ! : ( ) – " " " [ ] { }

Możesz również dodać kilka dodatkowych funkcji w oparciu o formatowanie: kolory, czcionki, rozmiary,... używany.

Większość z tych środków można znaleźć w Internecie, w dokumenty, a nawet Wikipedia (to proste obliczenia, prawdopodobnie oparte na innych funkcjach).

Więc mając około 100 funkcji, potrzebujesz 100 wejść, pewnej liczby węzłów w ukrytej warstwie i jednego węzła wyjściowego.

Dane wejściowe muszą być znormalizowane zgodnie z Twoim obecnym, wstępnie sklasyfikowanym korpusem.

Podzieliłbym je na dwie grupy, jedną jako grupę treningową, a drugą jako grupę testową, nigdy ich nie mieszając. Może w stosunku 50/50 grup pociąg/test z podobnym współczynniki spam/nspam.

 24
Author: Osama Al-Maadeed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-06 12:54:11

Czy chcesz to zrobić za pomocą sieci neuronowej? Wygląda na to, że jesteś dobrze skonfigurowany do używania klasyfikacji bayesowskiej , która jest dobrze opisana w kilku esejach Paula Grahama:

Tajna historia, do której masz dostęp, byłaby bardzo mocna do wykorzystania algorytmu bayesowskiego, prawdopodobnie skończyłbyś z całkiem skutecznym wynikiem.

 8
Author: Chad Birch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-20 21:47:23
  1. będziesz miał w zasadzie cały problem, podobny do projektowania i szkolenia sieci neuronowej, ekstrakcji funkcji. Na Twoim miejscu chciałbym zacząć od krojenia i pokrojenia tekstu wejściowego na wiele sposobów, każdy z nich jest potencjalnym wejściem funkcji wzdłuż linii "ten neuron sygnalizuje 1.0, Jeśli "cena" i "viagra" wystąpią w ciągu 3 słów od siebie", i wybierania tych zgodnie z najlepszą bezwzględną korelacją z identyfikacją spamu.
  2. zacząłbym od moje najlepsze 50 do 200 neuronów wejściowych i podłączenie ich do pojedynczego neuronu wyjściowego (wartości 1.0 = spam, -1.0 = nie spam), czyli jednowarstwowego perceptronu. Mógłbym wypróbować wielowarstwową siatkę przeciwprzepięciową, gdyby działała słabo, ale nie wstrzymywałbym oddechu, aby uzyskać świetne wyniki.

Ogólnie, moje doświadczenie doprowadziło mnie do przekonania, że sieci neuronowe pokażą przeciętną wydajność w najlepszym przypadku w tym zadaniu, i zdecydowanie polecam coś Bayesian jak Chad Birch sugeruje, czy jest to coś innego niż problem zabawek do odkrywania sieci neuronowych.

 2
Author: chaos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-20 22:06:43

Chad, odpowiedzi jakie do tej pory otrzymałeś są rozsądne, ale odpowiem na Twój update, że:

Jestem nastawiony na korzystanie z sieci neuronowych, ponieważ głównym aspektem projektu jest testowanie, jak podejście NN będzie działać w wykrywaniu spamu.

No to masz problem: taki empiryczny test nie może okazać się nieprzydatny.

Prawdopodobnie najlepiej będzie dowiedzieć się trochę o tym, co NN faktycznie robi, a nie robi, aby zobaczyć, dlaczego nie są szczególnie dobrym pomysłem dla tego rodzaju problem klasyfikacji. Prawdopodobnie pomocnym sposobem myślenia o nich są uniwersalne aproksymatory funkcji. Ale dla jakiegoś pomysłu, jak to wszystko pasuje do siebie w obszarze klasyfikacji (co jest tym, co problem filtrowania spamu), przeglądanie tekstu intro jak klasyfikacja pattern może być pomocne.

Jeśli nie widzisz, że działa, po prostu użyj dowolnej ogólnej biblioteki NN dla samej sieci. Większość twojego problemu będzie polegała na tym, jak reprezentować dane wejściowe. "Najlepsza" struktura jest nieoczywista i prawdopodobnie nie ma to większego znaczenia. Wejścia będą musiały być szereg (znormalizowanych) pomiarów (cech) na samym korpusie. Niektóre są oczywiste (liczba słów "spam" itp.), inne znacznie mniej. To jest ta część, którą naprawdę możesz się bawić, ale powinieneś spodziewać się, że wypadnie słabo w porównaniu z filtrami Bayesowskimi (które mają tutaj swoje własne problemy) ze względu na naturę problemu.

 2
Author: simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-20 23:33:26