Techdays 2015 : Détection de spam avec Azure Machine Learning

Un article pour vous remercier d’avoir assisté à notre session aux Techdays.

Je vous mets les slides à disposition :

Techdays_2015_SPAM avec Azure ML

Ainsi que les scripts que j’ai utilisés :

  • Script bash qui ne récupère que le message d’un mail (pour la petite histoire, la véritable raison de l’utilisation de Linux est que j’ai commencé les démos sur une VM  Hortonworks avant de travailler sur HDInsight)

#!/bin/bash

mkdir ./temp
cd ./temp
hadoop fs -get /user/hue/spam/20030228_easy_ham.tar.bz2
tar jxf 20030228_easy_ham.tar.bz2
cd ./easy_ham
for filename in ./[0-9]*; do
deb=$(sed -n ‘1,/^\s*$/{=}’ $filename | tail -1)
fin=$(wc -l $filename | awk ‘{print $1}’)
awk ‘NR==v1,NR==v2’ v1= »$deb » v2= »$fin » $filename | sed ‘s/\r//g’ | sed ‘:a;N;$!ba;s/\n/ /g’ | sed ‘s/$/\r/’ > $filename.cleaned
done
tar -cvf easyham.tar *.cleaned
hadoop fs -put easyham.tar /user/hue/spamcleaned/zipfile/
hadoop fs -mkdir /user/hue/spamcleaned/easyham/
hadoop fs -put *.cleaned /user/hue/spamcleaned/easyham/
cd ../..
rm -fr ./temp/

 

  • Script Pig de normalisation du texte :

/* Chargement des mails */
easyham_emails = LOAD ‘wasb://techdays2015@blobdjuberhd.blob.core.windows.net/Demo/fichierinput/easyham/’ using PigStorage();

easyham2_emails = LOAD ‘wasb://techdays2015@blobdjuberhd.blob.core.windows.net/Demo/fichierinput/easyham2/’ using PigStorage();
hardham_emails = LOAD ‘wasb://techdays2015@blobdjuberhd.blob.core.windows.net/Demo/fichierinput/hardham/’ using PigStorage();
spam_emails = LOAD ‘wasb://techdays2015@blobdjuberhd.blob.core.windows.net/Demo/fichierinput/spam/’ using PigStorage();
spam2_emails = LOAD ‘wasb://techdays2015@blobdjuberhd.blob.core.windows.net/Demo/fichierinput/spam2/’ using PigStorage();
/* passage en minuscule */
easyham_lowercase_data = FOREACH easyham_emails GENERATE LOWER($0) as word,0 as flag;
easyham2_lowercase_data = FOREACH easyham2_emails GENERATE LOWER($0) as word,0 as flag;
hardham_lowercase_data = FOREACH hardham_emails GENERATE LOWER($0) as word,0 as flag;
spam_lowercase_data = FOREACH spam_emails GENERATE LOWER($0) as word,1 as flag;
spam2_lowercase_data = FOREACH spam2_emails GENERATE LOWER($0) as word,1 as flag;

/* union des datasets */

lowercase_data = UNION easyham_lowercase_data,easyham2_lowercase_data,hardham_lowercase_data,spam_lowercase_data,spam2_lowercase_data;

/* suppression des url */
without = FOREACH lowercase_data GENERATE REPLACE($0,’http[^\\s]{1,}[\\s]{1,}’,’httphttp ‘),flag;

/* suppression des mails */
without1 = FOREACH without GENERATE REPLACE($0,'[\\s]{1,}[^\\s]{1,}@[^\\s]{1,}[\\s]{1,}’,’ emailemail ‘),flag;

/* suppression balise html */
without2 = FOREACH without1 GENERATE REPLACE($0,'<.*?>’,’ ‘),flag;

/* remplacement des devises */
without3 = FOREACH without2 GENERATE REPLACE($0,’$’,’currency’),flag;
without4 = FOREACH without3 GENERATE REPLACE($0,’€’,’currency’),flag;
without5 = FOREACH without4 GENERATE REPLACE($0,’£’,’currency’),flag;

/* suppression des non-mots */
without6 = FOREACH without5 GENERATE REPLACE($0,'[^\\w]’,’ ‘),flag;

/* suppression des underscore */
without7 = FOREACH without6 GENERATE REPLACE($0,'[_]{1,}’,’ ‘),flag;

/* rajout d’un espace avant et aprËs chaque mot */
without8 = FOREACH without7 GENERATE REPLACE($0,'[ ]{1,}’,’ ‘),flag;

/* suppression des chiffres */
without9 = FOREACH without8 GENERATE REPLACE($0,'[\\s]{1}[0-9]{1,}[\\s]{1}’,’ ‘),flag;

/* suppression des mots de moins de 3 lettres */
without10 = FOREACH without9 GENERATE REPLACE($0,'[\\s]{1}[a-zA-Z0-9]{1,3}[\\s]{1}’,’ ‘),flag;

/* suppression des mots de plus de 10 lettres */
without11 = FOREACH without10 GENERATE REPLACE($0,'[\\s]{1}[a-zA-Z0-9]{10,}[\\s]{1}’,’ ‘),flag;

/* suppression des espaces */
dataoutput = FOREACH without11 GENERATE REPLACE($0,'[ ]{1,}’,’ ‘),flag;

STORE dataoutput INTO ‘wasb://techdays2015@blobdjuberhd.blob.core.windows.net/Demo/fichieroutput/’ USING PigStorage(‘,’);

 

Avec Florian, plutôt qu’une overview de l’outil ou du théorique, on a préféré se consacrer à un cas d’usage. Si vous êtes intéressés par cette approche, je ne peux que vous recommander l’ouvrage suivant :

51-Fc3QazXL._AA324_PIkin4,BottomRight,-38,22_AA346_SH20_OU08_

Bon apprentissage 😉

Tagged with: , , ,
Publié dans Evénement, Machine learning
One comment on “Techdays 2015 : Détection de spam avec Azure Machine Learning
  1. […] Les Techdays 2015 : à mon sens une belle session avec David Joubert sur l’utilisation d’Azure Machine Learning pour la détection du SPAM. A noter notre approche que je trouve originale: on se met à la place de celui qui doit écrire un mail, et qui a peur de ne pas passer les anti-spam côté réception. Le système mis en place lui permet de directement tester ses textes dans Excel, avec un scoring en un clic effectué via Power Query et les API Azure Machine Learning. Les détails chez David! […]

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :