Como aprender a detecção de email de spam?

8

Quero saber como é feito um detector de e-mail de spam. Não estou tentando criar um produto comercial, será um exercício de aprendizado sério para mim. Portanto, estou procurando recursos, como projetos existentes, código fonte, artigos, documentos, etc., que eu possa seguir. Quero aprender com exemplos, acho que não sou bom o suficiente para fazê-lo do zero. Idealmente, gostaria de sujar minha mão em bayesiano.

Existe algo assim? Linguagem de programação não é um problema para mim.

Olá Mundo
fonte

Respostas:

6

Antes de tudo, verifique isso com cuidado. Você encontrará um conjunto de dados simples e alguns papéis para revisar.

MAS, como você deseja iniciar um projeto de aprendizado simples, recomendo não analisar os trabalhos (que obviamente não são básicos ), mas tente criar seu próprio aluno bayesiano, o que não é tão difícil.

Pessoalmente, sugiro os slides das palestras de Andrew Moore sobre os Modelos Gráficos Probabilísticos disponíveis gratuitamente e você pode aprender com eles de maneira simples e passo a passo.

Se precisar de ajuda mais detalhada, basta comentar esta resposta e teremos prazer em ajudar :)

Aprecie o aprendizado da Baía!

Kasra Manshaei
fonte
2

Há uma introdução básica ao método bayesiano para detecção de spam no livro "Doing Data Science - Straight Talk from the Frontline", de Cathy O'Neil, Rachel Schutt.

O capítulo é bom, porque explica por que outros modelos comuns de ciência de dados não funcionam para classificadores de spam. O livro inteiro usa R o tempo todo; portanto, escolha-o apenas se estiver interessado em trabalhar com R.

Ele usa o email da Enron definido como dados de treinamento, uma vez que já possui emails divididos em spam / não spam.

sheldonkreger
fonte
2

Este é realmente um problema muito profundo no qual muitas pessoas e empresas trabalharam. Aqui estão alguns princípios básicos:

Primeiro, precisamos representar bem os dados. Isso envolve, de alguma forma, representar cada documento como um vetor no espaço dimensional. Idealmente, nesse espaço, queremos que amostras com o mesmo rótulo estejam próximas à distância euclidiana e amostras com rótulos diferentes que estejam distantes na distância euclidiana. Essa etapa pode ser realmente difícil, mas uma representação testada e verdadeira é chamada de Frequência de termo inversa a frequência de documento (tf-idf). Aqui, cada dimensão no espaço representa uma palavra específica e o valor nessa dimensão para uma amostra específica representa basicamente o número normalizado de vezes que a palavra ocorre no documento. Você pode ler mais sobre isso aqui . Existe uma implementação muito boa de scikit-learn dessa representação, se você quiser experimentá-la.d

Agora, os dados estão em um espaço útil, mas em um espaço realmente de alta dimensão. Eu recomendaria reduzir essa dimensionalidade de alguma forma, mas esse é um assunto completo para outro tópico.

Finalmente, você pode treinar algum algoritmo para classificar as amostras (que é o que as outras respostas tratam). Existem muitas ótimas opções - redes neurais, adaboost, SVMs, Naive Bayes e modelos gráficos de classificação fornecerão bons resultados. Muitos deles também têm implementações no scikit-learn.

Mas os melhores algoritmos aproveitam o fato de que esse problema é realmente um aprendizado de transferência. Ou seja, as distribuições das quais os dados de treinamento e teste provêm podem não ser exatamente as mesmas - porque os tipos de coisas que uma pessoa considera spam podem ser diferentes dos tipos de coisas que outra pessoa considera spam.

Jordan A
fonte
Você pode elaborar seu último parágrafo ("transferência de aprendizado")? Você poderia fornecer links ou nomes?
Valentas
1
No aprendizado de máquina convencional, temos alguns dados provenientes de uma distribuição de probabilidade específica. Em seguida, aprendemos algum tipo de modelo nesses dados, esperando que o modelo generalize para exemplos não vistos durante o treinamento. Isso só funcionará se essas amostras invisíveis vierem da mesma distribuição de probabilidade, portanto, assumimos que este é o caso. Na aprendizagem por transferência, não fazemos essa suposição. Aqui está um documento de pesquisa em campo.
Jordan A
E como você cria dvariáveis? É um número fixo escolhido por um cientista?
Martin Vseticka
Uma abordagem comum é ter palavras, e cada um dos elementos no vetor representa a frequência com que essa palavra ocorre no texto. Existem apenas tantas palavras exclusivas usadas em todas as amostras que você está considerando, então há um limite superior definido em . Pesquisadores geralmente também remover certos tipos de palavras que eles não acham que vai ser útil para a classificação, como "a", "e", "ele", etc.ddd
Jordan A