Ça Bloom ?

Next utilise un filtre de Bloom pour afficher des alertes sur les médias utilisant de l’IA générative pour tout ou partie de ses articles. Comment fonctionne notre algorithme de détection et pourquoi y a-t-il des faux positifs ? On vous explique.
Notre extension Chrome et Firefox pour alerter les visiteurs des sites d’information utilisant l’IA générative pour tout ou partie de leurs articles utilise une liste de plus de 3 000 noms de domaines identifiés « à la main et de visu » (sans recours à des outils de vérification algorithmique et automatisé) par notre journaliste Jean-Marc Manach. Le code source est disponible sur GitHub.
Cachez cette liste que je ne saurais voir…
Nous ne souhaitons pas diffuser publiquement la liste des domaines (et des entreprises), pour plusieurs raisons que nous avons déjà expliquées dès la première partie de notre enquête :
« Nous ne voulons pas, d’une part, que cette base de données puisse aider ceux qui voudraient améliorer leurs générateurs d’articles automatisés, et qui se targuent de ne pas être reconnus comme GenAI (nous y reviendrons). Nous ne voulons pas non plus faire de « name and shame » et mettre sur le même plan des auto-entrepreneurs SEO ayant créé quelques sites de façon opportuniste et les entreprises (y compris individuelles) en ayant créé plusieurs dizaines ».
Nous avons donc utilisé une méthode d’obfuscation pour masquer la liste. Un développeur de moji – Hasnaine – nous a grandement épaulés pour cette tâche. Il a développé le code de cette partie de l’extension, ainsi qu’un script pour transformer notre liste de manière irréversible. La méthode utilise un filtre de Bloom, mais qu’est-ce que c’est et qu’est-ce que cela implique ?
Comme l’explique Bioinfo-fr, « le filtre de Bloom ne vous permet pas vraiment de “stocker” des données à proprement parler ; le filtre est là pour vous permettre de tester l’appartenance d’un élément à un ensemble de données ». Parfait, c’est exactement ce que l’on cherche.
- Télécharger et installer notre extension pour Chrome
- Télécharger et installer notre extension pour Firefox
Contre les faux positifs, la liste blanche
Un filtre de Bloom est une structure probabiliste. Dans la pratique, c’est un tableau de n bits qui est initialement à 0 sur toutes ses entrées. « Nous allons utiliser plusieurs fonctions de hachage indépendantes qui retourneront une suite de bits correspondant à des adresses mémoires : au lieu d’effectivement stocker les données, on ne stockera ainsi que quelques bits d’information », explique Bioinfo-fr.
L’exemple parle du stockage de séquences ADN (logique pour un site dédié à la biologie), mais cela fonctionne à peu près pour n’importe quoi. L’algorithme a deux résultats possibles lors d’un test : l’élément est probablement dans la liste, ou il n’est pas présent (cette fois-ci avec certitude), comme le résume Wikipédia :
« Plus précisément, un test d’appartenance renvoie soit « peut-être dans l’ensemble » ou « assurément pas dans l’ensemble ». Dit autrement, il n’y a jamais de faux négatif mais il peut y avoir des faux positifs. »
Il a donc l’avantage de ne pas produire de faux négatif (un site qui serait dans la liste, mais non identifié comme tel). Toutefois, il a l’inconvénient de générer des faux positifs. Et plus la liste d’éléments de base est grande, plus le risque de faux positifs augmente. Raison pour laquelle certains sites sont parfois identifiés à tort par notre extension.
Un faux positif arrive donc lorsque l‘algorithme identifie à tort un site comme étant « peut-être » dans notre liste, quand bien même il n’y figure pourtant pas. Pour contrer cette problématique inhérente au fonctionnement du filtre de Bloom, nous avons mis en place depuis quasiment le début une liste blanche d’URL à ne pas identifier.
Nous tâchons d’ajouter au plus vite les éléments dans notre liste pour corriger les faux positifs quand ils nous sont signalés. Depuis peu, l’application télécharge sa liste blanche sur les serveurs de Next, ce qui évite d’avoir à la pousser manuellement à chaque nouvelle mise à jour (encore à déployer sur Chrome, ça arrive).
Notre algorithme, côté technique
Pour en revenir à notre filtre de Bloom, nous vous donnons les principaux paramètres de notre formule pour calculer la taille de notre tableau (en bits), à partir du nombre d’éléments et du taux de faux positif spécifié. Attention, plus le taux est faible, plus la taille du tableau est importante, il faut donc choisir avec précaution ce paramètre.
const expectedElements = strings.length;
const falsePositiveRate = 0.00000001;
const size = Math.ceil(-(expectedElements * Math.log(falsePositiveRate)) / (Math.log(2) ** 2));
const numHashes = Math.max(1, Math.ceil((size / expectedElements) * Math.log(2)));
Une fois la taille de notre tableau obtenu, nous calculons le nombre de hachages pour notre filtre de Bloom.
L’influence de la précision
Voici quelques résultats en fonction de la précision (falsePositiveRate) demandée sur les faux positifs (il s’agit ici de quelques exemples, d’autres combinaisons sont possibles) :
1 % (0.01):
- Taille : 32 772 bits
- Nombre de fonctions de hash : 7
0,01 % (0.0001) :
- Taille : 65 543 bits
- Nombre de fonctions de hash : 14
0,0001 % (0.000001) :
- Taille : 98 314 bits
- Nombre de fonctions de hash : 20
0.000001 % (0.00000001) :
- Taille : 131 086 bits
- Nombre de fonctions de hash : 27
Afin de limiter le nombre de faux positifs, nous avons augmenté la précision dans la dernière mise à jour de notre extension.