Spamplemousse 2, un antispam bayésien pour Dotclear 2
Par biou le mercredi 9 mai 2007, 19:42 - Dotclear - Lien permanent
Pour moi l'approche la plus intéressante sur le long terme pour la lutte contre le spam est l'utilisation exclusive de filtres à apprentissage, comme les filtres bayésiens, car ceux-ci sont les seuls à pouvoir anticiper les nouvelles générations de spam, et donc de pouvoir atteindre de très hauts niveaux d'efficacité.
Quand j'ai voulu créer un filtre bayésien pour Dotclear 2, je me suis demandé si on ne pouvait pas augmenter l'efficacité des filtres bayésiens naïfs que l'on trouve couramment dans les antispams de blog. Le pari semblait réalisable sur le plan algorithmique mais pas forcément sur le plan technique. En effet un filtre bayésien non-naïf a tendance à être beaucoup plus gourmand en termes de ressources, qui sont très limitées pour des blogs hébergés sur des plates-formes mutualisées. En m'inspirant beaucoup du livre Ending Spam de Jonathan Zdziarski (qui est aussi l'auteur du logiciel dspam), j'ai implémenté les algorithmes qui me semblaient les plus intéressants pour une plate-forme de blogs.
principales caractéristiques du filtre bayésien Spamplemousse2:
- tokenisation avancée, avec reconnaissance de différents motifs, comme les adresses ip, les adresses mail, les urls. (La tokenisation est l'opération qui consiste en l'analyse d'un texte en éléments unitaires, les tokens, qui correspondent à peu près aux mots) Cette tokenisation bénéficie aussi d'un système de reconnaissance des redondances dans les suffixes sur certains caractères (par exemple les tokens "viagra!!!!!" et "viagra!" sont identiques) et d'un système de réassemblage de tokens ("v.i.a.g.r.a" est identique à "viagra")
- gestion de contextes pour les différentes parties d'un commentaire (nom, mail, site, contenu)
- gestion des hapaxes : tokens non pris en compte dans le calcul de la probabilité tant qu'ils n'ont pas atteint un certain nombre d'apparitions
- gestion des "single corpus tokens" : probabilités d'apparitions extrêmes pour les tokens qui n'apparaissent que dans l'un des deux corpus (spam ou non spam)
- gestion du bias : on prend en compte le fait qu'il y a souvent un déséquilibre entre la taille des corpus spam et non-spam.
- réentraînement itératif borné : lors d'un réentraînement, la procédure d'entraînement est réitérée jusqu'à ce que le filtre change de décision (par exemple on passe un message de non spam à spam, on va entraîner le filtre sur ce message en spam, jusqu'à ce que le filtre déclare ce message comme spam. Pour éviter les problèmes, on borne le nombre de tentatives)
- gestion de différents modes d'entraînement :
- TUM : "Train Until Mature", (mode par défaut) entraînement jusqu'à ce que les tokens soient matures. Le meilleur compromis.
- TEFT : "Train Everything", entraînement sur tout ; le script est très consommateur en ressources.
- TOE : "Train On Error", entraînement sur les erreurs ; le script est peu consommateur de ressources car l'entraînement n'est effectué que lorsqu'il y a une erreur.
- le moteur d'analyse utilise pour son calcul de probabilités la fonction Chi-Square inverse de Fisher-Robinson
- support de mysql et postgresql
- fonctionnalité d'entrainement sur la catégorisation des anciens messages
Avertissement :
Sur le papier le filtre devrait être plus précis qu'un bayésien naïf, mais dans la pratique je n'ai pas encore pu l'expérimenter sur des blogs très spammés. Le plugin restera en version beta tant qu'il n'y aura pas eu de tests plus étendus, ceux-ci permettant entre autres d'ajuster certains paramètres du filtre.
Problèmes connus dans la version beta :
- l'entraînement sur les anciens messages peut être très long et aboutir à une erreur. Cette erreur n'est pas grave, et il est possible de relancer cet entraînement pour poursuivre la procédure là où elle s'était arrêtée.
Remerciements :
Je remercie ma chérie qui m'a supporté pendant que je ruminais le développement de ce machin, ainsi que les copains de la team!
Téléchargement :
http://plugins.dotaddict.org/dc2/details/Spamplemousse-2
Support:
Le support est réalisé dans les commentaires de ce post : http://www.vanschklift.com/blog/post/2008/04/15/Support-pour-Spamplemousse-2
Commentaires
Ham spam gramme \o/
Mazette le spam n'a plus qu'à bien se tenir !
Une question : peut-on envisager une suppression automatique (et débrayable) dès que l'entrainement a atteint un niveau (à déterminer) jugé suffisant ?
tout est envisageable! mais il faut payer :)
plus sérieusement, ca pourrait être mis en oeuvre quand on saura si le filtre marche correctement. On pourrait même jouer avec la probabilité du spam (si celle-ci est entre 50 et 90 % on met dans la file de modération, et au dessus de 90% on supprime) Plutôt qu'un mode débrayable, je préférerais une option désactivée par défaut, que chacun est libre de cocher en ayant conscience du risque.
Cool, bien content de voir débarquer les filtres bayésiens. :-) Je me rue donc sur cette extension... et là, problème.
Dès que j'essaie d'aller sur la page de configuration de Spamplemousse2, j'ai un message d'erreur : "Unknown column 'comment_bayes_err' in 'where clause' (1054)". J'ai raté quelque chose dans l'installation ? (DotClear2 beta6, MySQL 5.0.27, PHP 5.2.2)
Bravo, quel talent !
julien> bah normalement il doit s'installer (ça affiche un message au niveau du dashboard) Si cela ne se fait pas c'est probablement qu'il faut une version svn de dotclear 2... Je n'ai pas suffisamment testé en fait, honte à moi :)
Nada sur mon dashboard.... L'auto install des plugins, c'est à partir de la version 1364 de SVN, donc bien après la beta6 (SVN 1287...) ;-) Bon, tant pis pour moi.
julien> merci pour la remarque, je vais mettre à jour les requirements dans le post
Bravo pour spamplemousse !!!