URL: https://linuxfr.org/users/jul/journaux/sur-le-chemin-de-l-antispam-bluesky Title: Sur le chemin de l'antispam bluesky Authors: Jul Date: 2025年08月08日T10:37:27+02:00 License: CC By-SA Tags: bluesky, antispam et bot Score: 10 Je croyais que mon bot bluesky était mort [(voir ici pour les épisodes précédents)](https://linuxfr.org/users/jul/journaux/mon-bot-va-mourir-rip). C'était sans compter sur le fait que je suis sensible aux 3 pelés 2 tondus qui ont demandé sa survie, comme si il apportait quoique ce soit. Mais je suis vain (et en mal de reconnaissance) donc j'ai décidé de le laisser en vie, mais non sans me mettre au milieu pour faire l'antispam. Pour rappeler le contexte, je voulais tuer le bot pour ne pas participer à l'amplification du spam, et jeter la serviette car je suis ignorant des techniques d'antispam. Quand je regarde ma base de données, je compte 50% HAM pour 50% SPAM. C'est clairement la limite du rapport signal bruit qui est « *trop pour moi* » # Sur le chemin de l'antispam Il m'est apparu que c'était indigne d'un dev libre de jeter l'éponge aussitôt, que je devais me ressaisir et regarder si il existait des librairies pour faire de l'antispam bayesien pour les nuls : et [évidemment ça se trouve](https://github.com/dinever/antispam). Avec même des exemples de la librairie nécessaire à tokeniser une langue : [nltk](https://www.nltk.org/_modules/nltk/classify/naivebayes.html). # Le plan ## Là où j'en suis embaser et taguer Dans un premier temps, j'ai fait un client websocket qui liste les posts avec 2 boutons : HAM et SPAM, si HAM il reposte et tague, si SPAM juste il marque. C'est la [release 2.0](https://github.com/jul/trollometre/releases/tag/2.0). Le bot est devenu un [turc mécanique](https://fr.wikipedia.org/wiki/Turc_m%C3%A9canique) dont je suis l'antispam humain. # Là où je vais ## le problème du multilinguisme Normalement, l'apprentissage HAM/SPAM se fait sur du contenu textuel en langue naturel. En acceptant (temporairement) les contenus en langues anglaises je me suis collé une écharde dans le pied que je compte retirer, mais à terme, pourquoi pas être multi lingue, sauf que les tags de langues de bluesky ne sont pas fiable, ça nécessite aussi une détection qui pour l'instant m'ennuie. Donc, je vais incessamment sous peu me limiter à une langue : le français ce qui avec nltk et les universitaires qui gardent leurs fichiers de tokenisation précieusement dans leur coin va me faire c*ier. ## le problème des méta données Si vous avez déjà regardez les en têtes spam assassin, vous vous apercevez qu'il n'apprend pas sur le contenu, mais les méta données genre pourcentage de balise HTML, ratio de point d'exclamation et tutti quanti. Ce qui diverge substantiellement des exemples canoniques où l'algo est : - construire un word counter en langage naturel - filer à l'algo de classification pour faire son boulot - réutiliser la classification pour déterminer ce qui est ham ou spam. Je sais déjà, en mon for intérieur d'anti spam humain, qu'il va falloir reprendre des techniques de spam assassin. Et ne pas se limiter au langage naturel, mais rajouter des méta mots. Genre, les émojis, surtout celui de l'aubergine suivi d'un jet d'eau sont un mauvais signe. Je sais aussi qu'un post sans reposts ou source, mais avec des images pue le spam. Je vais donc créer des méta mots comme HAS_IMAGE, HAS_REPOST, SHORT_MESSAGE, HASHTAG_MAQUEUE qui sortent du simple word counter et devoir leur donner un poids qui correspondra à une bonne approche pifométrique chezMoiÇaMarche ©. Je vais devoir injecter dans le compteur de mot (traitement qui transforme le texte en langage naturel en vecteur de token linguistique invariant avec leur présence relative) des métriques de méta données. ## Classification : Bayesien ? Alors, comme je suis le dev, j'ai décidé de ressortir de mes cours de statistique une autre approche : le [test du Xhi2](https://fr.wikipedia.org/wiki/Test_du_%CF%87%C2%B2). On va déterminer 2 vecteurs : un vecteur HAM et un vecteur SPAM basés sur une analyse Xhi2 de chaque mots détectés au mot clé. (Vous notez peut être que je suis en train de m'ouvrir à la détection de sujet en dehors de spam et ham.) ## Détection Il se trouve que j'ai déjà implémenté le [cosinus similarité pour les dicts](https://github.com/jul/archery?tab=readme-ov-file). La détection consistera à faire un cosinus avec HAM et SPAM, et considérer que le vecteur avec la plus grande proximité est celui de la classification. # Conclusion Ce bot est en train de me dépasser et me faire faire des choses que moi -*fainéant*- suis pas super fan de faire :) Mais, un pas après l'autre, à ma vitesse, je suis lentement en train de m'amuser. Et je me dis que mon approche d'une simplicité sans nom a des chances de marcher et je me demande pourquoi tout le monde ne le fait pas ? Serais je par hasard un naïf qui n'aurait pas vu un gros problème qu'il va se prendre dans les dents bientôt avec cet algorithme trop simple ? :) Suite au prochain épisode.

AltStyle によって変換されたページ (->オリジナル) /