
Suppression entièrement automatique de la censure pour les modèles de langage
Heretic est un outil qui supprime la censure (également appelée « alignement de sécurité ») des modèles de langage basés sur les transformeurs, sans post-entraînement coûteux. Il combine une implémentation avancée de l'ablation directionnelle, également connue sous le nom d'« abliteration » (Arditi et al. 2024, Lai 2025 (1, 2)), avec un optimiseur de paramètres basé sur TPE, propulsé par Optuna.
Cette approche permet à Heretic de fonctionner de manière entièrement automatique. Heretic trouve des paramètres d'abliteration de haute qualité en minimisant conjointement le nombre de refus et la divergence KL par rapport au modèle d'origine. Il en résulte un modèle décensuré qui conserve autant que possible l'intelligence du modèle d'origine. Utiliser Heretic ne nécessite pas de comprendre les mécanismes internes des transformeurs. En fait, toute personne sachant exécuter un programme en ligne de commande peut utiliser Heretic pour décensurer des modèles de langage.
Heretic prend en charge la plupart des modèles denses, y compris de nombreux modèles multimodaux, plusieurs architectures MoE différentes, et même certains modèles hybrides comme Qwen3.5. Les modèles purement à espace d'état et certaines autres architectures de recherche ne sont pas encore pris en charge nativement.
Exécuté sans supervision avec la configuration par défaut, Heretic peut produire des modèles décensurés qui rivalisent avec la qualité des abliterations créées manuellement par des experts humains :
La version Heretic, générée sans aucun effort humain, atteint le même
niveau de suppression des refus que les autres abliterations, mais avec une divergence KL beaucoup plus
faible, ce qui indique moins de dommages aux capacités du modèle d'origine.
(Vous pouvez reproduire ces chiffres à l'aide de la fonctionnalité d'évaluation intégrée de Heretic,
par ex. heretic --model google/gemma-3-12b-it --evaluate-model p-e-w/gemma-3-12b-it-heretic.
Notez que les valeurs exactes peuvent dépendre de la plateforme et du matériel.
Le tableau ci-dessus a été compilé avec PyTorch 2.8 sur une RTX 5090.)
Bien entendu, les métriques mathématiques et les benchmarks automatisés ne disent jamais tout, et ne remplacent pas une évaluation humaine. Les modèles générés avec Heretic ont été bien accueillis par les utilisateurs (liens et emphase ajoutés) :
« J'étais sceptique avant, mais je viens de télécharger le modèle GPT-OSS 20B Heretic et putain. Il fournit des réponses longues et correctement formatées sur des sujets sensibles, en utilisant exactement les mots non censurés que l'on attend d'un modèle non censuré, il produit des tableaux au format markdown avec des détails et tout. On dirait que c'est la meilleure version abliterée de ce modèle jusqu'à présent... » (Lien vers le commentaire)
« Heretic GPT 20b semble être le meilleur modèle non censuré que j'aie essayé jusqu'à présent. Il ne détruit pas l'intelligence du modèle et il répond à des invites qui seraient normalement rejetées par le modèle de base. » (Lien vers le commentaire)
« [Qwen3-4B-Instruct-2507-heretic] C'est le meilleur modèle abliteré non quantifié que j'ai pu exécuter sur 16 Go de VRAM. » (Lien vers le commentaire)
Les modèles Heretic ont également été évalués indépendamment à l'aide de métriques standard comme MMLU et GSM8K, et se sont révélés comparables, voire supérieurs, aux modèles produits par d'autres outils d'abliteration concurrents : 1, 2.
La communauté a créé et publié plus de 4000 modèles avec Heretic.
Préparez un environnement Python 3.10+ avec PyTorch 2.2+ installé de manière appropriée pour votre matériel. Puis exécutez :
pip install -U heretic-llm
heretic Qwen/Qwen3-4B-Instruct-2507
Remplacez Qwen/Qwen3-4B-Instruct-2507 par le modèle que vous souhaitez décensurer.
[!IMPORTANT]
Bien que PyTorch 2.2 soit la version minimale de PyTorch requise pour que Heretic fonctionne, certains modèles et configurations peuvent nécessiter des fonctionnalités présentes uniquement dans des versions ultérieures. Par exemple, le chargement de modèles quantifiés MXFP4 comme gpt-oss utilise
torch.accelerator, qui a été ajouté dans PyTorch 2.6.
[!TIP]
Heretic utilise uv pour la gestion des dépendances, et le dépôt inclut un fichier
uv.locképinglant chaque version de paquet. Si vous utilisez déjà uv (et vous devriez probablement le faire !), vous pouvez simplement cloner le dépôt et exécuter Heretic avecuv run heretic, ce qui garantit que vos dépendances correspondent à celles utilisées par les développeurs, améliorant ainsi la fiabilité et la sécurité.
Le processus est entièrement automatique et ne nécessite aucune configuration ; toutefois,
Heretic dispose d'une variété de paramètres de configuration qui peuvent être modifiés pour
un contrôle plus fin. Exécutez heretic --help pour voir les options disponibles en ligne de commande,
ou consultez config.default.toml si vous préférez utiliser
un fichier de configuration.
Au début d'une exécution du programme, Heretic évalue les performances du système pour déterminer
la taille de lot optimale afin de tirer le meilleur parti du matériel disponible.
Sur une RTX 3090, avec la configuration par défaut, la décensure de
Qwen3-4B-Instruct-2507
prend environ 20 à 30 minutes. Notez que Heretic prend en charge la quantification des modèles avec
bitsandbytes, ce qui peut réduire considérablement la quantité de VRAM nécessaire pour traiter
les modèles. Définissez l'option quantization sur bnb_4bit pour activer la quantification.
Une fois que Heretic a fini de décensurer un modèle, vous avez la possibilité de enregistrer le modèle, de le téléverser sur Hugging Face, de discuter avec lui pour tester son bon fonctionnement, d'exécuter des benchmarks standard sur celui-ci, ou toute combinaison de ces actions.
En plus de sa fonction principale de suppression de la censure des modèles, Heretic fournit
également des fonctionnalités conçues pour soutenir la recherche sur la sémantique des mécanismes internes des modèles
(interprétabilité). Pour utiliser ces fonctionnalités, vous devez installer Heretic avec
l'extension optionnelle research :
pip install -U 'heretic-llm[research]'
Cela vous donne accès aux fonctionnalités suivantes :
--plot-residualsLorsqu'il est exécuté avec cet indicateur, Heretic :
Consultez le fichier de configuration pour les options qui vous permettent de contrôler divers aspects des tracés générés.
Notez que PaCMAP est une opération coûteuse effectuée sur le CPU. Pour les modèles plus volumineux, le calcul des projections pour toutes les couches peut prendre une heure ou plus.
--print-residual-geometrySi vous êtes intéressé par une analyse quantitative de la façon dont les vecteurs résiduels pour les invites « nuisibles » et « inoffensives » sont liés entre eux, cet indicateur vous donne le tableau suivant, rempli de métriques qui peuvent faciliter la compréhension de cette relation (pour gemma-3-270m-it dans ce cas) :
┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━┓
┃ 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 = moyenne des vecteurs résiduels pour les invites « bonnes »
g* = médiane géométrique des vecteurs résiduels pour les invites « bonnes »
b = moyenne des vecteurs résiduels pour les invites « mauvaises »
b* = médiane géométrique des vecteurs résiduels pour les invites « mauvaises »
r = direction résiduelle pour les moyennes (c.-à-d. b - g)
r* = direction résiduelle pour les médianes géométriques (c.-à-d. b* - g*)
S(x,y) = similarité cosinus de x et y
|x| = norme L2 de x
Silh = coefficient de silhouette moyen des résidus pour les clusters « bons »/« mauvais »
Heretic implémente une variante paramétrée de l'ablation directionnelle. Pour chaque composant de transformeur pris en charge (actuellement, la projection de sortie de l'attention et la projection de descente du MLP), il identifie les matrices associées dans chaque couche de transformeur, et les orthogonalise par rapport à la « direction résiduelle » pertinente, inhibant l'expression de cette direction dans le résultat des multiplications avec cette matrice.
Les directions résiduelles sont calculées pour chaque couche comme une différence des moyennes entre les résidus du premier jeton pour les invites d'exemple « nuisibles » et « inoffensives ».
Le processus d'ablation est contrôlé par plusieurs paramètres optimisables :
direction_index : soit l'indice d'une direction résiduelle, soit la valeur spéciale
per layer, indiquant que chaque couche doit être ablatée en utilisant la
direction résiduelle associée à cette couche.max_weight, max_weight_position, min_weight et min_weight_distance :
Pour chaque composant, ces paramètres décrivent la forme et la position du
noyau de pondération d'ablation sur les couches. Le schéma suivant illustre cela :
Les principales innovations de Heretic par rapport aux systèmes d'abliteration existants sont :
Je connais les implémentations publiquement disponibles suivantes des techniques d'abliteration :
Notez que Heretic a été écrit à partir de zéro et ne réutilise pas le code d'aucun de ces projets.
Le développement de Heretic a été éclairé par :
Si vous utilisez Heretic pour vos recherches, veuillez le citer en utilisant l'entrée BibTeX suivante :
@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]) + contributeurs
Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la GNU Affero General Public License telle que publiée par la Free Software Foundation, soit la version 3 de la Licence, soit (à votre choix) toute version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de QUALITÉ MARCHANDE ou d'ADÉQUATION À UN USAGE PARTICULIER. Voir la GNU Affero General Public License pour plus de détails.
Vous devriez avoir reçu une copie de la GNU Affero General Public License avec ce programme. Si ce n'est pas le cas, voir https://www.gnu.org/licenses/.
En contribuant à ce projet, vous acceptez de publier vos contributions sous la même licence.
| Modèle | Refus pour les invites « nuisibles » | Divergence KL par rapport au modèle d'origine pour les invites « inoffensives » |
|---|
| google/gemma-3-12b-it (original) | 97/100 | 0 (par définition) |
| 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 (le nôtre) | 3/100 | 0.16 |