Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
IF-Guide — [NeurIPS '25] Código para el artículo "IF-Guide: Influence Function-Guided Suppression of Harmful Training Data for Reducing LLM Toxicity" | Kitploit
Herramientas/GitHubGitHub/ztcoalson/if-guide
Herramientas DefensivasAnálisis EstáticoAnálisis de CódigoPapers e InvestigaciónAprendizaje y EducaciónSeguridad de IA
GitHubztcoalson/if-guide

IF-Guide

[NeurIPS '25] Código para el artículo "IF-Guide: Influence Function-Guided Suppression of Harmful Training Data for Reducing LLM Toxicity"

Ver Repositorio
132hace 10 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

IF-Guide: Desintoxicación de LLMs guiada por funciones de influencia [NeurIPS 2025]

Este repositorio contiene el código de IF-Guide, la técnica de desintoxicación de LLMs presentada en nuestro artículo:

  • IF-Guide: Influence Function-Guided Detoxification of LLMs
  • Zachary Coalson, Juhan Bae, Nicholas Carlini, Sanghyun Hong

 


TL;DR

¡Puedes usar nuestro método para desintoxicar LLMs identificando ejemplos de entrenamiento dañinos y luego suprimiéndolos durante el preentrenamiento o el ajuste fino!

 

Resumen

Estudiamos cómo los datos de entrenamiento contribuyen a la aparición de comportamientos tóxicos en los modelos de lenguaje grandes. La mayoría de los trabajos previos sobre reducción de toxicidad en modelos adoptan enfoques reactivos, como el ajuste fino de modelos preentrenados (y potencialmente tóxicos) para alinearlos con los valores humanos. En contraste, proponemos un enfoque proactivo, IF-Guide, que aprovecha las funciones de influencia para identificar tokens dañinos en cualquier dato de entrenamiento y suprimir su impacto durante el entrenamiento. Para ello, primero mostramos que las funciones de influencia estándar son ineficaces para descubrir registros de entrenamiento dañinos. Luego presentamos una nueva adaptación que mide las atribuciones a nivel de token desde los datos de entrenamiento hasta la toxicidad del modelo, junto con técnicas para seleccionar documentos de entrenamiento tóxicos y un objetivo de aprendizaje que puede integrarse tanto en el preentrenamiento como en el ajuste fino. Además, IF-Guide no depende de datos de preferencias humanas, que normalmente requieren los métodos de alineación existentes. En la evaluación, demostramos que IF-Guide reduce sustancialmente la toxicidad tanto explícita como implícita: hasta 10× en comparación con modelos sin censura, y hasta 3× en comparación con métodos de alineación de referencia, p. ej., DPO y RAD, tanto en escenarios de preentrenamiento como de ajuste fino. IF-Guide es computacionalmente eficiente: no es necesario un modelo de mil millones de parámetros para calcular las puntuaciones de influencia; un modelo de un millón de parámetros, con 7.5× menos parámetros, puede servir eficazmente como proxy para identificar datos dañinos.

 


Instalación

Crea el entorno conda (puedes usar cualquier entorno con python>=3.10) e instala los paquetes necesarios:

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

Nota: Usamos el paquete Kronfluence para calcular las puntuaciones de influencia con EK-FAC. Creamos una implementación personalizada que admite la técnica de influencia diferencial presentada en nuestro artículo (página 4, Ec. 6). El crédito de todos los demás componentes del paquete pertenece a los creadores originales. ¡Gracias!

A continuación, navega al directorio de trabajo:

root@kitploit:~
cd src

 


Entrenamiento/Ajuste Fino del Modelo

Para entrenar un modelo, ejecuta:

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

Esto llama a train.py, que acepta los siguientes argumentos clave:

Nota: Todos los demás argumentos pueden dejarse en sus valores predeterminados para reproducir nuestra configuración experimental. Esto aplica a las siguientes secciones.

Para ajustar finamente un modelo existente, ejecuta:

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

Esto ejecuta finetune.py, que utiliza los siguientes argumentos adicionales:

ArgumentDescription
--checkpoint_dirRuta a un modelo guardado. Si se usa un modelo preentrenado, establécelo en None.
--max_stepsNúmero máximo de pasos para el ajuste fino.

 


Ejecutar IF-Guide

IF-Guide se compone de cuatro pasos: (1) calcular la aproximación inversa del Hessiano con EK-FAC, (2) calcular las puntuaciones de influencia diferencial token a token sobre los datos de consulta tóxicos y no tóxicos (página 4, Ec. 8), (3) seleccionar los tokens tóxicos influyentes para suprimirlos durante el entrenamiento (página 23, Alg. 1) y (4) suprimir los tokens tóxicos con nuestro objetivo de entrenamiento basado en penalizaciones (página 5, Ec. 9).

 

1. Ajustar los Factores de Aproximación Inversa del Hessiano

Ejecuta:

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

Esto llama a fit_factors.py y acepta los siguientes argumentos principales:

 

2. Calcular las Puntuaciones por Token

Ejecuta:

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

Esto ejecuta compute_scores.py con los siguientes argumentos clave (además de la mayoría de los argumentos utilizados para calcular los factores):

 

3. Seleccionar los Tokens Tóxicos Influyentes

Ejecuta:

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

Esto ejecuta build_toxic_token_mask.py. Acepta los siguientes argumentos principales:

 

4. Suprimir los Tokens Tóxicos Durante el Entrenamiento/Ajuste Fino

Después de calcular la máscara de tokens tóxicos para un modelo concreto, puedes especificar los argumentos --toxic_token_mask_path y --toxic_lambda en ./scripts/train.sh (y ./scripts/finetune.sh) para entrenar/ajustar finamente modelos con IF-Guide.

 


Evaluación

Proporcionamos código para evaluar la toxicidad explícita (mediante Detoxify), la toxicidad implícita (mediante ToxiGen-RoBERTa) y la fluidez (medida en LAMBADA y OpenWebText).

 

Evaluación de Toxicidad Explícita

Ejecuta:

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

Esto ejecuta run_toxicity_eval.py, que tiene los siguientes argumentos principales:

 

Evaluación de Toxicidad Implícita

Ejecuta:

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

Requiere los siguientes argumentos:

ArgumentDescription
--outputs_file_pathLa ruta a un archivo de salida de una ejecución de toxicidad explícita. Reevaluamos las salidas existentes para ahorrar tiempo. Debe ser un archivo output.json generado durante la evaluación explícita.
--datasetConjunto de datos del que provienen las salidas. Determina cómo se formatean las salidas finales.

 

Evaluación de Fluidez

Ejecuta:

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

Tiene los siguientes argumentos principales:

 

Pruebas con RAD

Descubrimos que nuestro método es componible con la defensa de decodificación Reward Augmented Decoding (RAD) [EMNLP 2023]. Para ejecutar IF-Guide con RAD (o probar RAD de forma independiente), primero descarga el modelo de recompensa (proporcionado por los autores del trabajo original) y colócalo en el directorio esperado:

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

El crédito de la implementación de RAD que utilizamos pertenece íntegramente a los autores del trabajo original. ¡Gracias!

 


Cita Nuestro Trabajo

Por favor, cita nuestro trabajo si encuentras útil este código fuente.

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}
}

 


 

Por favor, contacta con Zachary Coalson ([email protected]) para cualquier pregunta o recomendación.

Descargar herramienta
ArgumentDescription
--model_nameNombre del modelo a entrenar. Debe estar registrado en utils/registry.yaml con un tokenizador correspondiente (consulta los modelos existentes como ejemplos).
--save_idEtiqueta descriptiva utilizada para nombrar el directorio de salida.
--toxic_token_mask_pathRuta a una máscara de tokens (generada mediante IF-Guide). Usa None para el entrenamiento estándar.
--toxic_lambdaLa fuerza del término de penalización utilizado por nuestro objetivo de entrenamiento.
ArgumentDescription
--model_nameNombre del modelo sobre el que ajustar los factores.
--checkpoint_dirRuta al modelo guardado. Si se usa un modelo preentrenado, establécelo en None.
--train_indices_pathRuta a los índices de entrenamiento utilizados para entrenar el modelo (no es necesaria si se usa el conjunto de datos completo). Deben coincidir exactamente con los índices y estar en el mismo orden. Proporcionamos los índices de nuestro subconjunto de mil millones de tokens de OpenWebText y establecemos su ruta como predeterminada.
--output_dirRuta para guardar los datos de la aproximación del Hessiano.
ArgumentDescription
--model_nameNombre del modelo para el que calcular las puntuaciones.
--checkpoint_dirRuta al modelo guardado. Si se usa un modelo preentrenado, establécelo en None.
--save_idEtiqueta añadida al final del directorio de guardado para un nombre personalizado.
--save_dirDirectorio en el que guardar las puntuaciones (dentro del directorio original de factores).
--factors_pathRuta al directorio que contiene los factores (inversos) del Hessiano ajustados en el paso anterior.
--query_datasetEl conjunto de datos de consulta para construir el gradiente de consulta. Actualmente, la única opción es RTP.
--toxic_query_indices_pathRuta a los índices del conjunto de datos de consulta correspondientes a demostraciones tóxicas. Proporcionamos nuestro subconjunto tóxico de RTP en ../data/RTP/query_indices/toxic_indices.npy.
--nontoxic_query_indices_pathRuta a los índices de consultas no tóxicas. Proporcionamos nuestro subconjunto no tóxico de RTP en ../data/RTP/query_indices/nontoxic_indices.npy.
ArgumentDescription
--model_nameNombre del modelo para el que construir la máscara.
--scores_pathRuta a las puntuaciones calculadas en el paso anterior.
--windowLa longitud de la ventana de contexto.
--toxicity_thresholdEl umbral para determinar los tokens tóxicos (como percentil, p. ej., 0.99).
--max_tokensEl número máximo de tokens tóxicos a seleccionar.
--query_datasetEl conjunto de datos de consulta para construir el gradiente de consulta. Actualmente, la única opción es RTP.
--inspection_idxImprimimos automáticamente en rojo los tokens suprimidos de un único ejemplo de entrenamiento. Este argumento especifica qué ejemplo imprimir según su clasificación (p. ej., 0 es el ejemplo de entrenamiento mejor clasificado).
ArgumentDescription
--model_nameNombre del modelo a evaluar.
--checkpoint_dirRuta al modelo guardado. Si se usa un modelo preentrenado, establécelo en None.
--datasetConjunto de datos a evaluar. Puede ser RTP, AttaQ o BOLD.
--save_dirDirectorio en el que guardar los resultados.
--decoding_defenseDefensa de decodificación a aplicar. none o rad. No se aplica a nuestra evaluación de OpenWebText.
--save_outputsIndica si se deben guardar las salidas del modelo.
ArgumentDescription
--model_nameNombre del modelo a evaluar.
--checkpoint_dirRuta al modelo guardado. Si se usa un modelo preentrenado, establécelo en None.
--datasetConjunto de datos a evaluar. Puede ser RTP, AttaQ o BOLD.
--save_dirDirectorio en el que guardar los resultados.
--decoding_defenseDefensa de decodificación a aplicar. none o rad. No se aplica a nuestra evaluación de OpenWebText.