fmr693/llm-abliteration-toolkit

Mechanistic interpretability toolkit for LLM refusal: locate and ablate the linear refusal direction (Arditi et al. 2024) without retraining. Diff-Means, whitened SVD, COSMIC layer selection, reversible steering vectors. PyTorch + Transformers.

Python

0

2 commits

updated Aug 31, 2026

See the code

README

LLM Abliteration Toolkit

Interpretabilidad mecanicista de LLMs: localizar y neutralizar la dirección de rechazo de un modelo alineado, sin reentrenarlo.

Implementación propia —educativa y funcional— de la abliteración de modelos de lenguaje, basada en el paper de Arditi et al. (2024) "Refusal in Language Models Is Mediated by a Single Direction" y en las técnicas de 2025 del proyecto OBLITERATUS de Elder Plinius. Todo el código está reescrito desde cero con fines de investigación y aprendizaje.


La idea en una frase

Cuando un LLM alineado (con RLHF, DPO o Constitutional AI) se niega a responder, ese "no" no está repartido por todo el modelo: Arditi et al. demostraron que se codifica como una única dirección lineal en el residual stream del transformer. Si se identifica esa dirección y se proyecta fuera de los pesos, el modelo pierde la capacidad de activar ese comportamiento — sin reentrenar y con una degradación mínima del lenguaje.

$$W_{\text{nuevo}} = W - (W \cdot \hat{d}),\hat{d}$$

Esta herramienta implementa ese procedimiento completo, desde la extracción de la dirección hasta la medición del resultado.


¿Para qué sirve? (contexto científico)

La abliteración es una técnica de interpretabilidad mecanicista — el estudio de cómo un modelo representa internamente sus comportamientos. Sus usos legítimos, todos sobre modelos de pesos abiertos que uno controla:

  • Investigación de alineamiento e interpretabilidad — estudiar la geometría del rechazo: ¿es realmente una sola dirección? ¿un subespacio? ¿cambia entre arquitecturas? Es el mismo tipo de investigación que sustenta el trabajo de seguridad en laboratorios de IA.
  • Red-teaming y evaluación de robustez — generar un baseline sin restricciones para medir cuán sólidas son las guardas de seguridad de un modelo tras el entrenamiento (en la línea de datasets como HarmBench o AdvBench).
  • Corrección de sobre-rechazos (over-refusals) — los modelos alineados a veces rechazan tareas legítimas (consultas médicas, de ciberseguridad, ficción). Localizar la dirección permite estudiar y mitigar esos falsos positivos.
  • Docencia — el script educativo enseña, paso a paso y sobre datos sintéticos, la matemática de proyección ortogonal, Diff-Means y SVD que subyace a toda esta familia de técnicas.

Nota ética. Este proyecto implementa matemática pública descrita en papers revisados por pares, y solo opera sobre modelos open-weight donde ya tienes los pesos. Un modelo abliterado no conserva garantías de seguridad; su uso aquí es de investigación académica y comprensión técnica. La transparencia sobre cómo funcionan estos mecanismos es, en sí misma, parte del trabajo de seguridad en IA.


Dos scripts, dos niveles

abliteracion_educativa.py — la teoría, sin GPU

Demostración didáctica en 7 partes sobre datos sintéticos. No descarga ningún modelo, solo necesita torch, y explica con comentarios cada paso: proyección ortogonal, extracción de la dirección con Diff-Means, subespacios con SVD y la operación equivalente sobre pesos reales.

pip install torch
python abliteracion_educativa.py

abliterar_real.py — la práctica, sobre un modelo real

Aplica la abliteración a Qwen/Qwen2-0.5B-Instruct (~1 GB, corre en CPU) con las técnicas de 2025, y mide el resultado con dos métricas complementarias: perplejidad (¿se degradó el lenguaje?) y tasa de rechazo (¿funcionó?).

pip install torch transformers accelerate
python abliterar_real.py --solo-probar        # comportamiento base, sin tocar nada
python abliterar_real.py --medir-negativa     # abliteración completa + métricas
python abliterar_real.py --steering           # modo reversible (steering vectors, no toca pesos)

Técnicas implementadas

El pipeline sigue las etapas de OBLITERATUS (SUMMON → PROBE → DISTILL → EXCISE → VERIFY → REBIRTH) e integra ocho técnicas, cada una resolviendo un problema concreto:

TécnicaQué aportaFuente
Diff-MeansLa dirección de rechazo como diferencia de activaciones medias (dañino − inocuo)Arditi et al. 2024
SVD multi-direcciónCaptura el rechazo cuando está distribuido en un subespacio, no en una sola dirección
Whitened SVDNormaliza por varianza de fondo antes del SVD → aísla la señal de rechazo, no la de mayor varianza generalOBLITERATUS 2025
COSMIC (selección de capa)Elige la capa por menor similitud coseno entre grupos, no por mayor norma → máxima separación direccionalarXiv:2506.00085, ACL 2025
Proyección de biasesProyecta también los vectores de sesgo (no solo los pesos): una laguna histórica de otras herramientasOBLITERATUS
Norm preservation multi-direcciónRestaura las normas una sola vez tras proyectar las K direcciones → evita re-introducir señalOBLITERATUS
Escalas por componenteAgresividad diferenciada MLP vs atención (las capas MLP son más frágiles)OBLITERATUS 2025
Steering vectorsAlternativa reversible: suma α·d al residual stream vía hooks, sin modificar pesosTurner et al. 2023 · Rimsky et al. 2024

Cada método es seleccionable por CLI (--metodo, --n-direcciones, --scale-mlp, --regularizacion, --winsorizar, --steering…); la referencia completa de argumentos está más abajo.


Interpretación de resultados

Perplejidad:    12.3 → 13.1  (+6.5%)   aceptable
Tasa de rechazo: 73%  → 8%
IndicadorRango sanoSeñal de alerta
Cambio de perplejidad< +10 %> +20 %: el lenguaje se ha degradado
Tasa de rechazo posterior< 10 %> 40 %: la abliteración fue ineficaz

Si la perplejidad se dispara, el toolkit permite retroceder: --scale-mlp 0.7 (MLP conservador), --regularizacion 0.3 (abliteración parcial) o --n-direcciones 2 (menos direcciones).


Referencia de argumentos (abliterar_real.py)

ArgumentoDefaultDescripción
--solo-probarSolo muestra las salidas del modelo, no lo modifica
--metodoadvancedbasic / cosmic / whitened / advanced
--regularizacion0.00.0 = abliteración total · 1.0 = ninguna
--n-direcciones4Número de direcciones SVD a proyectar
--scale-mlp1.0Agresividad en capas MLP (<1 = más conservador)
--scale-atencion1.0Agresividad en capas de atención
--winsorizarRecorta outliers (p5–p95) antes del SVD
--steeringSteering vectors reversibles en lugar de modificar pesos
--medir-negativaMide el % de prompts que siguen generando rechazos
--guardarGuarda el modelo resultante en disco

Base teórica

TrabajoContribución
Arditi et al. (2024)Demostración original: el rechazo es una dirección lineal única
COSMIC (2025)Selección de capa por similitud coseno (ACL 2025)
Turner et al. (2023) · Rimsky et al. (2024)Steering vectors: activación de conceptos en inferencia
OBLITERATUS — Elder PliniusPipeline de producción y técnicas de 2025 en las que se inspira este toolkit

Proyecto de investigación en interpretabilidad de LLMs · 2026 · Licencia MIT.

abliteration
ai-alignment
ai-safety
interpretability
llm
mechanistic-interpretability
nlp
python
pytorch
red-teaming
refusal-direction
transformers

Contributors

fmr693

2 commits

fmr693/llm-abliteration-toolkit

Mechanistic interpretability toolkit for LLM refusal: locate and ablate the linear refusal direction (Arditi et al. 2024) without retraining. Diff-Means, whitened SVD, COSMIC layer selection, reversible steering vectors. PyTorch + Transformers.

Python

0

2 commits

updated Aug 31, 2026

See the code

README

LLM Abliteration Toolkit

Interpretabilidad mecanicista de LLMs: localizar y neutralizar la dirección de rechazo de un modelo alineado, sin reentrenarlo.

Implementación propia —educativa y funcional— de la abliteración de modelos de lenguaje, basada en el paper de Arditi et al. (2024) "Refusal in Language Models Is Mediated by a Single Direction" y en las técnicas de 2025 del proyecto OBLITERATUS de Elder Plinius. Todo el código está reescrito desde cero con fines de investigación y aprendizaje.


La idea en una frase

Cuando un LLM alineado (con RLHF, DPO o Constitutional AI) se niega a responder, ese "no" no está repartido por todo el modelo: Arditi et al. demostraron que se codifica como una única dirección lineal en el residual stream del transformer. Si se identifica esa dirección y se proyecta fuera de los pesos, el modelo pierde la capacidad de activar ese comportamiento — sin reentrenar y con una degradación mínima del lenguaje.

$$W_{\text{nuevo}} = W - (W \cdot \hat{d}),\hat{d}$$

Esta herramienta implementa ese procedimiento completo, desde la extracción de la dirección hasta la medición del resultado.


¿Para qué sirve? (contexto científico)

La abliteración es una técnica de interpretabilidad mecanicista — el estudio de cómo un modelo representa internamente sus comportamientos. Sus usos legítimos, todos sobre modelos de pesos abiertos que uno controla:

  • Investigación de alineamiento e interpretabilidad — estudiar la geometría del rechazo: ¿es realmente una sola dirección? ¿un subespacio? ¿cambia entre arquitecturas? Es el mismo tipo de investigación que sustenta el trabajo de seguridad en laboratorios de IA.
  • Red-teaming y evaluación de robustez — generar un baseline sin restricciones para medir cuán sólidas son las guardas de seguridad de un modelo tras el entrenamiento (en la línea de datasets como HarmBench o AdvBench).
  • Corrección de sobre-rechazos (over-refusals) — los modelos alineados a veces rechazan tareas legítimas (consultas médicas, de ciberseguridad, ficción). Localizar la dirección permite estudiar y mitigar esos falsos positivos.
  • Docencia — el script educativo enseña, paso a paso y sobre datos sintéticos, la matemática de proyección ortogonal, Diff-Means y SVD que subyace a toda esta familia de técnicas.

Nota ética. Este proyecto implementa matemática pública descrita en papers revisados por pares, y solo opera sobre modelos open-weight donde ya tienes los pesos. Un modelo abliterado no conserva garantías de seguridad; su uso aquí es de investigación académica y comprensión técnica. La transparencia sobre cómo funcionan estos mecanismos es, en sí misma, parte del trabajo de seguridad en IA.


Dos scripts, dos niveles

abliteracion_educativa.py — la teoría, sin GPU

Demostración didáctica en 7 partes sobre datos sintéticos. No descarga ningún modelo, solo necesita torch, y explica con comentarios cada paso: proyección ortogonal, extracción de la dirección con Diff-Means, subespacios con SVD y la operación equivalente sobre pesos reales.

pip install torch
python abliteracion_educativa.py

abliterar_real.py — la práctica, sobre un modelo real

Aplica la abliteración a Qwen/Qwen2-0.5B-Instruct (~1 GB, corre en CPU) con las técnicas de 2025, y mide el resultado con dos métricas complementarias: perplejidad (¿se degradó el lenguaje?) y tasa de rechazo (¿funcionó?).

pip install torch transformers accelerate
python abliterar_real.py --solo-probar        # comportamiento base, sin tocar nada
python abliterar_real.py --medir-negativa     # abliteración completa + métricas
python abliterar_real.py --steering           # modo reversible (steering vectors, no toca pesos)

Técnicas implementadas

El pipeline sigue las etapas de OBLITERATUS (SUMMON → PROBE → DISTILL → EXCISE → VERIFY → REBIRTH) e integra ocho técnicas, cada una resolviendo un problema concreto:

TécnicaQué aportaFuente
Diff-MeansLa dirección de rechazo como diferencia de activaciones medias (dañino − inocuo)Arditi et al. 2024
SVD multi-direcciónCaptura el rechazo cuando está distribuido en un subespacio, no en una sola dirección
Whitened SVDNormaliza por varianza de fondo antes del SVD → aísla la señal de rechazo, no la de mayor varianza generalOBLITERATUS 2025
COSMIC (selección de capa)Elige la capa por menor similitud coseno entre grupos, no por mayor norma → máxima separación direccionalarXiv:2506.00085, ACL 2025
Proyección de biasesProyecta también los vectores de sesgo (no solo los pesos): una laguna histórica de otras herramientasOBLITERATUS
Norm preservation multi-direcciónRestaura las normas una sola vez tras proyectar las K direcciones → evita re-introducir señalOBLITERATUS
Escalas por componenteAgresividad diferenciada MLP vs atención (las capas MLP son más frágiles)OBLITERATUS 2025
Steering vectorsAlternativa reversible: suma α·d al residual stream vía hooks, sin modificar pesosTurner et al. 2023 · Rimsky et al. 2024

Cada método es seleccionable por CLI (--metodo, --n-direcciones, --scale-mlp, --regularizacion, --winsorizar, --steering…); la referencia completa de argumentos está más abajo.


Interpretación de resultados

Perplejidad:    12.3 → 13.1  (+6.5%)   aceptable
Tasa de rechazo: 73%  → 8%
IndicadorRango sanoSeñal de alerta
Cambio de perplejidad< +10 %> +20 %: el lenguaje se ha degradado
Tasa de rechazo posterior< 10 %> 40 %: la abliteración fue ineficaz

Si la perplejidad se dispara, el toolkit permite retroceder: --scale-mlp 0.7 (MLP conservador), --regularizacion 0.3 (abliteración parcial) o --n-direcciones 2 (menos direcciones).


Referencia de argumentos (abliterar_real.py)

ArgumentoDefaultDescripción
--solo-probarSolo muestra las salidas del modelo, no lo modifica
--metodoadvancedbasic / cosmic / whitened / advanced
--regularizacion0.00.0 = abliteración total · 1.0 = ninguna
--n-direcciones4Número de direcciones SVD a proyectar
--scale-mlp1.0Agresividad en capas MLP (<1 = más conservador)
--scale-atencion1.0Agresividad en capas de atención
--winsorizarRecorta outliers (p5–p95) antes del SVD
--steeringSteering vectors reversibles en lugar de modificar pesos
--medir-negativaMide el % de prompts que siguen generando rechazos
--guardarGuarda el modelo resultante en disco

Base teórica

TrabajoContribución
Arditi et al. (2024)Demostración original: el rechazo es una dirección lineal única
COSMIC (2025)Selección de capa por similitud coseno (ACL 2025)
Turner et al. (2023) · Rimsky et al. (2024)Steering vectors: activación de conceptos en inferencia
OBLITERATUS — Elder PliniusPipeline de producción y técnicas de 2025 en las que se inspira este toolkit

Proyecto de investigación en interpretabilidad de LLMs · 2026 · Licencia MIT.

abliteration
ai-alignment
ai-safety
interpretability
llm
mechanistic-interpretability
nlp
python
pytorch
red-teaming
refusal-direction
transformers

Contributors

fmr693

2 commits

Languages

Python

100.0%