Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
IF-Guide — [NeurIPS '25] 论文代码:"IF-Guide:基于影响函数引导的抑制有害训练数据以降低LLM毒性" | Kitploit
工具/GitHubGitHub/ztcoalson/if-guide
防御工具静态分析代码分析论文与研究学习与教育AI 安全
GitHubztcoalson/if-guide

IF-Guide

[NeurIPS '25] 论文代码:"IF-Guide:基于影响函数引导的抑制有害训练数据以降低LLM毒性"

查看仓库
13210个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

IF-Guide:影响函数引导的大语言模型去毒化 [NeurIPS 2025]

本仓库包含 IF-Guide 的代码,这是我们在论文中提出的大语言模型去毒化技术:

  • IF-Guide:影响函数引导的大语言模型去毒化
  • Zachary Coalson, Juhan Bae, Nicholas Carlini, Sanghyun Hong

 


TL;DR

您可以使用我们的方法,通过识别有害的训练样本并在预训练或微调期间抑制它们,来对大语言模型进行去毒化!

 

摘要

我们研究了训练数据如何导致大语言模型中出现有毒行为。先前大多数降低模型毒性的工作采用反应式方法,例如对预训练(且可能存在毒性的)模型进行微调,使其与人类价值观对齐。相比之下,我们提出了一种主动方法——IF-Guide——它利用影响函数来识别任何训练数据中的有害 token,并在训练期间抑制其影响。为此,我们首先证明标准影响函数无法有效发现有害训练记录。然后,我们提出了一种新的改编方法,用于衡量从训练数据到模型毒性的 token 级归因,同时提供了选择有毒训练文档的技术,以及可以集成到预训练和微调中的学习目标。此外,IF-Guide 不依赖人类偏好数据,而现有对齐方法通常需要这些数据。在评估中,我们表明 IF-Guide 能大幅降低显性和隐性毒性——与未审查模型相比最高降低 10 倍,与基线对齐方法(如 DPO 和 RAD)相比在预训练和微调场景中最高降低 3 倍。IF-Guide 计算高效:计算影响分数不需要十亿参数模型;百万参数模型——参数减少 7.5 倍——即可有效作为识别有害数据的代理。

 


安装

创建 conda 环境(您可以使用任何包含 python>=3.10 的环境)并安装必要的包:

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

注意: 我们使用 Kronfluence 包通过 EK-FAC 计算影响分数。我们创建了一个自定义实现,以支持我们论文中引入的差分影响技术(第 4 页,公式 6)。该软件包的所有其他组成部分归功于原始创作者。谢谢!

接下来,进入工作目录:

root@kitploit:~
cd src

 


模型训练/微调

要训练模型,请运行:

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

这会调用 train.py,它接受以下关键参数:

注意: 所有其他参数均可保留默认值,以复现我们的实验设置。这也适用于以下各节。

要微调现有模型,请运行:

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

这会运行 finetune.py,它使用以下附加参数:

参数描述
--checkpoint_dir已保存模型的路径。如果使用预训练模型,请设为 None。
--max_steps微调的最大步数。

 


运行 IF-Guide

IF-Guide 由四个步骤组成:(1) 使用 EK-FAC 计算逆 Hessian 近似值,(2) 计算有毒和无毒查询数据上逐 token 的差分影响分数(第 4 页,公式 8),(3) 选择训练中要抑制的有影响力的有毒 token(第 23 页,算法 1),以及 (4) 使用我们基于惩罚的训练目标来抑制有毒 token(第 5 页,公式 9)。

 

1. 拟合逆 Hessian 近似因子

运行:

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

这会调用 fit_factors.py,并接受以下主要参数:

 

2. 计算逐 token 分数

运行:

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

这会运行 compute_scores.py,其关键参数如下(除了用于计算因子的大部分参数外):

 

3. 选择有影响力的有毒 token

运行:

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

这会运行 build_toxic_token_mask.py。它接受以下主要参数:

 

4. 在训练/微调期间抑制有毒 token

在为特定模型计算出有毒 token 掩码后,您可以在 ./scripts/train.sh(和 ./scripts/finetune.sh)中指定 --toxic_token_mask_path 和 --toxic_lambda 参数,以使用 IF-Guide 训练/微调模型。

 


评估

我们提供了评估显性毒性(通过 Detoxify)、隐性毒性(通过 ToxiGen-RoBERTa)和流畅度(在 LAMBADA 和 OpenWebText 上测量)的代码。

 

显性毒性评估

运行:

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

这会运行 run_toxicity_eval.py,它有以下主要参数:

 

隐性毒性评估

运行:

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

它需要以下参数:

参数描述
--outputs_file_path显性毒性运行输出文件的路径。我们重新评估现有输出以节省时间。这应该是显性评估期间生成的 output.json 文件。
--dataset输出所来自的数据集。决定最终输出的格式。

 

流畅度评估

运行:

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

它有以下主要参数:

 

使用 RAD 进行测试

我们发现我们的方法与解码时防御 奖励增强解码(RAD) [EMNLP 2023] 是可组合的。要使用 RAD 运行 IF-Guide(或独立测试 RAD),请先下载奖励模型(由原作者提供)并将其放置在预期目录中:

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

我们所使用的 RAD 实现的功劳完全归功于原作的作者。谢谢!

 


引用我们的工作

如果您觉得这份源代码对您有帮助,请引用我们的工作。

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

 


 

如有任何疑问和建议,请联系 Zachary Coalson ([email protected])。

下载工具
参数描述
--model_name要训练的模型名称。必须在 utils/registry.yaml 中注册,并带有相应的分词器(参见现有模型示例)
--save_id用于输出目录命名的描述性标签。
--toxic_token_mask_pathtoken 掩码的路径(通过 IF-Guide 生成)。标准训练使用 None。
--toxic_lambda我们的训练目标所使用的惩罚项的强度。
参数描述
--model_name要拟合因子的模型名称。
--checkpoint_dir已保存模型的路径。如果使用预训练模型,请设为 None。
--train_indices_path用于训练模型的训练索引路径(如果使用整个数据集则不需要)。必须与确切索引匹配且顺序相同。我们提供了自己的十亿 token OpenWebText 子集的索引,并将其路径设为默认值。
--output_dir保存 Hessian 近似数据的路径。
参数描述
--model_name要计算分数的模型名称。
--checkpoint_dir已保存模型的路径。如果使用预训练模型,请设为 None。
--save_id追加到保存目录末尾以自定义命名的标签。
--save_dir保存分数的目录(在原始因子目录内)。
--factors_path包含上一步中拟合的(逆)Hessian 因子的目录路径。
--query_dataset用于构建查询梯度的查询数据集。目前唯一选项是 RTP。
--toxic_query_indices_path查询数据集中与有毒示例相对应的索引路径。我们在 ../data/RTP/query_indices/toxic_indices.npy 中提供了来自 RTP 的有毒子集。
--nontoxic_query_indices_path无毒查询的索引路径。我们在 ../data/RTP/query_indices/nontoxic_indices.npy 中提供了来自 RTP 的无毒子集。
参数描述
--model_name要为其构建掩码的模型名称。
--scores_path上一步中计算的分数路径。
--window上下文窗口长度。
--toxicity_threshold确定有毒 token 的阈值(以百分位数表示,例如 0.99)。
--max_tokens要选择的有毒 token 的最大数量。
--query_dataset用于构建查询梯度的查询数据集。目前唯一选项是 RTP。
--inspection_idx我们会自动用红色打印单个训练示例中被抑制的 token。该参数根据排名指定要打印的示例(例如,0 是排名最高的训练示例)。
参数描述
--model_name要评估的模型名称。
--checkpoint_dir已保存模型的路径。如果使用预训练模型,请设为 None。
--dataset要评估的数据集。可以是 RTP、AttaQ 或 BOLD。
--save_dir保存结果的目录。
--decoding_defense要应用的解码时防御。none 或 rad。不适用于我们的 OpenWebText 评估。
--save_outputs是否保存模型的输出。
参数描述
--model_name要评估的模型名称。
--checkpoint_dir已保存模型的路径。如果使用预训练模型,请设为 None。
--dataset要评估的数据集。可以是 RTP、AttaQ 或 BOLD。
--save_dir保存结果的目录。
--decoding_defense要应用的解码时防御。none 或 rad。不适用于我们的 OpenWebText 评估。