
[NeurIPS '25] Código para o Paper "IF-Guide: Influence Function-Guided Suppression of Harmful Training Data for Reducing LLM Toxicity"
Este repositório contém o código do IF-Guide, a técnica de desintoxicação de LLMs apresentada no nosso artigo:
Você pode usar nosso método para desintoxicar LLMs identificando exemplos de treinamento prejudiciais e, em seguida, suprimindo-os durante o pré-treinamento ou o fine-tuning!
Estudamos como os dados de treinamento contribuem para o surgimento de comportamentos tóxicos em modelos de linguagem de grande porte. A maior parte dos trabalhos anteriores sobre redução de toxicidade em modelos adota abordagens reativas, como o fine-tuning de modelos pré-treinados (e potencialmente tóxicos) para alinhá-los aos valores humanos. Em contraste, propomos uma abordagem proativa — o IF-Guide — que utiliza funções de influência para identificar tokens prejudiciais em quaisquer dados de treinamento e suprimir seu impacto durante o treinamento. Para isso, primeiro mostramos que as funções de influência padrão são ineficazes para descobrir registros de treinamento prejudiciais. Em seguida, apresentamos uma nova adaptação que mede atribuições em nível de token, dos dados de treinamento até a toxicidade do modelo, juntamente com técnicas para selecionar documentos de treinamento tóxicos e um objetivo de aprendizado que pode ser integrado tanto ao pré-treinamento quanto ao fine-tuning. Além disso, o IF-Guide não depende de dados de preferência humana, que normalmente são exigidos pelos métodos de alinhamento existentes. Na avaliação, demonstramos que o IF-Guide reduz substancialmente tanto a toxicidade explícita quanto a implícita — em até 10× em comparação com modelos sem censura, e em até 3× em comparação com métodos de alinhamento de base, como DPO e RAD — tanto em cenários de pré-treinamento quanto de fine-tuning. O IF-Guide é computacionalmente eficiente: um modelo de bilhão de parâmetros não é necessário para calcular os escores de influência; um modelo de milhão de parâmetros — com 7,5× menos parâmetros — pode servir efetivamente como proxy para identificar dados prejudiciais.
Crie o ambiente conda (você pode usar qualquer ambiente com python>=3.10) e instale os pacotes necessários:
conda create -n IF-Guide python=3.10
conda activate IF-Guide
pip install -r requirements.txt
Nota: Usamos o pacote Kronfluence para calcular os escores de influência com EK-FAC. Criamos uma implementação personalizada que suporta a técnica de influência diferencial introduzida no nosso artigo (página 4, Eq. 6). Os créditos de todos os outros componentes do pacote vão para os criadores originais. Obrigado!
Em seguida, navegue até o diretório de trabalho:
cd src
Para treinar um modelo, execute:
./scripts/train.sh
Isso chama train.py, que aceita os seguintes argumentos principais:
| Argumento | Descrição |
|---|---|
--model_name | Nome do modelo a ser treinado. Deve estar registrado em utils/registry.yaml com um tokenizador correspondente (consulte os modelos existentes para exemplos) |
--save_id | Tag descritiva usada para nomear o diretório de saída. |
--toxic_token_mask_path | Caminho para uma máscara de tokens (gerada via IF-Guide). Use None para treinamento padrão. |
--toxic_lambda | A intensidade do termo de penalidade usado pelo nosso objetivo de treinamento. |
Nota: Todos os outros argumentos podem ser mantidos nos valores padrão para reproduzir nossa configuração experimental. Isso se aplica às seções a seguir.
Para fazer fine-tuning de um modelo existente, execute:
./scripts/finetune.sh
Isso executa finetune.py, que usa os seguintes argumentos adicionais:
| Argumento | Descrição |
|---|---|
--checkpoint_dir | Caminho para um modelo salvo. Se estiver usando um modelo pré-treinado, defina como None. |
--max_steps | Número máximo de passos para o fine-tuning. |
O IF-Guide é composto por quatro etapas: (1) computar a aproximação da inversa da Hessiana com EK-FAC, (2) computar os escores de influência diferencial por token sobre os dados de consulta tóxicos e não tóxicos (página 4, Eq. 8), (3) selecionar tokens tóxicos influentes para suprimir durante o treinamento (página 23, Alg. 1) e (4) suprimir os tokens tóxicos com nosso objetivo de treinamento baseado em penalidade (página 5, Eq. 9).
Execute:
./scripts/fit_factors.sh
Isso chama fit_factors.py e recebe os seguintes argumentos principais:
| Argumento | Descrição |
|---|---|
--model_name | Nome do modelo para ajustar os fatores. |
--checkpoint_dir | Caminho para o modelo salvo. Se estiver usando um modelo pré-treinado, defina como None. |
--train_indices_path | Caminho para os índices de treinamento usados para treinar o modelo (não é necessário se estiver usando o conjunto de dados inteiro). Deve corresponder exatamente aos índices e estar na mesma ordem. Fornecemos os índices do nosso subconjunto de um bilhão de tokens do OpenWebText e definimos seu caminho como padrão. |
--output_dir | Caminho para salvar os dados da aproximação da Hessiana. |
Execute:
./scripts/compute_scores.sh
Isso executa compute_scores.py com os seguintes argumentos principais (além da maioria dos argumentos usados para computar os fatores):
| Argumento | Descrição |
|---|---|
--model_name | Nome do modelo para computar os escores. |
--checkpoint_dir | Caminho para o modelo salvo. Se estiver usando um modelo pré-treinado, defina como None. |
--save_id | Tag anexada ao final do diretório de salvamento para nomeação personalizada. |
--save_dir | Diretório para salvar os escores (dentro do diretório original dos fatores). |
--factors_path | Caminho para o diretório que contém os fatores da (inversa da) Hessiana ajustados na etapa anterior. |
--query_dataset | O conjunto de dados de consulta para construir o gradiente de consulta. Atualmente, a única opção é RTP. |
--toxic_query_indices_path | Caminho para os índices do conjunto de dados de consulta referentes a demonstrações tóxicas. Fornecemos nosso subconjunto tóxico do RTP em ../data/RTP/query_indices/toxic_indices.npy. |
--nontoxic_query_indices_path | Caminho para os índices de consultas não tóxicas. Fornecemos nosso subconjunto não tóxico do RTP em ../data/RTP/query_indices/nontoxic_indices.npy. |
Execute:
./scripts/build_toxic_token_mask.sh
Isso executa build_toxic_token_mask.py. Ele recebe os seguintes argumentos principais:
| Argumento | Descrição |
|---|---|
--model_name | Nome do modelo para construir a máscara. |
--scores_path | Caminho para os escores computados na etapa anterior. |
--window | O comprimento da janela de contexto. |
--toxicity_threshold | O limite para determinar tokens tóxicos (como percentil, ex.: 0,99). |
--max_tokens | O número máximo de tokens tóxicos a selecionar. |
--query_dataset | O conjunto de dados de consulta para construir o gradiente de consulta. Atualmente, a única opção é RTP. |
--inspection_idx | Imprimimos automaticamente os tokens suprimidos para um único exemplo de treinamento em vermelho. Este argumento especifica qual exemplo imprimir com base em sua classificação (ex.: 0 é o exemplo de treinamento mais bem classificado). |
Após computar a máscara de tokens tóxicos para um modelo específico, você pode especificar os argumentos --toxic_token_mask_path e --toxic_lambda em ./scripts/train.sh (e ./scripts/finetune.sh) para treinar/fazer fine-tuning de modelos com o IF-Guide.
Fornecemos código para avaliar toxicidade explícita (via Detoxify), toxicidade implícita (via ToxiGen-RoBERTa) e fluência (medida em LAMBADA e OpenWebText).
Execute:
./scripts/run_toxicity_eval.sh
Isso executa run_toxicity_eval.py, que tem os seguintes argumentos principais:
| Argumento | Descrição |
|---|---|
--model_name | Nome do modelo a ser avaliado. |
--checkpoint_dir | Caminho para o modelo salvo. Se estiver usando um modelo pré-treinado, defina como None. |
--dataset | Conjunto de dados para avaliar. Pode ser RTP, AttaQ ou BOLD. |
--save_dir | Diretório para salvar os resultados. |
--decoding_defense | Defesa em tempo de decodificação a ser aplicada. none ou rad. Não se aplica à nossa avaliação no OpenWebText. |
--save_outputs | Se deve salvar as saídas do modelo. |
Execute:
./scripts/run_implicit_toxicity_eval.sh
Requer os seguintes argumentos:
| Argumento | Descrição |
|---|---|
--outputs_file_path | O caminho para um arquivo de saída de uma execução de toxicidade explícita. Reavaliamos as saídas existentes para economizar tempo. Deve ser um arquivo output.json gerado durante a avaliação explícita. |
--dataset | Conjunto de dados do qual as saídas são provenientes. Determina como as saídas finais são formatadas. |
Execute:
./scripts/run_fluency_eval.sh
Tem os seguintes argumentos principais:
| Argumento | Descrição |
|---|---|
--model_name | Nome do modelo a ser avaliado. |
--checkpoint_dir | Caminho para o modelo salvo. Se estiver usando um modelo pré-treinado, defina como None. |
--dataset | Conjunto de dados para avaliar. Pode ser RTP, AttaQ ou BOLD. |
--save_dir | Diretório para salvar os resultados. |
--decoding_defense | Defesa em tempo de decodificação a ser aplicada. none ou rad. Não se aplica à nossa avaliação no OpenWebText. |
Descobrimos que nosso método é compatível com a defesa em tempo de decodificação Reward Augmented Decoding (RAD) [EMNLP 2023]. Para executar o IF-Guide com RAD (ou testar o RAD de forma independente), primeiro baixe o modelo de recompensa (fornecido pelos autores do trabalho original) e coloque-o no diretório esperado:
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
Os créditos pela implementação do RAD que usamos pertencem integralmente aos autores do trabalho original. Obrigado!
Por favor, cite nosso trabalho se você achar este código-fonte útil.
@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, entre em contato com Zachary Coalson ([email protected]) para quaisquer perguntas e recomendações.