論文 Jailbreaking Open-Weight LLMs via Random Embedding Perturbations のコードとデータ。
カリフォルニア大学サンタクルーズ校理論計算機科学科の素晴らしい人々によって執筆されました。
この研究には、Scott Sirri、Vaggos Chatziafratis教授、C. Seshadhri教授、そして私自身による重要な貢献が含まれています。
このリポジトリには、論文のために生成されたすべてのモデル応答、各応答の安全 / 不安全 / 退化のラベル、それらを生成したColabノートブック、およびノートブックがインポートする推論スクリプトが含まれています。これは、Perturbed Embedding Vector(PEV)攻撃と、論文で比較された他の5つのジェイルブレイク手法を対象としています。論文内のすべてのジェイルブレイク率と実時間は、results/ 内のファイルから計算されています。
code/
inference/ run_<model>.py: モデルの読み込み、プロンプト構築、および
すべてのPEVノートブックがインポートする手動生成ループ
ours/<model>/ 1つのモデル用のPEVノートブック
ours/<model>/fixed_peak_sigma/
固定ピークシグマ実行用のノートブック(GLM-4-9B、Phi-4-mini、
Qwen2.5-1.5B);それらのログは results/<model>/ours/fixed_peak_sigma/ にあります
igcg/ I-GCG、モデルごとに1つのノートブック
latentfusion/ LatentFusion、モデルごとに1つのノートブック
refusalcones/ RefusalCones、モデルごとに1つのノートブック
softprompt/ SoftPromptノートブック(Llama-3.1-8BおよびMistral-7B)
figures/ 論文の図を描画するノートブック
results/<model>/
baseline/ 摂動なしのプロンプトへの直接応答(.txtログ)とその
ラベル(.xlsx / .csv);これらがベースラインのジェイルブレイク率を与えます
ours/raw_responses/ シグマスイープからのPEV応答ログ、プロンプト範囲ごとに分割
ours/classified/ それらの応答のラベル、同じ方法で分割
ours/fixed_peak_sigma/ モデルの固定ピークシグマでのPEV実行(GLM-4-9B、Phi-4-mini、
Qwen2.5-1.5B):完全な100プロンプトスイープとSELECT再実行
igcg/ latentfusion/ neurostrike/ refusalcones/ softprompt/
他の手法の応答(.txt)とラベル(.xlsx)
モデル:Qwen2.5-1.5B、SmolLM3-3B、Phi-4-mini、Mistral-7B-Instruct、Llama-3.1-8B、
GLM-4-9B、論文のSec. 4で名前が挙げられているinstruction-tunedチャット変種。
各手法のコードの場所:
| 手法 | 場所 |
|---|---|
| PEV | code/ours/<model>/;固定ピークシグマ実行は code/ours/<model>/fixed_peak_sigma/;共有推論コードは code/inference/ |
| I-GCG | code/igcg/、モデルごとに1つのノートブック |
| LatentFusion | code/latentfusion/、モデルごとに1つのノートブック |
| RefusalCones | code/refusalcones/、モデルごとに1つのノートブック |
| SoftPrompt | code/softprompt/、Llama-3.1-8BおよびMistral-7B |
| NeuroStrike | PEVノートブック code/ours/Llama-3.1-8B/LLama31_perturbation_p76_to_p100.ipynb 内(セットアップセルは LLama31_perturbation_p1_to_p25.ipynb にもあります)および code/ours/SmolLM3-3B/run_smollm3_batched_p26_p50.ipynb;応答は results/<model>/neurostrike/ に保存されます |
code/inference/run_<model>.py はモデルごとに1ファイルです(run_qwen.py、run_smollm3.py、
run_phi4mini.py、run_mistral.py、run_llama.py、run_glm.py)。それぞれがHuggingFace Transformersでモデルを読み込み、空のシステムメッセージでチャットテンプレートを適用し、
load_model()、build_prompt()、encode_prompt() を公開し、入力埋め込みにフックを付けた手動の自己回帰生成ループを実行します。ノートブックは自分のモデル用のスクリプトをインポートし、そのフックを通じてガウスノイズを注入します。単独で実行すると、スクリプトは単一モデル用の対話型ターミナルを開きます;/verbose および /embedfile コマンドはトークンテーブルと埋め込みベクトルを表示します。デバイスと動作の切り替えは、各ファイルのヘッダーに記載されている環境変数です。LlamaスクリプトはチェックポイントがゲートされているためHugging Faceトークンが必要です;トークンは環境から読み取られ、保存されることはありません。
.txt)は、ノートブックによって書き込まれる追記専用のログです。各エントリには、
プロンプトインデックス、該当する場合はノイズレベルシグマ、実行番号、および完全な
モデル応答が記録されます。ファイル名にはプロンプト範囲(p001_to_p025 は100個のJailbreakBench有害プロンプトのうちプロンプト1から25を意味します)と実行のUTCタイムスタンプが含まれます。実時間は、プロンプトごとに20回の実行の各バッチ後、および実験の最後に書き込まれます。.xlsx、.csv)は、論文のSec. 4で定義されている、安全、不安全、または
退化のラベルを持つ応答ごとに1行を保持します。プロンプトは、その実行のいずれかが不安全とラベル付けされた場合にジェイルブレイクされたと見なされます。*_categorization* または *_p01_25 形式の名前のファイルは、同じプロンプト範囲を持つログのラベル付きバージョンです。ours/fixed_peak_sigma/)は
JBB_<model>_sigma0pXXX_..._<timestamp>.txt と命名されます;sigma0p003 はシグマ = 0.003を意味します。p001_to_p100 ファイルは、そのシグマでの完全な100プロンプト、20回実行のスイープです。SELECT_..._nNN ファイルは、ファイル名にリストされたプロンプトに対する同じシグマでのフォローアップ実行で、プロンプトごとにNN回の実行です。HIGHSIGMA を含むファイルは、Sec. 4.1で議論されているより大きなシグマでの実行です。SELECT を含むファイルは、ファイル名にリストされたプロンプトに対する追加実行で、
ジェイルブレイクするのに20回を超える実行を必要としたプロンプト用です。すべてのログのヘッダー行には、シグマ値、実行数、プロンプトID、および乱数シードが記録されます。Llama-3.1-8B/baseline/fixed_baseline.xlsx および fixed_* ラベルファイルは、手動検証後のラベルファイルであり、以前のバージョンに取って代わります。応答は、プロンプト、実行番号、応答を含むログファイルを与えられたClaude Opus 4.6によって、JailbreakBenchの審査員指示を用いて分類されました。不安全とラベル付けされたすべての応答は、その後手作業で確認されました。results/ 内のラベルファイルは検証済みのラベルです。
code/ours/<model>/ 以下の各ノートブックは、Google Colabの単一のNVIDIA A100-SXM4-80GBで実行されました。それは対応する run_<model>.py をインポートし、JailbreakBenchの有害プロンプトを読み込み、各プロンプトをモデルの入力埋め込み層に通し、完全なプロンプト埋め込みに独立したガウスノイズN(0, sigma^2)を加え、摂動された埋め込みをトランスフォーマー層に渡します。各プロンプトについて、1つのバッチで20個のノイズ行列をサンプリングし、すべての応答をログに追記します。デコードパラメータとモデルごとのシグマは、論文のSec. 4およびTab. 3に記載されており、各ノートブックの先頭で設定されています。Hugging Faceトークンは対話的に要求され、このリポジトリには保存されません。他の手法のノートブックも、対応する攻撃に置き換えて同じパターンに従います。
論文のジェイルブレイク率は、モデルを実行することなく、ラベルファイルだけから再計算できます。