---
license: mit
base_model: HuggingFaceTB/SmolLM2-135M-Instruct
library_name: peft
tags:
- smollm2
- lora
- qlora
- sft
- instruction-tuning
- legal-ai
- rgpd
- gdpr
- knowledge-distillation
- academic-project
- data-protection
- privacy
- spanish
- fine-tuned
- transformers
- trl
- llm
- eu-regulation
language:
- es
- en
pipeline_tag: text-generation
datasets:
- umsa-v1/dataset_parafraseado_grupo1
model-index:
- name: smollm2_rgpd_final
results: []
widget:
- text: "¿Cuáles son los derechos de los interesados según el RGPD?"
example_title: "Derechos RGPD"
- text: "¿Qué es el derecho al olvido?"
example_title: "Derecho al Olvido"
- text: "Explica el principio de minimización de datos"
example_title: "Minimización de Datos"
- text: "¿Cuándo se puede transferir datos personales fuera de la UE?"
example_title: "Transferencias Internacionales"
---
## 👥 Equipo
Este proyecto fue desarrollado por el **Grupo 1**, conformado por:
| Integrante |
|-----------|
| 🎓 **Chipana Wariste, Ronald Humberto** |
| 🎓 **Mamani Huanca, Noemi Marisol** |
| 🎓 **Mamani Mena, Luz Alizon** |
| 🎓 **Oyardo Acuña, Roni Edwin** |
| 🎓 **Ordoñez Marca, Marco Vladimir** |
| 🎓 **Quino Jiménez, Víctor Daniel** |
| 🎓 **Soto Palli, Ever Alcides** |
---
## 🎓 Créditos Académicos
### Programa Académico
**Maestría en Inteligencia Artificial y Data Science para la Transformación de Negocios**
- 🏛️ **Institución**: Postgrado de Informática
- 📚 **Módulo**: Modelamiento de Datos II
- 👨🏫 **Docente**: Prof. Anvi Alex Eponon
### Objetivos de Aprendizaje Cumplidos
- ✅ Implementación de Knowledge Distillation
- ✅ Aplicación de técnicas LoRA/QLoRA
- ✅ Fine-tuning de modelos especializados
- ✅ Evaluación comparativa de arquitecturas (SmolLM2 vs Qwen2.5)
- ✅ Procesamiento de datasets legales complejos
- ✅ Optimización de recursos computacionales
- ✅ Desarrollo de pipelines de entrenamiento reproducibles
---
# ⚖️ SmolLM2 RGPD Expert | Fine-tuned Legal AI Model
[](LICENSE)
[](https://huggingface.co/)
[](https://www.python.org/)
[](https://github.com/huggingface/transformers)
*Student Model - Knowledge Distillation Pipeline for GDPR Legal AI*
**Grupo 1** | Modelamiento de Datos II | Postgrado de Informática
---
## 🎯 Descripción
**smollm2_rgpd_final** es un modelo de lenguaje fine-tuned específicamente para asistencia legal en materia de protección de datos personales según el **REGLAMENTO (UE) 2016/679 DEL PARLAMENTO EUROPEO Y DEL CONSEJO** (RGPD/GDPR).
Este proyecto forma parte del trabajo académico desarrollado en el programa de **Maestría en Inteligencia Artificial y Data Science para la Transformación de Negocios**, donde se exploraron técnicas avanzadas de fine-tuning para adaptar modelos de lenguaje pequeños a dominios legales especializados.
### 🎓 Contexto del Proyecto
El modelo fue desarrollado como parte del módulo **Modelamiento de Datos II**, bajo la supervisión del **Prof. Anvi Alex Eponon**, en el **Postgrado de Informática**.
### 📜 Base Legal
El entrenamiento se basó en el texto completo del:
- **Reglamento (UE) 2016/679** – Reglamento General de Protección de Datos
- Adoptado el 27 de abril de 2016
- Relativo a la protección de personas físicas en el tratamiento de datos personales
- Derogación de la Directiva 95/46/CE
---
## 🏗️ Arquitectura del Proyecto
Este modelo representa el **Student Model** en un pipeline de **Knowledge Distillation** desarrollado por Grupo 1.
### Pipeline de Destilación
```
┌─────────────────────────────────────────┐
│ Teacher Model (Qwen2.5-0.5B-Instruct) │
│ Fine-tuned with LoRA │
└──────────────────┬──────────────────────┘
│ Knowledge Transfer
│ (SVOMPT Method)
▼
┌─────────────────────────────────────────┐
│ Student Model (SmolLM2-135M-Instruct) │
│ This Repository - Grupo 1 │
└─────────────────────────────────────────┘
```
**Teacher Model**: `Qwen/Qwen2.5-0.5B-Instruct` (fine-tuned with LoRA)
**Student Model**: `HuggingFaceTB/SmolLM2-135M-Instruct` (este repositorio)
### Beneficios del Diseño
- ✅ Anclaje específico al dominio legal
- ✅ Respuestas técnicas en español
- ✅ Reducción de alucinaciones
- ✅ Razonamiento legal consistente
---
## ✨ Características
- 🤖 **Modelo Base**: HuggingFace SmolLM2-135M-Instruct
- 🎓 **Teacher Model**: Qwen2.5-0.5B-Instruct (fine-tuned)
- 🔧 **Técnica**: LoRA/QLoRA (Low-Rank Adaptation) para fine-tuning eficiente
- 📊 **Especialización**: Reglamento General de Protección de Datos (RGPD/GDPR)
- 🧠 **Método**: Knowledge Distillation con SVOMPT
- 💡 **Aplicaciones**:
- Consultas sobre derechos de protección de datos
- Interpretación de artículos del RGPD
- Asesoramiento sobre cumplimiento normativo
- Generación de políticas de privacidad
- Análisis de casos de tratamiento de datos
- Descomposición de preguntas legales complejas
---
## 📊 Dataset
### Dataset Utilizado
**Nombre**: `umsa-v1/dataset_parafraseado_grupo1`
**Ubicación**: Hugging Face Hub
**Tipo**: Datos parafraseados y especializados en RGPD
### Formatos Soportados
El modelo soporta datos de entrenamiento en formato **JSONL** con dos estructuras:
#### 1️⃣ Formato Chat (Conversacional)
```json
{
"messages": [
{"role": "user", "content": "¿Cuáles son los principios del RGPD?"},
{"role": "assistant", "content": "Los principios del RGPD incluyen..."}
]
}
```
#### 2️⃣ Formato Question/Answer (Q&A)
```json
{
"question": "¿Qué es el derecho al olvido?",
"answer": "El derecho al olvido, establecido en el Artículo 17..."
}
```
---
## 🚀 Instalación y Uso
### Requisitos Previos
```bash
pip install transformers torch peft trl bitsandbytes accelerate datasets
```
### Quick Start - Inferencia Básica
```python
from transformers import pipeline
# Inicializar el modelo
generator = pipeline(
"text-generation",
model="smollm2_rgpd_final",
device="cuda" # o "cpu" si no tienes GPU
)
# Hacer una consulta sobre RGPD
question = "¿Cuáles son los derechos de los interesados según el RGPD?"
output = generator(
[{"role": "user", "content": question}],
max_new_tokens=256,
return_full_text=False
)[0]
print(output["generated_text"])
```
### Uso Avanzado - Con Configuración Personalizada
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Cargar modelo y tokenizador
model_name = "smollm2_rgpd_final"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16,
device_map="auto"
)
# Preparar el prompt
messages = [
{"role": "user", "content": "Explica el principio de minimización de datos del RGPD"}
]
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device)
# Generar respuesta
outputs = model.generate(
input_ids,
max_new_tokens=200,
temperature=0.7,
top_p=0.9,
do_sample=True
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)
```
### Carga con Adaptadores LoRA
```python
from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM, AutoTokenizer
# Cargar configuración
config = PeftConfig.from_pretrained("smollm2_rgpd_final")
base_model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path)
model = PeftModel.from_pretrained(base_model, "smollm2_rgpd_final")
# Fusionar adaptadores para inferencia más rápida
model = model.merge_and_unload()
```
---
## ⚙️ Estrategia de Entrenamiento
El modelo soporta tres estrategias de fine-tuning:
### 1️⃣ Full Fine-Tuning
Entrenamiento completo de todos los parámetros del modelo.
### 2️⃣ LoRA Fine-Tuning
Entrenamiento eficiente usando Low-Rank Adaptation.
### 3️⃣ QLoRA (Quantized LoRA)
Cuantización de 4-bits + LoRA para máxima eficiencia de memoria.
### Stack Tecnológico
| Componente | Función |
|-----------|---------|
| **TRL** | `SFTTrainer` + `SFTConfig` para Supervised Fine-Tuning |
| **PEFT** | Implementación de LoRA |
| **BitsAndBytes** | Cuantización para QLoRA |
| **Accelerate** | Entrenamiento distribuido y optimización |
| **Transformers** | Framework base de HuggingFace |
---
## 🔬 Configuración LoRA
### Parámetros por Defecto
| Parámetro | Valor | Descripción |
|-----------|-------|-------------|
| **r** | 16 | Rango de la matriz de adaptación |
| **lora_alpha** | 32 | Factor de escala para los pesos LoRA |
| **lora_dropout** | 0.05 | Dropout para regularización |
| **bias** | none | No entrenar parámetros de bias |
| **task_type** | CAUSAL_LM | Tipo de tarea (modelado de lenguaje causal) |
### Módulos Objetivo (Target Modules)
Por defecto, LoRA se aplica a:
- `q_proj` (Query projection)
- `v_proj` (Value projection)
Estos módulos son críticos en el mecanismo de atención y permiten adaptación eficiente.
---
## 🏋️ Configuración de Entrenamiento
### Hiperparámetros por Defecto
| Parámetro | Valor | Descripción |
|-----------|-------|-------------|
| **Epochs** | 6 | Número de épocas de entrenamiento |
| **Batch Size** | 4 | Tamaño de batch por dispositivo |
| **Gradient Accumulation** | 4 | Pasos de acumulación de gradientes |
| **Effective Batch Size** | 16 | Batch size efectivo (4 × 4) |
| **Learning Rate** | 2e-4 | Tasa de aprendizaje |
| **Warmup Steps** | 100 | Pasos de calentamiento |
| **Max Sequence Length** | 512 | Longitud máxima de secuencia |
| **Optimizer** | adamw_torch | Optimizador AdamW |
| **Scheduler** | cosine | Scheduler de tasa de aprendizaje |
| **Precision** | bf16 | Precisión de entrenamiento (bfloat16) |
### Comando de Entrenamiento Ejemplo
```python
from trl import SFTTrainer, SFTConfig
from peft import LoraConfig
# Configuración LoRA
lora_config = LoraConfig(
r=16,
lora_alpha=32,
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM",
target_modules=["q_proj", "v_proj"]
)
# Configuración de entrenamiento
training_args = SFTConfig(
output_dir="./results",
num_train_epochs=6,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=2e-4,
warmup_steps=100,
max_seq_length=512,
optim="adamw_torch",
lr_scheduler_type="cosine",
bf16=True,
logging_steps=10,
save_strategy="epoch"
)
# Inicializar trainer
trainer = SFTTrainer(
model=model,
args=training_args,
train_dataset=dataset,
peft_config=lora_config
)
# Entrenar
trainer.train()
```
---
## 💻 Requisitos del Sistema
### Dependencias Principales
```bash
pip install transformers datasets accelerate peft bitsandbytes trl torch
```
### Versiones Recomendadas
```yaml
transformers: ≥ 4.36.0
datasets: ≥ 2.14.0
accelerate: ≥ 0.24.0
peft: ≥ 0.7.0
bitsandbytes: ≥ 0.41.0
trl: ≥ 0.7.0
torch: ≥ 2.0.0
```
### Requisitos de Hardware
- **GPU**: Recomendado NVIDIA con soporte CUDA
- **RAM**: Mínimo 16GB
- **VRAM**:
- Full Fine-tuning: ~8GB
- LoRA: ~4GB
- QLoRA: ~2GB
---
## 💼 Ejemplos de Uso
### Ejemplo 1: Consulta sobre Derechos del RGPD
```python
question = "¿Qué es el derecho al olvido según el RGPD?"
# Respuesta basada en Artículo 17 del RGPD
```
**Salida esperada**: Explicación detallada del derecho de supresión, condiciones y excepciones.
### Ejemplo 2: Principios de Protección de Datos
```python
question = "Explica el principio de minimización de datos"
# Información del Artículo 5.1.c del RGPD
```
**Salida esperada**: Descripción del principio, aplicación práctica y ejemplos.
### Ejemplo 3: Transferencias Internacionales
```python
question = "¿Cuándo se puede transferir datos personales fuera de la UE?"
# Respuesta basada en Capítulo V del RGPD
```
**Salida esperada**: Mecanismos legales, cláusulas contractuales tipo, y excepciones.
### Ejemplo 4: Descomposición de Preguntas Complejas
```python
question = "¿Cómo debe una empresa implementar el principio de privacy by design?"
# El modelo descompondrá la pregunta en aspectos técnicos, organizativos y legales
```
---
## 📊 Métricas y Evaluación
### Evaluación Cualitativa
El modelo fue evaluado en:
- ✅ Precisión en la interpretación de artículos del RGPD
- ✅ Coherencia en respuestas técnicas
- ✅ Capacidad de descomposición de preguntas complejas
- ✅ Consistencia terminológica legal
### Comparación con Baseline
| Modelo | Parámetros | Perplexity | Coherencia Legal |
|--------|-----------|-----------|------------------|
| SmolLM2-135M (base) | 135M | - | Baja |
| Qwen2.5-0.5B (teacher) | 500M | - | Alta |
| **SmolLM2-135M (fine-tuned)** | **135M** | **-** | **Media-Alta** |
---
## 📄 Licencia
Este proyecto está bajo licencia **MIT**. Ver el archivo `LICENSE` para más detalles.
---
## 📚 Referencias
### Documentación Legal
- [Reglamento (UE) 2016/679 - RGPD](https://eur-lex.europa.eu/eli/reg/2016/679/oj)
- [EUR-Lex - Portal de Legislación de la UE](https://eur-lex.europa.eu/)
### Documentación Técnica
- [HuggingFace Transformers](https://huggingface.co/docs/transformers)
- [TRL Documentation](https://huggingface.co/docs/trl)
- [PEFT Documentation](https://huggingface.co/docs/peft)
- [BitsAndBytes](https://github.com/TimDettmers/bitsandbytes)
- [SmolLM2 Model Card](https://huggingface.co/HuggingFaceTB/SmolLM2-135M-Instruct)
- [Qwen2.5 Model Card](https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct)
### Dataset
- [umsa-v1/dataset_parafraseado_grupo1](https://huggingface.co/datasets/umsa-v1/dataset_parafraseado_grupo1)
---
## 🤝 Contribuciones
Las contribuciones son bienvenidas. Por favor:
1. Fork el proyecto
2. Crea una rama para tu feature (`git checkout -b feature/MejorLegal`)
3. Commit tus cambios (`git commit -m 'Add: Nueva funcionalidad legal'`)
4. Push a la rama (`git push origin feature/MejorLegal`)
5. Abre un Pull Request
---
## ⚠️ Disclaimer
Este modelo es un proyecto académico con fines educativos y de investigación. No debe ser utilizado como sustituto de asesoramiento legal profesional. Para consultas legales vinculantes, siempre consulte con un abogado especializado en protección de datos.
---
**Desarrollado con ❤️ por el Grupo 1**
*Maestría en IA y Data Science para la Transformación de Negocios*
🛡️ **Protegiendo datos, transformando negocios** 🚀
---
*Knowledge Distillation • Legal AI • RGPD/GDPR • LoRA/QLoRA*