heretic:基于 Transformer 的语言模型审查自动移除工具

Fully automatic censorship removal for language models

Branch12Tags5
FilesLast commitLast update
2 months ago
11 days ago
13 days ago
8 months ago
2 months ago
11 months ago
11 months ago
1 month ago
11 days ago
13 days ago
13 days ago
13 days ago
30 days ago
13 days ago

标志

Heretic: 语言模型的完全自动去审查

Discord Matrix 在 Hugging Face 上关注我们 Codeberg 镜像

当日第一仓库

Heretic 是一种无需昂贵后训练,即可从基于 Transformer 的语言模型中移除审查(又称“安全对齐”)的工具。它结合了方向性消融(directional ablation)的高级实现,也就是所谓的“abliteration”(Arditi et al. 2024, Lai 2025 (1, 2)), 以及由 Optuna 驱动的基于 TPE 的参数优化器。

这种方法使 Heretic 能够完全自动运行。 Heretic 通过联合最小化拒答次数和相对于原始模型的 KL 散度,来寻找高质量的 abliteration 参数。由此得到的去审查模型能够尽可能保留原始模型的智能。使用 Heretic 不需要了解 Transformer 内部机制。事实上,任何知道如何运行命令行程序的人,都可以使用 Heretic 对语言模型进行去审查。

Heretic 支持大多数稠密模型,包括许多多模态模型、多种不同的 MoE 架构,甚至一些如 Qwen3.5 的混合模型。纯状态空间模型以及某些其他研究架构目前尚未默认支持。

截图

 

在默认配置下无监督运行时,Heretic 能够生成质量可媲美人类专家手动创建的 abliteration 的去审查模型:

模型 “有害”提示的拒答次数 “无害”提示下相对于原始模型的 KL 散度
google/gemma-3-12b-it(原始) 97/100 0 (按定义)
mlabonne/gemma-3-12b-it-abliterated-v2 3/100 1.04
huihui-ai/gemma-3-12b-it-abliterated 3/100 0.45
p-e-w/gemma-3-12b-it-heretic(我们的版本) 3/100 0.16

无需任何人工参与生成的 Heretic 版本,达到了与其他 abliteration 相同的拒答抑制水平,但 KL 散度低得多,表明对原始模型能力的损伤更小。 (你可以使用 Heretic 内置的评估功能复现这些数值,例如 heretic --model google/gemma-3-12b-it --evaluate-model p-e-w/gemma-3-12b-it-heretic。请注意,具体数值可能因平台和硬件而异。上表是在 RTX 5090 上使用 PyTorch 2.8 生成的。)

当然,数学指标和自动化基准测试并不能说明全部情况,也不能替代人工评估。使用 Heretic 生成的模型受到了用户的好评(已添加链接和强调):

“我之前持怀疑态度,但我刚刚下载了 GPT-OSS 20B Heretic 模型,天哪。它对敏感话题给出格式规范的长回复, 使用你预期未审查模型会给出的确切未审查措辞, 还能生成带有细节的 Markdown 表格等。看起来这是 目前该模型最好的 abliterated 版本……” (评论链接)

Heretic GPT 20b 似乎是我试过的最好的无审查模型。它没有破坏 模型的智能,并且能回答基础模型通常 会拒绝的提示。” (评论链接)

“[Qwen3-4B-Instruct-2507-heretic] 一直是我能在 16GB 显存上运行的最好的未量化 abliterated 模型。” (评论链接)

Heretic 模型也已使用 MMLU 和 GSM8K 等标准指标进行独立基准测试,并发现它们与同类 abliteration 工具生成的模型相比表现更优: 1, 2.

社区已经使用 Heretic 创建并发布了远远超过 5000 个模型。

用法

为适配你的硬件,请准备一个已安装 PyTorch 2.2+ 的 Python 3.10+ 环境。然后运行:

pip install -U heretic-llm
heretic Qwen/Qwen3-4B-Instruct-2507

Qwen/Qwen3-4B-Instruct-2507 替换为你想要解除审查的任意模型。

Important

尽管 PyTorch 2.2 是 Heretic 正常运行所需的最低版本, 但某些模型和配置可能依赖后续版本才引入的功能。例如,加载像 gpt-oss 这样的 MXFP4 量化模型会使用 torch.accelerator,该功能在 PyTorch 2.6 中添加。

Tip

Heretic 使用 uv 管理依赖, 仓库中还包含 uv.lock 文件,用于固定所有依赖包的版本。 如果你已经在使用 uv(而且确实推荐使用!),只需克隆仓库, 再通过 uv run heretic 运行 Heretic,即可确保你的依赖环境 与开发者一致,从而提高可靠性和安全性。

整个过程完全自动,无需配置;不过, Heretic 提供了多种可调整的的参数,便于你进一步控制其行为。运行 heretic --help 可查看可用的命令行选项, 或者如果你更喜欢使用配置文件,可以查看 config.default.toml

每次程序启动时,Heretic 都会对系统进行基准测试,以确定能够最大程度利用可用硬件的最佳批处理大小。 在 RTX 3090 上,使用默认配置,对 Qwen3-4B-Instruct-2507 进行解除审查大约需要 20 到 30 分钟。请注意,Heretic 支持使用 bitsandbytes 进行模型量化,这会大幅降低处理模型所需的显存用量。 将 quantization 选项设置为 bnb_4bit 即可启用量化。

当 Heretic 完成某个模型的解除审查后,你可以选择 保存模型、将其上传到 Hugging Face、通过与它对话来测试效果、 运行标准基准测试,或组合执行上述操作。

研究功能

除了解除模型审查这一主要功能之外,Heretic 还提供了一些旨在支持模型内部语义研究 (即可解释性)的功能。若要使用这些功能,需要在安装 Heretic 时添加 可选的 research 附加依赖:

pip install -U 'heretic-llm[research]'

这将为你启用以下功能:

通过传入 --plot-residuals 生成残差向量图

当以该标志运行时,Heretic 将执行以下操作:

  1. 分别针对“有害”和“无害”提示,为每个 Transformer 层计算首个输出 token 的残差向量(隐状态)。
  2. 从残差空间到 2D 空间执行一次 PaCMAP 投影
  3. 按几何中位数对“有害”/“无害”残差向量的投影进行左右对齐,使相邻各层的投影更加相似。此外,对每一新层,PaCMAP 都会使用前一层投影作为初始值,以尽量减少突兀的变化。
  4. 绘制投影的散点图,并为每一层生成一张 PNG 图像。
  5. 生成一个动画 GIF,展示残差向量在层与层之间如何变化。

残差向量图

如需控制所生成图像的各项细节,请查看 配置文件 中提供的选项。

请注意,PaCMAP 是在 CPU 上执行的高开销操作。 对于更大的模型,计算所有层的投影可能需要一小时甚至更长时间。

通过传入 --print-residual-geometry 打印残差几何结构的详细信息

如果你希望定量分析“有害”和“无害”提示对应的残差向量之间的关系,该标志会输出下表。表中包含一系列指标,可帮助你更好地理解这些关系(此处以 gemma-3-270m-it 为例):

┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━┓
┃ Layer ┃ S(g,b) ┃ S(g*,b*) ┃  S(g,r) ┃ S(g*,r*) ┃  S(b,r) ┃ S(b*,r*) ┃      |g| ┃     |g*| ┃      |b| ┃     |b*| ┃     |r| ┃    |r*| ┃   Silh ┃
┡━━━━━━━╇━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━┩
│     1 │ 1.0000 │   1.0000 │ -0.4311 │  -0.4906 │ -0.4254 │  -0.4847 │   170.29 │   170.49 │   169.78 │   169.85 │    1.19 │    1.31 │ 0.0480 │
│     2 │ 1.0000 │   1.0000 │  0.4297 │   0.4465 │  0.4365 │   0.4524 │   768.55 │   768.77 │   771.32 │   771.36 │    6.39 │    5.76 │ 0.0745 │
│     3 │ 0.9999 │   1.0000 │ -0.5699 │  -0.5577 │ -0.5614 │  -0.5498 │  1020.98 │  1021.13 │  1013.80 │  1014.71 │   12.70 │   11.60 │ 0.0920 │
│     4 │ 0.9999 │   1.0000 │  0.6582 │   0.6553 │  0.6659 │   0.6627 │  1356.39 │  1356.20 │  1368.71 │  1367.95 │   18.62 │   17.84 │ 0.0957 │
│     5 │ 0.9987 │   0.9990 │ -0.6880 │  -0.6761 │ -0.6497 │  -0.6418 │   766.54 │   762.25 │   731.75 │   732.42 │   51.97 │   45.24 │ 0.1018 │
│     6 │ 0.9998 │   0.9998 │ -0.1983 │  -0.2312 │ -0.1811 │  -0.2141 │  2417.35 │  2421.08 │  2409.18 │  2411.40 │   43.06 │   43.47 │ 0.0900 │
│     7 │ 0.9998 │   0.9997 │ -0.5258 │  -0.5746 │ -0.5072 │  -0.5560 │  3444.92 │  3474.99 │  3400.01 │  3421.63 │   86.94 │   94.38 │ 0.0492 │
│     8 │ 0.9990 │   0.9991 │  0.8235 │   0.8312 │  0.8479 │   0.8542 │  4596.54 │  4615.62 │  4918.32 │  4934.20 │  384.87 │  377.87 │ 0.2278 │
│     9 │ 0.9992 │   0.9992 │  0.5335 │   0.5441 │  0.5678 │   0.5780 │  5322.30 │  5316.96 │  5468.65 │  5466.98 │  265.68 │  267.28 │ 0.1318 │
│    10 │ 0.9974 │   0.9973 │  0.8189 │   0.8250 │  0.8579 │   0.8644 │  5328.81 │  5325.63 │  5953.35 │  5985.15 │  743.95 │  779.74 │ 0.2863 │
│    11 │ 0.9977 │   0.9978 │  0.4262 │   0.4045 │  0.4862 │   0.4645 │  9644.02 │  9674.06 │  9983.47 │  9990.28 │  743.28 │  726.99 │ 0.1576 │
│    12 │ 0.9904 │   0.9907 │  0.4384 │   0.4077 │  0.5586 │   0.5283 │ 10257.40 │ 10368.50 │ 11114.51 │ 11151.21 │ 1711.18 │ 1664.69 │ 0.1890 │
│    13 │ 0.9867 │   0.9874 │  0.4007 │   0.3680 │  0.5444 │   0.5103 │ 12305.12 │ 12423.75 │ 13440.31 │ 13432.47 │ 2386.43 │ 2282.47 │ 0.1293 │
│    14 │ 0.9921 │   0.9922 │  0.3198 │   0.2682 │  0.4364 │   0.3859 │ 16929.16 │ 17080.37 │ 17826.97 │ 17836.03 │ 2365.23 │ 2301.87 │ 0.1282 │
│    15 │ 0.9846 │   0.9850 │  0.1198 │   0.0963 │  0.2913 │   0.2663 │ 16858.58 │ 16949.44 │ 17496.00 │ 17502.88 │ 3077.08 │ 3029.60 │ 0.1611 │
│    16 │ 0.9686 │   0.9689 │ -0.0029 │  -0.0254 │  0.2457 │   0.2226 │ 18912.77 │ 19074.86 │ 19510.56 │ 19559.62 │ 4848.35 │ 4839.75 │ 0.1516 │
│    17 │ 0.9782 │   0.9784 │ -0.0174 │  -0.0381 │  0.1908 │   0.1694 │ 27098.09 │ 27273.00 │ 27601.12 │ 27653.12 │ 5738.19 │ 5724.21 │ 0.1641 │
│    18 │ 0.9184 │   0.9196 │  0.1343 │   0.1430 │  0.5155 │   0.5204 │   190.16 │   190.35 │   219.91 │   220.62 │   87.82 │   87.59 │ 0.1855 │
└───────┴────────┴──────────┴─────────┴──────────┴─────────┴──────────┴──────────┴──────────┴──────────┴──────────┴─────────┴─────────┴────────┘
g = mean of residual vectors for good prompts
g* = geometric median of residual vectors for good prompts
b = mean of residual vectors for bad prompts
b* = geometric median of residual vectors for bad prompts
r = residual direction for means (i.e., b - g)
r* = residual direction for geometric medians (i.e., b* - g*)
S(x,y) = cosine similarity of x and y
|x| = L2 norm of x
Silh = Mean silhouette coefficient of residuals for good/bad clusters

Heretic 的工作原理

Heretic 实现了一种参数化的方向性消融变体。对于每个受支持的 Transformer 组件(目前为注意力输出投影和 MLP 下投影),它会识别每个 Transformer 层中对应的矩阵,并使其相对于相关的“残差方向”正交化,从而抑制该方向在与该矩阵相乘结果中的表达。

每个层的残差方向通过“harmful”与“harmless”示例提示词的首个 token 残差之间的均值差计算得到。

消融过程由若干可优化参数控制:

  • direction_index:某个残差方向的索引,或特殊值 per layer,表示每一层都应使用与该层关联的残差方向进行消融。
  • max_weightmax_weight_positionmin_weightmin_weight_distance:对于每个组件,这些参数描述了消融权重核在各层上的形状与位置。下图对此进行了说明:

Explanation

 

相较于现有的 abliteration 系统,Heretic 的主要创新在于:

  • 消融权重核的形状高度灵活,结合自动参数优化,可以改善合规性与质量之间的权衡。Maxime Labonne 此前已在 gemma-3-12b-it-abliterated-v2 中探索过非恒定消融权重。
  • 残差方向索引是浮点数而非整数。对于非整数值,两个最接近的残差方向向量会被线性插值。这开辟了远超均值差计算所识别方向的广阔方向空间,并常常使优化过程能够找到优于任何单个层所属方向的更好方向。
  • 消融参数为每个组件分别选取。我发现 MLP 干预往往比注意力干预对模型更具破坏性,因此使用不同的消融权重可以挖掘出一些额外性能。

已有工作

以下是我所了解的 abliteration 技术的公开实现:

请注意,Heretic 是从头编写的,并未复用上述任何项目的代码。

致谢

Heretic 的开发参考了以下内容:

引用

如果你将 Heretic 用于研究,请使用以下 BibTeX 条目进行引用:

@misc{heretic,
  author = {Weidmann, Philipp Emanuel},
  title = {Heretic: Fully automatic censorship removal for language models},
  year = {2025},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/p-e-w/heretic}}
}

许可证

版权 © 2025-2026 Philipp Emanuel Weidmann (pew@worldwidemann.com) 及贡献者

本程序是自由软件:您可以根据自由软件基金会发布的 GNU Affero 通用公共许可证的条款重新分发和/或修改它,许可证版本为第 3 版或(如果您愿意)任何更高版本。

本程序旨在有用,但没有任何担保;甚至不暗示商品性或适合特定用途的担保。更多详情请参见 GNU Affero 通用公共许可证。

本程序应随附一份 GNU Affero 通用公共许可证副本。如果没有,请参见 https://www.gnu.org/licenses/

通过向本项目作出贡献,您同意以相同许可证发布您的贡献。

Introduction

语言模型全自动审查规避【此简介由AI生成】

Customize your domain
15031.6 K3.52 KVisit GitHub