Hereticは、高価なポストトレーニングを必要とせずに、トランスフォーマーベースの言語モデルから検閲(別名「セーフティアラインメント」)を除去するツールです。高度な実装の方向性アブレーション(「アブリテレーション」としても知られる、Arditi et al. 2024、Lai 2025(1、2))と、Optunaを搭載したTPEベースのパラメータ最適化器を組み合わせています。
このアプローチにより、Hereticは完全に自動的に動作します。Hereticは、拒否回数と元のモデルからのKLダイバージェンスを同時に最小化することで、高品質なアブリテレーションパラメータを見つけます。その結果、元のモデルの知能を可能な限り保持した検閲除去モデルが得られます。Hereticを使用するためにトランスフォーマーの内部構造を理解する必要はありません。実際、コマンドラインプログラムの実行方法を知っている人なら誰でも、Hereticを使用して言語モデルの検閲を除去できます。
Hereticは、多くのマルチモーダルモデル、いくつかの異なるMoEアーキテクチャ、さらにはQwen3.5のようなハイブリッドモデルを含む、ほとんどの高密度モデルをサポートしています。純粋な状態空間モデルやその他の研究用アーキテクチャは、現時点ではデフォルトでサポートされていません。
デフォルト設定で教師なしで実行すると、Hereticは人間の専門家が手動で作成したアブリテレーションに匹敵する品質の検閲除去モデルを生成できます。
Heretic版は、人間の労力を一切かけずに生成されたにもかかわらず、他のアブリテレーションと同等の拒否抑制レベルを達成しながら、KLダイバージェンスははるかに低く、元のモデルの能力への損傷が少ないことを示しています。(これらの数値は、Hereticの組み込み評価機能を使用して再現できます。例:heretic --model google/gemma-3-12b-it --evaluate-model p-e-w/gemma-3-12b-it-heretic。正確な値はプラットフォームやハードウェアに依存する可能性があることに注意してください。上記の表は、PyTorch 2.8を搭載したRTX 5090でコンパイルされました。)
もちろん、数学的な指標や自動ベンチマークは全体像を決して語らず、人間による評価の代わりにはなりません。Hereticで生成されたモデルはユーザーから好評を得ています(リンクと強調は追加されました)。
「以前は懐疑的でしたが、GPT-OSS 20B Hereticモデルをダウンロードしてみて、すごいと思いました。センシティブなトピックに対して、適切にフォーマットされた長文の応答を提供し、検閲されていないモデルに期待されるまさにその言葉を使い、詳細なマークダウンテーブルなどを生成します。これまでで最高のアブリテレーションバージョンのように見えます...」 (コメントへのリンク)
「Heretic GPT 20bは、私が今まで試した中で最高の検閲除去モデルのようです。モデルの知能を破壊せず、ベースモデルでは拒否されるようなプロンプトにも正常に回答します。」 (コメントへのリンク)
「Qwen3-4B-Instruct-2507-hereticは、16GBのVRAMで実行できた中で最高の非量子化アブリテレーションモデルです。」 (コメントへのリンク)
Hereticモデルは、MMLUやGSM8Kなどの標準的な指標を使用して独立にベンチマークされ、競合するアブリテレーションツールによって生成されたモデルと比較して好意的に評価されています: 1、 2。
コミュニティは、Hereticを使用して4000以上のモデルを作成し公開しています。
Python 3.10+の環境を用意し、ハードウェアに適したPyTorch 2.2+をインストールしてください。その後、以下を実行します。
pip install -U heretic-llm
heretic Qwen/Qwen3-4B-Instruct-2507
Qwen/Qwen3-4B-Instruct-2507を、検閲を除去したい任意のモデルに置き換えてください。
[!IMPORTANT]
PyTorch 2.2はHereticが動作するために必要な最小バージョンですが、一部のモデルや設定では、それ以降のバージョンでしか利用できない機能が必要になる場合があります。例えば、gpt-ossのようなMXFP4量子化モデルのロードには、PyTorch 2.6で追加されたtorch.acceleratorを使用します。
[!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によるモデル量子化をサポートしており、モデル処理に必要なVRAM量を大幅に削減できることに注意してください。量子化を有効にするには、quantizationオプションをbnb_4bitに設定してください。
Hereticがモデルの検閲除去を完了すると、モデルを保存する、Hugging Faceにアップロードする、チャットして動作をテストする、標準ベンチマークを実行する、またはこれらのアクションの任意の組み合わせを選択できます。
モデル検閲の除去という主な機能に加えて、Hereticはモデル内部の意味論(解釈可能性)に関する研究を支援する機能も提供しています。これらの機能を使用するには、オプションのresearchエクストラを指定してHereticをインストールする必要があります。
pip install -U 'heretic-llm[research]'
これにより、以下の機能が使用可能になります。
--plot-residuals を指定して残差ベクトルのプロットを生成このフラグを指定して実行すると、Hereticは次のことを行います。
生成されるプロットの様々な側面を制御するためのオプションについては、設定ファイルを参照してください。
PaCMAPはCPU上で実行される高コストな操作です。大規模なモデルの場合、すべての層の投影を計算するのに1時間以上かかることがあります。
--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 = good promptsの残差ベクトルの平均
g* = good promptsの残差ベクトルの幾何学的中央値
b = bad promptsの残差ベクトルの平均
b* = bad promptsの残差ベクトルの幾何学的中央値
r = 平均の残差方向(b - g)
r* = 幾何学的中央値の残差方向(b* - g*)
S(x,y) = xとyのコサイン類似度
|x| = xのL2ノルム
Silh = good/badクラスタの残差の平均シルエット係数
Hereticは、方向性アブレーションのパラメータ化された変形を実装しています。サポートされている各トランスフォーマーコンポーネント(現在はアテンション出力投影とMLPダウン投影)について、各トランスフォーマー層内の関連行列を特定し、それらを関連する「残差方向」に関して直交化し、その行列との乗算結果におけるその方向の発現を阻害します。
残差方向は、各層について、「有害」および「無害」の例示プロンプトに対する最初のトークンの残差の平均差分として計算されます。
アブレーションプロセスは、いくつかの最適化可能なパラメータによって制御されます。
direction_index: 残差方向のインデックス、または特別な値per layer。これは各層がその層に関連付けられた残差方向を使用してアブレーションされるべきであることを示します。max_weight、max_weight_position、min_weight、およびmin_weight_distance:各コンポーネントについて、これらのパラメータは層全体にわたるアブレーション重みカーネルの形状と位置を記述します。次の図はこれを示しています。
既存のアブリテレーションシステムに対するHereticの主な革新点は以下の通りです。
私は以下の公開されているアブリテレーション技術の実装を知っています。
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}}
}
Copyright © 2025-2026 Philipp Emanuel Weidmann([email protected])+ コントリビューター
このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行されたGNU Affero General Public Licenseのバージョン3、または(あなたの選択で)それ以降のバージョンのいずれかの条件下で再配布および/または改変することができます。
このプログラムは有用であることを期待して配布されていますが、いかなる保証もありません。商品性または特定目的への適合性についての暗黙の保証もありません。詳細については、GNU Affero General Public Licenseを参照してください。
あなたはこのプログラムとともにGNU Affero General Public Licenseのコピーを受け取っているはずです。もし受け取っていない場合は、https://www.gnu.org/licenses/を参照してください。
このプロジェクトに貢献することにより、あなたはあなたの貢献を同じライセンスの下でリリースすることに同意したものとみなされます。
| モデル | 「有害」プロンプトに対する拒否回数 | 「無害」プロンプトに対する元のモデルからのKLダイバージェンス |
|---|
| google/gemma-3-12b-it (original) | 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 (ours) | 3/100 | 0.16 |