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