
Rimozione automatica completa della censura per modelli linguistici
Heretic è uno strumento che rimuove la censura (nota anche come "allineamento di sicurezza") dai modelli linguistici basati su transformer senza costoso post-addestramento. Combina un'implementazione avanzata dell'ablazione direzionale, nota anche come "abliteration" (Arditi et al. 2024, Lai 2025 (1, 2)), con un ottimizzatore di parametri basato su TPE alimentato da Optuna.
Questo approccio consente a Heretic di funzionare completamente in automatico. Heretic trova parametri di abliteration di alta qualità minimizzando congiuntamente il numero di rifiuti e la divergenza KL dal modello originale. Ciò produce un modello decensurato che conserva quanta più intelligenza possibile del modello originale. Usare Heretic non richiede una comprensione degli interni dei transformer. In effetti, chiunque sappia eseguire un programma da riga di comando può usare Heretic per decensurare modelli linguistici.
Heretic supporta la maggior parte dei modelli densi, inclusi molti modelli multimodali, diverse architetture MoE, e persino alcuni modelli ibridi come Qwen3.5. I modelli puramente a spazio di stato e alcune altre architetture di ricerca non sono ancora supportati out of the box.
Eseguendo in modo non supervisionato con la configurazione predefinita, Heretic può produrre modelli decensurati che rivaleggiano in qualità con le abliteration create manualmente da esperti umani:
La versione Heretic, generata senza alcuno sforzo umano, raggiunge lo stesso livello di soppressione dei rifiuti delle altre abliteration, ma con una divergenza KL molto più bassa, indicando un danno minore alle capacità del modello originale.
(Puoi riprodurre quei numeri usando la funzionalità di valutazione integrata di Heretic,
ad es. heretic --model google/gemma-3-12b-it --evaluate-model p-e-w/gemma-3-12b-it-heretic.
Nota che i valori esatti potrebbero dipendere dalla piattaforma e dall'hardware.
La tabella sopra è stata compilata usando PyTorch 2.8 su RTX 5090.)
Naturalmente, le metriche matematiche e i benchmark automatici non raccontano mai tutta la storia e non sostituiscono la valutazione umana. I modelli generati con Heretic sono stati ben accolti dagli utenti (link ed enfasi aggiunti):
"Ero scettico prima, ma ho appena scaricato GPT-OSS 20B Heretic e accidenti. Fornisce risposte lunghe e ben formattate su argomenti sensibili, usando le esatte parole non censurate che ti aspetteresti da un modello non censurato, produce tabelle in formato markdown con dettagli e quant'altro. Sembra che questa sia la versione abliterated migliore di questo modello finora..." (Link al commento)
"Heretic GPT 20b sembra essere il miglior modello non censurato che abbia mai provato. Non distrugge l'intelligenza del modello e risponde a prompt che normalmente sarebbero stati rifiutati dal modello base." (Link al commento)
"[Qwen3-4B-Instruct-2507-heretic] È stato il miglior modello abliterated non quantizzato che sono riuscito a eseguire su 16gb di vram." (Link al commento)
I modelli Heretic sono stati anche valutati indipendentemente utilizzando metriche standard come MMLU e GSM8K, e sono risultati favorevoli rispetto ai modelli prodotti da strumenti di abliteration concorrenti: 1, 2.
La comunità ha creato e pubblicato ben oltre 4000 modelli con Heretic.
Prepara un ambiente Python 3.10+ con PyTorch 2.2+ installato in modo appropriato per il tuo hardware. Quindi esegui:
pip install -U heretic-llm
heretic Qwen/Qwen3-4B-Instruct-2507
Sostituisci Qwen/Qwen3-4B-Instruct-2507 con il modello che vuoi decensurare.
[!IMPORTANT]
Sebbene PyTorch 2.2 sia la versione minima di PyTorch necessaria per Heretic, alcuni modelli e configurazioni potrebbero richiedere funzionalità presenti solo in versioni successive. Ad esempio, il caricamento di modelli quantizzati MXFP4 come gpt-oss utilizza
torch.accelerator, che è stato aggiunto in PyTorch 2.6.
[!TIP]
Heretic utilizza uv per la gestione delle dipendenze, e il repository include un file
uv.lockche fissa ogni versione dei pacchetti. Se usi già uv (e probabilmente dovresti!), puoi semplicemente clonare il repository ed eseguire Heretic conuv run heretic, che garantisce che le tue dipendenze corrispondano a quelle utilizzate dagli sviluppatori, migliorando affidabilità e sicurezza.
Il processo è completamente automatico e non richiede configurazione; tuttavia,
Heretic ha una varietà di parametri di configurazione che possono essere modificati per
un maggiore controllo. Esegui heretic --help per vedere le opzioni da riga di comando disponibili,
oppure consulta config.default.toml se preferisci usare un
file di configurazione.
All'inizio di un'esecuzione, Heretic esegue il benchmark del sistema per determinare
la dimensione del batch ottimale per sfruttare al meglio l'hardware disponibile.
Su una RTX 3090, con la configurazione predefinita, decensurare
Qwen3-4B-Instruct-2507
richiede circa 20-30 minuti. Nota che Heretic supporta la quantizzazione del modello con
bitsandbytes, che può ridurre drasticamente la quantità di VRAM necessaria per elaborare
i modelli. Imposta l'opzione quantization su bnb_4bit per abilitare la quantizzazione.
Dopo che Heretic ha terminato la decensura di un modello, ti viene data la possibilità di salvare il modello, caricarlo su Hugging Face, chattare con esso per testarne il funzionamento, eseguire benchmark standard su di esso, o qualsiasi combinazione di queste azioni.
Oltre alla sua funzione principale di rimuovere la censura del modello, Heretic fornisce
anche funzionalità progettate per supportare la ricerca nella semantica degli interni del modello
(interpretabilità). Per utilizzare queste funzionalità, devi installare Heretic con l'extra
opzionale research:
pip install -U heretic-llm[research]
Questo ti dà accesso alla seguente funzionalità:
--plot-residualsQuando eseguito con questa flag, Heretic:
Vedi il file di configurazione per le opzioni che ti permettono di controllare vari aspetti dei grafici generati.
Nota che PaCMAP è un'operazione costosa eseguita sulla CPU. Per modelli più grandi, può richiedere un'ora o più per calcolare le proiezioni per tutti gli strati.
--print-residual-geometrySe sei interessato a un'analisi quantitativa di come i vettori residui per prompt "dannosi" e "innocui" si relazionano tra loro, questa flag ti fornisce la seguente tabella, ricca di metriche che possono facilitare la comprensione dello stesso (per gemma-3-270m-it in questo caso):
┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━┓
┃ 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 = media dei vettori residui per prompt buoni
g* = mediana geometrica dei vettori residui per prompt buoni
b = media dei vettori residui per prompt cattivi
b* = mediana geometrica dei vettori residui per prompt cattivi
r = direzione di rifiuto per le medie (cioè b - g)
r* = direzione di rifiuto per le mediane geometriche (cioè b* - g*)
S(x,y) = similarità coseno di x e y
|x| = norma L2 di x
Silh = Coefficiente silhouette medio dei residui per i cluster buoni/cattivi
Heretic implementa una variante parametrizzata dell'ablazione direzionale. Per ogni componente del transformer supportato (attualmente, proiezione di output dell'attenzione e proiezione di down del MLP), identifica le matrici associate in ogni strato del transformer e le ortogonalizza rispetto alla "direzione di rifiuto" rilevante, inibendo l'espressione di quella direzione nel risultato delle moltiplicazioni con quella matrice.
Le direzioni di rifiuto vengono calcolate per ogni strato come differenza delle medie tra i residui del primo token per prompt "dannosi" e "innocui" di esempio.
Il processo di ablazione è controllato da diversi parametri ottimizzabili:
direction_index: O l'indice di una direzione di rifiuto, o il valore speciale
per layer, che indica che ogni strato deve essere ablato usando la
direzione di rifiuto associata a quello strato.max_weight, max_weight_position, min_weight e min_weight_distance:
Per ogni componente, questi parametri descrivono la forma e la posizione del
kernel del peso di ablazione sugli strati. Il diagramma seguente lo illustra:
Le principali innovazioni di Heretic rispetto ai sistemi di abliteration esistenti sono:
Sono a conoscenza delle seguenti implementazioni pubbliche delle tecniche di abliteration:
Nota che Heretic è stato scritto da zero e non riutilizza codice da nessuno di questi progetti.
Lo sviluppo di Heretic è stato informato da:
Se utilizzi Heretic per la tua ricerca, ti preghiamo di citarlo utilizzando la seguente voce 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]) + contributori
Questo programma è software libero: puoi ridistribuirlo e/o modificarlo sotto i termini della GNU Affero General Public License come pubblicata dalla Free Software Foundation, versione 3 della Licenza, o (a tua scelta) qualsiasi versione successiva.
Questo programma è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedere la GNU Affero General Public License per maggiori dettagli.
Dovresti aver ricevuto una copia della GNU Affero General Public License insieme a questo programma. In caso contrario, vedere https://www.gnu.org/licenses/.
Contribuendo a questo progetto, accetti di rilasciare i tuoi contributi sotto la stessa licenza.
| Modello | Rifiuti per prompt "dannosi" | Divergenza KL dal modello originale per prompt "innocui" |
|---|
| google/gemma-3-12b-it (originale) | 97/100 | 0 (per definizione) |
| 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 (nostro) | 3/100 | 0.16 |