
Suppression entièrement automatique de la censure pour les modèles de langage
Heretic est un outil qui supprime la censure (alias « alignment de sécurité ») des modèles de langage basés sur transformer 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 complètement 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 transformers. 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 state-space 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 dont la qualité rivalise avec les 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, indiquant moins de dommages aux capacités du modèle d'origine. (Vous pouvez reproduire ces chiffres en utilisant la fonctionnalité d'évaluation intégrée de Heretic, par exemple 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 un RTX 5090.)
Bien sûr, les métriques mathématiques et les benchmarks automatisés ne racontent jamais toute l'histoire et ne remplacent pas l'é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, purée. Il donne des réponses longues et bien formatées sur des sujets sensibles, en utilisant exactement les mots non censurés que l'on attend d'un modèle non censuré, produit des tableaux en 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 répond aux requêtes qui seraient normalement rejetées par le modèle de base. » (Lien vers le commentaire)
« [ Qwen3-4B-Instruct-2507-heretic ] a été le meilleur modèle abliteré non quantifié que j'aie pu faire tourner 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 avérés comparables favorablement aux modèles produits par d'autres outils d'abliteration : 1, 2.
La communauté a créé et publié bien 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. Exécutez ensuite :
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 nécessaire pour qu'Heretic fonctionne, certains modèles et configurations peuvent nécessiter des fonctionnalités uniquement disponibles 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 pas de configuration ; cependant, Heretic dispose de divers paramètres de configuration qui peuvent être modifiés pour un contrôle plus poussé. Exécutez heretic --help pour voir les options de ligne de commande disponibles, ou consultez config.default.toml si vous préférez utiliser un fichier de configuration.
Au début d'une exécution, Heretic évalue le système pour déterminer la taille de lot optimale afin de tirer le meilleur parti du matériel disponible. Sur un RTX 3090, avec la configuration par défaut, la décensuration de Qwen3-4B-Instruct-2507 prend environ 20 à 30 minutes. Notez qu'Heretic prend en charge la quantification de 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 qu'Heretic a terminé la décensuration d'un modèle, vous avez la possibilité de sauvegarder le modèle, de le télécharger sur Hugging Face, de discuter avec lui pour tester son fonctionnement, d'exécuter des benchmarks standard, ou toute combinaison de ces actions.
En plus de sa fonction principale de suppression de la censure des modèles, Heretic propose é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'option supplémentaire research :
pip install -U heretic-llm[research]
Cela vous donne accès aux fonctionnalités suivantes :
--plot-residualsLorsqu'il est exécuté avec ce drapeau, Heretic va :
Voir le fichier de configuration pour les options qui vous permettent de contrôler divers aspects des graphiques générés.
Notez que PaCMAP est une opération coûteuse effectuée sur le CPU. Pour les grands modèles, 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 requêtes « nuisibles » et « inoffensives » se rapportent les uns aux autres, ce drapeau vous donne le tableau suivant, rempli de métriques qui peuvent faciliter la compréhension (pour gemma-3-270m-it dans ce cas) :
┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━┓
┃ Couche ┃ 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 bonnes requêtes
g* = médiane géométrique des vecteurs résiduels pour les bonnes requêtes
b = moyenne des vecteurs résiduels pour les mauvaises requêtes
b* = médiane géométrique des vecteurs résiduels pour les mauvaises requêtes
r = direction de refus pour les moyennes (c.-à-d. b - g)
r* = direction de refus pour les médianes géométriques (c.-à-d. b* - g*)
S(x,y) = similarité cosinus entre x et y
|x| = norme L2 de x
Silh = coefficient de silhouette moyen des résidus pour les clusters bon/mauvais
Heretic implémente une variante paramétrée de l'ablation directionnelle. Pour chaque composant de transformer pris en charge (actuellement, la projection de sortie de l'attention et la projection descendante du MLP), il identifie les matrices associées dans chaque couche du transformer, et les orthogonalise par rapport à la « direction de refus » pertinente, inhibant l'expression de cette direction dans le résultat des multiplications avec cette matrice.
Les directions de refus sont calculées pour chaque couche comme une différence des moyennes entre les résidus du premier token pour les requêtes « nuisibles » et « inoffensives ».
Le processus d'ablation est contrôlé par plusieurs paramètres optimisables :
direction_index : Soit l'indice d'une direction de refus, soit la valeur spéciale per layer, indiquant que chaque couche doit être ablée en utilisant la direction de refus 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 poids d'ablation sur les couches. Le diagramme suivant illustre cela :
Les principales innovations d'Heretic par rapport aux systèmes d'abliteration existants sont :
Je connais les implémentations publiques suivantes des techniques d'abliteration :
Notez qu'Heretic a été écrit à partir de zéro et ne réutilise pas de code provenant de ces projets.
Le développement d'Heretic a été informé 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 discrétion) 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 COMMERCIALISATION 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. Sinon, consultez 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 requêtes « nuisibles » | Divergence KL par rapport au modèle d'origine pour les requêtes « 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 |