Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
IF-Guide — [NeurIPS '25] Code pour l'article "IF-Guide: Influence Function-Guided Suppression of Harmful Training Data for Reducing LLM Toxicity" | Kitploit
Outils/GitHubGitHub/ztcoalson/if-guide
Outils DéfensifsAnalyse StatiqueAnalyse de CodeArticles et RechercheApprentissage et ÉducationSécurité de l'IA
GitHubztcoalson/if-guide

IF-Guide

[NeurIPS '25] Code pour l'article "IF-Guide: Influence Function-Guided Suppression of Harmful Training Data for Reducing LLM Toxicity"

Voir le dépôt
132il y a 10 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Site web

IF-Guide : Détoxification des LLM guidée par les fonctions d'influence [NeurIPS 2025]

Ce dépôt contient le code de IF-Guide, la technique de détoxification des LLM introduite dans notre article :

  • IF-Guide : Détoxification des LLM guidée par les fonctions d'influence
  • Zachary Coalson**, Juhan Bae, Nicholas Carlini, Sanghyun Hong

 


TL;DR

Vous pouvez utiliser notre méthode pour détoxifier les LLM en identifiant les exemples d'entraînement nuisibles puis en les supprimant pendant le pré-entraînement ou le fine-tuning !

 

Résumé

Nous étudions comment les données d'entraînement contribuent à l'émergence de comportements toxiques dans les grands modèles de langage. La plupart des travaux antérieurs sur la réduction de la toxicité des modèles adoptent des approches réactives, comme le fine-tuning de modèles pré-entraînés (et potentiellement toxiques) pour les aligner sur les valeurs humaines. En revanche, nous proposons une approche proactive — IF-Guide — qui exploite les fonctions d'influence pour identifier les jetons nuisibles dans les données d'entraînement et supprimer leur impact pendant l'entraînement. Pour ce faire, nous montrons d'abord que les fonctions d'influence standard sont inefficaces pour découvrir les enregistrements d'entraînement nuisibles. Nous présentons ensuite une adaptation novatrice qui mesure les attributions au niveau des jetons, des données d'entraînement à la toxicité du modèle, ainsi que des techniques pour sélectionner les documents d'entraînement toxiques et un objectif d'apprentissage pouvant être intégré à la fois au pré-entraînement et au fine-tuning. De plus, IF-Guide ne repose pas sur des données de préférences humaines, généralement requises par les méthodes d'alignement existantes. Dans l'évaluation, nous démontrons qu'IF-Guide réduit considérablement la toxicité explicite et implicite — jusqu'à 10× par rapport aux modèles non censurés, et jusqu'à 3× par rapport aux méthodes d'alignement de référence, par exemple DPO et RAD — dans les scénarios de pré-entraînement et de fine-tuning. IF-Guide est efficace sur le plan computationnel : un modèle à un milliard de paramètres n'est pas nécessaire pour calculer les scores d'influence ; un modèle à un million de paramètres — avec 7.5× moins de paramètres — peut servir efficacement de proxy pour identifier les données nuisibles.

 


Installation

Créez l'environnement conda (vous pouvez utiliser n'importe quel environnement avec python>=3.10) et installez les paquets nécessaires :

root@kitploit:~
conda create -n IF-Guide python=3.10
conda activate IF-Guide
pip install -r requirements.txt

Remarque : Nous utilisons le paquet Kronfluence pour calculer les scores d'influence avec EK-FAC. Nous avons créé une implémentation personnalisée qui prend en charge la technique d'influence différentielle introduite dans notre article (page 4, éq. 6). Le crédit pour tous les autres composants du paquet revient aux créateurs originaux. Merci !

Ensuite, accédez au répertoire de travail :

root@kitploit:~
cd src

 


Entraînement / Fine-tuning du modèle

Pour entraîner un modèle, exécutez :

root@kitploit:~
./scripts/train.sh

Cela appelle train.py, qui accepte les arguments clés suivants :

Remarque : Tous les autres arguments peuvent être laissés à leurs valeurs par défaut pour reproduire notre configuration expérimentale. Cela vaut pour les sections suivantes.

Pour fine-tuner un modèle existant, exécutez :

root@kitploit:~
./scripts/finetune.sh

Cela exécute finetune.py, qui utilise les arguments supplémentaires suivants :

ArgumentDescription
--checkpoint_dirChemin vers un modèle enregistré. Si vous utilisez un modèle pré-entraîné, définissez-le sur None.
--max_stepsNombre maximal d'étapes pour le fine-tuning.

 


Exécution d'IF-Guide

IF-Guide se compose de quatre étapes : (1) calculer l'approximation de l'inverse du Hessien avec EK-FAC, (2) calculer les scores d'influence différentielle par jeton sur les données de requête toxiques et non toxiques (page 4, éq. 8), (3) sélectionner les jetons toxiques influents à supprimer pendant l'entraînement (page 23, Algorithme 1), et (4) supprimer les jetons toxiques avec notre objectif d'apprentissage basé sur la pénalité (page 5, éq. 9).

 

1. Ajuster les facteurs d'approximation de l'inverse du Hessien

Exécutez :

root@kitploit:~
./scripts/fit_factors.sh

Cela appelle fit_factors.py et prend les arguments principaux suivants :

 

2. Calculer les scores par jeton

Exécutez :

root@kitploit:~
./scripts/compute_scores.sh

Cela exécute compute_scores.py avec les arguments clés suivants (en plus de la plupart des arguments utilisés pour calculer les facteurs) :

 

3. Sélectionner les jetons toxiques influents

Exécutez :

root@kitploit:~
./scripts/build_toxic_token_mask.sh

Cela exécute build_toxic_token_mask.py. Il prend les arguments principaux suivants :

 

4. Supprimer les jetons toxiques pendant l'entraînement / le fine-tuning

Après avoir calculé le masque des jetons toxiques pour un modèle donné, vous pouvez spécifier les arguments --toxic_token_mask_path et --toxic_lambda dans ./scripts/train.sh (et ./scripts/finetune.sh) pour entraîner/fine-tuner des modèles avec IF-Guide.

 


Évaluation

Nous fournissons du code pour évaluer la toxicité explicite (via Detoxify), la toxicité implicite (via ToxiGen-RoBERTa) et la fluidité (mesurée sur LAMBADA et OpenWebText).

 

Évaluation de la toxicité explicite

Exécutez :

root@kitploit:~
./scripts/run_toxicity_eval.sh

Cela exécute run_toxicity_eval.py, qui possède les arguments principaux suivants :

 

Évaluation de la toxicité implicite

Exécutez :

root@kitploit:~
./scripts/run_implicit_toxicity_eval.sh

Il requiert les arguments suivants :

ArgumentDescription
--outputs_file_pathLe chemin vers un fichier de sortie d'une exécution de toxicité explicite. Nous réévaluons les sorties existantes pour gagner du temps. Il doit s'agir d'un fichier output.json généré lors de l'évaluation explicite.
--datasetJeu de données d'origine des sorties. Détermine la façon dont les sorties finales sont formatées.

 

Évaluation de la fluidité

Exécutez :

root@kitploit:~
./scripts/run_fluency_eval.sh

Il possède les arguments principaux suivants :

 

Tester avec RAD

Nous constatons que notre méthode est compatible avec la défense au moment du décodage Reward Augmented Decoding (RAD) [EMNLP 2023]. Pour exécuter IF-Guide avec RAD (ou tester RAD indépendamment), téléchargez d'abord le modèle de récompense (fourni par les auteurs des travaux originaux) et placez-le dans le répertoire attendu :

root@kitploit:~
cd utils/rad/reward_modeling
gdown https://storage.googleapis.com/rad_release/saved_models.zip
unzip saved_models.zip && rm saved_models.zip && rm -rf saved_models/gpt2_sentiment

Le crédit pour l'implémentation de RAD que nous utilisons revient entièrement aux auteurs des travaux originaux. Merci !

 


Citez nos travaux

Merci de citer nos travaux si vous trouvez ce code source utile.

root@kitploit:~
@inproceedings{coalson2025ifguide,
  title={{IF}-Guide: Influence Function-Guided Detoxification of {LLM}s},
  author={Coalson, Zachary and Bae, Juhan and Carlini, Nicholas and Hong, Sanghyun},
  booktitle={The Thirty-ninth Annual Conference on Neural Information Processing Systems},
  year={2025},
  url={https://openreview.net/forum?id=V82wLePv0o}
}

 


 

Veuillez contacter Zachary Coalson ([email protected]) pour toute question ou recommandation.

Télécharger l’outil
ArgumentDescription
--model_nameNom du modèle à entraîner. Il doit être enregistré dans utils/registry.yaml avec un tokenizer correspondant (voir les modèles existants pour des exemples)
--save_idÉtiquette descriptive utilisée pour nommer le répertoire de sortie.
--toxic_token_mask_pathChemin vers un masque de jetons (généré via IF-Guide). Utilisez None pour un entraînement standard.
--toxic_lambdaLa force du terme de pénalité utilisé par notre objectif d'apprentissage.
ArgumentDescription
--model_nameNom du modèle sur lequel ajuster les facteurs.
--checkpoint_dirChemin vers le modèle enregistré. Si vous utilisez un modèle pré-entraîné, définissez-le sur None.
--train_indices_pathChemin vers les indices d'entraînement utilisés pour entraîner le modèle (non nécessaire si vous utilisez l'ensemble du jeu de données). Ils doivent correspondre exactement aux indices et être dans le même ordre. Nous fournissons les indices de notre sous-ensemble d'un milliard de jetons OpenWebText et définissons leur chemin par défaut.
--output_dirChemin pour enregistrer les données d'approximation du Hessien.
ArgumentDescription
--model_nameNom du modèle pour lequel calculer les scores.
--checkpoint_dirChemin vers le modèle enregistré. Si vous utilisez un modèle pré-entraîné, définissez-le sur None.
--save_idÉtiquette ajoutée à la fin du répertoire de sauvegarde pour un nommage personnalisé.
--save_dirRépertoire dans lequel enregistrer les scores (dans le répertoire des facteurs d'origine).
--factors_pathChemin vers le répertoire contenant les facteurs du Hessien (inverse) ajustés à l'étape précédente.
--query_datasetLe jeu de données de requête pour construire le gradient de requête. Actuellement, la seule option est RTP.
--toxic_query_indices_pathChemin vers les indices du jeu de données de requête correspondant aux démonstrations toxiques. Nous fournissons notre sous-ensemble toxique de RTP dans ../data/RTP/query_indices/toxic_indices.npy.
--nontoxic_query_indices_pathChemin vers les indices pour les requêtes non toxiques. Nous fournissons notre sous-ensemble non toxique de RTP dans ../data/RTP/query_indices/nontoxic_indices.npy.
ArgumentDescription
--model_nameNom du modèle pour lequel construire le masque.
--scores_pathChemin vers les scores calculés à l'étape précédente.
--windowLa longueur de la fenêtre de contexte.
--toxicity_thresholdLe seuil pour déterminer les jetons toxiques (sous forme de percentile, par exemple 0.99).
--max_tokensLe nombre maximal de jetons toxiques à sélectionner.
--query_datasetLe jeu de données de requête pour construire le gradient de requête. Actuellement, la seule option est RTP.
--inspection_idxNous affichons automatiquement en rouge les jetons supprimés pour un seul exemple d'entraînement. Cet argument spécifie quel exemple afficher en fonction de son classement (par exemple, 0 est l'exemple d'entraînement le mieux classé).
ArgumentDescription
--model_nameNom du modèle à évaluer.
--checkpoint_dirChemin vers le modèle enregistré. Si vous utilisez un modèle pré-entraîné, définissez-le sur None.
--datasetJeu de données sur lequel évaluer. Soit RTP, AttaQ, ou BOLD.
--save_dirRépertoire dans lequel enregistrer les résultats.
--decoding_defenseDéfense au moment du décodage à appliquer. none ou rad. Ne s'applique pas à notre évaluation OpenWebText.
--save_outputsIndique si les sorties du modèle doivent être enregistrées.
ArgumentDescription
--model_nameNom du modèle à évaluer.
--checkpoint_dirChemin vers le modèle enregistré. Si vous utilisez un modèle pré-entraîné, définissez-le sur None.
--datasetJeu de données sur lequel évaluer. Soit RTP, AttaQ, ou BOLD.
--save_dirRépertoire dans lequel enregistrer les résultats.
--decoding_defenseDéfense au moment du décodage à appliquer. none ou rad. Ne s'applique pas à notre évaluation OpenWebText.