
Codice, log delle risposte ed etichette per il paper Jailbreaking Open-Weight LLMs via Random Embedding Perturbations
Codice e dati per il paper Jailbreaking Open-Weight LLMs via Random Embedding Perturbations.
Scritto dalle straordinarie persone del Dipartimento di Informatica Teorica dell'Università della California, Santa Cruz.
Questo lavoro ha contributi significativi da parte di Scott Sirri, del Prof. Vaggos Chatziafratis, del Prof. C. Seshadhri e miei.
Il repository contiene ogni risposta dei modelli generata per il paper, l'etichetta safe / unsafe /
degenerate di ciascuna risposta, i notebook Colab che le hanno prodotte e gli script di inferenza
importati dai notebook. Questo copre l'attacco Perturbed Embedding Vector (PEV) e gli altri
cinque metodi di jailbreak confrontati nel paper. Tutti i tassi di jailbreak e i tempi di
esecuzione nel paper sono calcolati dai file in results/.
code/
inference/ run_<model>.py: caricamento del modello, costruzione del prompt e il ciclo
di generazione manuale che ogni notebook PEV importa
ours/<model>/ notebook PEV per un modello
ours/<model>/fixed_peak_sigma/
notebook per le esecuzioni a peak sigma fisso (GLM-4-9B, Phi-4-mini,
Qwen2.5-1.5B); i loro log sono in results/<model>/ours/fixed_peak_sigma/
igcg/ I-GCG, un notebook per modello
latentfusion/ LatentFusion, un notebook per modello
refusalcones/ RefusalCones, un notebook per modello
softprompt/ notebook SoftPrompt (Llama-3.1-8B e Mistral-7B)
figures/ notebook che disegna le figure del paper
results/<model>/
baseline/ risposte dirette ai prompt non perturbati (log .txt) e le loro
etichette (.xlsx / .csv); queste forniscono il tasso di jailbreak di baseline
ours/raw_responses/ log delle risposte PEV dagli sweep di sigma, suddivisi per intervallo di prompt
ours/classified/ etichette per quelle risposte, suddivise allo stesso modo
ours/fixed_peak_sigma/ esecuzioni PEV al peak sigma fisso del modello (GLM-4-9B, Phi-4-mini,
Qwen2.5-1.5B): lo sweep completo da 100 prompt e le ri-esecuzioni SELECT
igcg/ latentfusion/ neurostrike/ refusalcones/ softprompt/
risposte (.txt) ed etichette (.xlsx) per gli altri metodi
Modelli: Qwen2.5-1.5B, SmolLM3-3B, Phi-4-mini, Mistral-7B-Instruct, Llama-3.1-8B,
GLM-4-9B, le varianti chat instruction-tuned nominate nella Sez. 4 del paper.
Dove si trova il codice di ciascun metodo:
| Metodo | Posizione |
|---|---|
| PEV | code/ours/<model>/; esecuzioni a peak sigma fisso in code/ours/<model>/fixed_peak_sigma/; codice di inferenza condiviso in code/inference/ |
| I-GCG | code/igcg/, un notebook per modello |
| LatentFusion | code/latentfusion/, un notebook per modello |
| RefusalCones | code/refusalcones/, un notebook per modello |
| SoftPrompt | code/softprompt/, Llama-3.1-8B e Mistral-7B |
| NeuroStrike | all'interno dei notebook PEV code/ours/Llama-3.1-8B/LLama31_perturbation_p76_to_p100.ipynb (cella di setup anche in LLama31_perturbation_p1_to_p25.ipynb) e code/ours/SmolLM3-3B/run_smollm3_batched_p26_p50.ipynb; le risposte vanno in results/<model>/neurostrike/ |
code/inference/run_<model>.py è un file per modello (run_qwen.py, run_smollm3.py,
run_phi4mini.py, run_mistral.py, run_llama.py, run_glm.py). Ognuno carica il modello con
HuggingFace Transformers, applica il template di chat con un messaggio di sistema vuoto, espone
load_model(), build_prompt() e encode_prompt(), ed esegue un ciclo di generazione
autoregressiva manuale con un hook sugli embedding di input. I notebook importano lo script per il
loro modello e iniettano il rumore gaussiano tramite quell'hook. Eseguito da solo, uno script apre un
terminale interattivo per un singolo modello; i comandi /verbose e /embedfile stampano tabelle
di token e vettori di embedding. I parametri di device e di comportamento sono variabili d'ambiente
documentate nell'intestazione di ciascun file. Lo script Llama necessita di un token Hugging Face
perché il checkpoint è gated; il token viene letto dall'ambiente e non viene mai memorizzato.
.txt) sono log append-only scritti dai notebook. Ogni voce registra
l'indice del prompt, il livello di rumore sigma dove applicabile, il numero di esecuzione e la
risposta completa del modello. I nomi dei file riportano l'intervallo di prompt (p001_to_p025
significa prompt da 1 a 25 dei 100 prompt dannosi di JailbreakBench) e il timestamp UTC
dell'esecuzione. Il tempo di esecuzione è scritto dopo ogni batch di 20 esecuzioni per prompt e
alla fine dell'esperimento..xlsx, .csv) contengono una riga per risposta con la sua etichetta,
safe, unsafe o degenerate, come definito nella Sez. 4 del paper. Un prompt è considerato
jailbroken se una qualsiasi delle sue esecuzioni è etichettata unsafe. I file denominati
*_categorization* o in stile *_p01_25 sono le versioni etichettate del log con lo stesso
intervallo di prompt.ours/fixed_peak_sigma/) sono denominate
JBB_<model>_sigma0pXXX_..._<timestamp>.txt; sigma0p003 significa sigma = 0.003. Il file
p001_to_p100 è lo sweep completo da 100 prompt e 20 esecuzioni a quel sigma. I file
SELECT_..._nNN sono esecuzioni successive allo stesso sigma sui prompt elencati nel
nome del file, con NN esecuzioni per prompt.HIGHSIGMA sono le esecuzioni a sigma maggiore discusse nella Sez. 4.1.SELECT sono esecuzioni aggiuntive sui prompt elencati nel nome del file, per
i prompt che hanno richiesto più di 20 esecuzioni per il jailbreak. La riga di intestazione di
ogni log registra i valori di sigma, il numero di esecuzioni, gli id dei prompt e il seed casuale.Llama-3.1-8B/baseline/fixed_baseline.xlsx e i file di etichette fixed_* sono i file di
etichette dopo la verifica manuale e sostituiscono le versioni precedenti.Le risposte sono state classificate da Claude Opus 4.6 con le istruzioni del giudice di
JailbreakBench, fornendo il file di log con il prompt, il numero di esecuzione e la risposta. Ogni
risposta etichettata unsafe è stata poi verificata manualmente. I file di etichette in results/
sono le etichette verificate.
Ogni notebook sotto code/ours/<model>/ è stato eseguito su una singola NVIDIA A100-SXM4-80GB in
Google Colab. Importa il corrispondente run_<model>.py, carica i prompt dannosi di
JailbreakBench, mappa ogni prompt attraverso il layer di embedding di input del modello, aggiunge
rumore gaussiano indipendente N(0, sigma^2) all'embedding completo del prompt e passa l'embedding
perturbato ai layer del transformer. Per ogni prompt campiona 20 matrici di rumore in un unico
batch e aggiunge ogni risposta al log. I parametri di decoding e il sigma per modello sono elencati
nella Sez. 4 e nella Tab. 3 del paper e impostati all'inizio di ogni notebook. Il token Hugging
Face viene richiesto in modo interattivo e non è memorizzato in questo repository. I notebook per
gli altri metodi seguono lo stesso schema con il corrispondente attacco sostituito.
I tassi di jailbreak nel paper possono essere ricalcolati dai soli file di etichette, senza eseguire alcun modello.