À propos du projet
Antiserum se décrit comme un antivirus pour les données d'entraînement : un scanner local qui signale le poison potentiel dans les jeux de données textuels, accompagné d'un flux partagé de signatures confirmées. Le dépôt est le produit. Il n'y a ni connexion ni service de scan hébergé. La documentation publique est servie via GitHub Pages, mais le site documente le CLI et ne scanne, ne juge, ni n'héberge de corpus.
Le projet vise une question de pré-entraînement : un jeu de données est-il sûr pour l'apprentissage ? Dans ce contexte, « sûr » signifie que le mélange ne contient pas de déclencheurs cachés, d'inversions de labels coordonnées, de dumps de doublons ou d'autres lignes plantées qui peuvent paraître propres jusqu'à ce qu'un modèle les mémorise. L'outil nécessite Python 3.10+ et s'installe depuis PyPI avec pip install antiserum, ce qui expose la commande antiserum. Un scan local n'utilise pas le réseau, ne requiert pas de clés API et ne télécharge pas de jeux de données. Il peut scanner des dossiers de fichiers JSONL, CSV, JSON, texte brut, variantes compressées gzip, ainsi que le cache local de Hugging Face ou des chemins de jeux de données téléchargés. Les fragments Arrow et Parquet nécessitent une extension optionnelle.
Le scanner comporte trois couches. La couche innée s'exécute sur la machine locale et inclut des vérifications pour les n-grammes rares, les inversions de labels, les dumps de copies quasi identiques, les familles de paraphrases au-delà de Jaccard, les pics de longueur et d'entropie, les correspondances de flux de signatures, les contrôles Unicode cachés et les jetons de scripts mixtes. La couche adaptative est une rubrique publiée où un humain ou un agent peut marquer un signalement comme poison, déchet ou fausse alerte. La couche mémoire est un flux local de signatures plus un corpus de référence. Les versions datées des packs sont suivies dans un journal des modifications, et un scan génère un reçu contenant le hachage du jeu de données, la version du scanner, l'identité du pack, les signalements et les correspondances confirmées.
Les vérifications documentées incluent les n-grammes déclencheurs, les inversions de labels, l'injection de doublons, le surpoids de paraphrases, les valeurs aberrantes statistiques, les correspondances de signatures, le contournement d'instructions, l'Unicode caché et les scripts mixtes. Certaines vérifications nécessitent toujours une confirmation humaine, tandis que d'autres peuvent avoir une classification initiale de déchet ou de fausse alerte. Les utilisateurs peuvent exécuter uniquement des vérifications sélectionnées ou en ignorer certaines, et le reçu enregistre les vérifications effectuées afin que toute omission reste visible.
Le comportement du scan est intentionnellement local et borné. Le plafond par défaut est de 25 000 lignes ou 128 MiB de fichiers sources. Un dump plus volumineux s'arrête au plafond, enregistre la troncature dans le reçu et quitte avec le code 3 au lieu de saturer la mémoire. Une option allow-truncated peut maintenir un code de sortie 0 pour un échantillon délibéré, tandis que le reçu indique toujours la troncature. Les codes de sortie distinguent un scan terminé sans signalement échoué, des signalements atteignant ou dépassant un seuil fail-on, des erreurs d'utilisation ou d'E/S, et la troncature. Le paramètre fail-on peut être any, high ou never. Les reçus sont déterministes pour les mêmes octets de dossier et signalements, et une commande diff peut comparer un reçu de référence enregistré avec un nouveau sans rescanner. L'outil peut générer des rapports JSON, SARIF, HTML, CSV et Markdown, le tout localement.
La configuration peut être placée dans un fichier local antiserum.toml, les drapeaux (flags) remplaçant les paramètres du fichier. Un fichier allowlist.jsonl peut supprimer les fausses alertes connues, et le reçu enregistre toujours le chemin et le hachage de la liste d'autorisation afin que la suppression ne puisse pas être invisible. Le flux de confirmation utilise des commandes pour juger les signalements, régler les restes, ajouter des fausses alertes à la liste d'autorisation locale et proposer une ligne de signature ainsi qu'un corps de pull-request. Le poison confirmé devient une signature publique que les scans futurs pourront identifier.
Le dépôt inclut un corpus jouet pour une démonstration de deux minutes et un corpus de référence avec quelques centaines de plantes et une majorité propre. La commande make reproduce scanne le mélange de référence et quitte avec un code non nul si une ligne plantée est manquée. Les tests incluent le linting, la couverture pytest, des fixtures de recherche de champs et l'évaluation par vérification par rapport aux seuils. Une GitHub Action peut exécuter le CLI sur un runner appelant, produire des artefacts de reçu et SARIF, et optionnellement télécharger le SARIF pour l'analyse de code. Des exemples de CI montrent comment faire échouer un job en fonction des signalements du reçu ou de la sévérité.
Le README est explicite sur le périmètre. Antiserum n'est pas un pare-feu de prompt au runtime, un scanner de malwares pour fichiers de modèles ou pickle, un outil de qualité de données ou d'erreurs de labels, un inverseur de backdoor au niveau des poids, ni un générateur de poison d'images. Il s'agit uniquement de scan de jeux de données textuelles dans la version actuelle. La couverture honnête, le modèle de menace, les notes de recherche de champs et le positionnement sont documentés dans le dépôt. Le projet est sous licence MIT et est présenté comme un état d'avancement des semaines 11-12 avec un CLI fonctionnel, des vérifications, une boucle de confirmation, une démo jouet, un corpus de référence, un flux et un système de reçus.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.