PERI / README.md
DavidHospinal
Fix HuggingFace Space configuration: add required YAML frontmatter to README
a9bc8bd
---
title: PERI BERT Classifier
emoji: 🤖
colorFrom: blue
colorTo: indigo
sdk: docker
app_file: app.py
pinned: false
license: apache-2.0
---
# PERI BERT Classifier
API REST para clasificación de arquetipos éticos en reflexiones sobre IA usando BERT fine-tuneado.
## 📋 Descripción
Este espacio proporciona una API FastAPI para clasificar reflexiones éticas sobre IA en 5 arquetipos PERI:
1. **Tecnócrata Optimizador** - Confía en la eficiencia de sistemas automatizados
2. **Humanista Crítico** - Prioriza el bienestar humano y cuestiona sesgos
3. **Pragmático Equilibrado** - Busca balance entre innovación y humanidad
4. **Visionario Adaptativo** - Abraza la transformación tecnológica
5. **Escéptico Conservador** - Postura cautelosa hacia la IA
## 🚀 Características
- **MC Dropout**: Uncertainty quantification para cada predicción
- **Batch Processing**: Clasificación de múltiples textos simultáneamente
- **FastAPI Docs**: Documentación interactiva automática
- **CORS Enabled**: Listo para integración desde cualquier frontend
- **Métricas detalladas**: Confidence, uncertainty, top-3 predictions
## 🔧 Endpoints
### `GET /`
Documentación interactiva Swagger UI
### `GET /health`
Health check del servicio
```json
{
"status": "healthy",
"model_loaded": true,
"device": "cuda",
"timestamp": 1234567890.123
}
```
### `GET /info`
Información del modelo
```json
{
"model_name": "bert-base-multilingual-cased (fine-tuned)",
"num_classes": 5,
"max_length": 512,
"device": "cuda",
"mc_dropout_samples": 10,
"archetypes": [...]
}
```
### `POST /predict`
Clasificar una reflexión individual
**Request:**
```json
{
"text": "La automatización mediante IA representa...",
"use_mc_dropout": true
}
```
**Response:**
```json
{
"archetype": {
"id": "TECNOCRATA_OPTIMIZADOR",
"name": "Tecnócrata Optimizador",
"description": "Confía en la eficiencia y objetividad..."
},
"confidence": 0.87,
"uncertainty": 0.23,
"top3_predictions": [
{
"archetype_id": "TECNOCRATA_OPTIMIZADOR",
"archetype_name": "Tecnócrata Optimizador",
"probability": 0.87
},
{
"archetype_id": "PRAGMATICO_EQUILIBRADO",
"archetype_name": "Pragmático Equilibrado",
"probability": 0.08
},
{
"archetype_id": "VISIONARIO_ADAPTATIVO",
"archetype_name": "Visionario Adaptativo",
"probability": 0.03
}
],
"inference_time_ms": 245.6,
"method": "bert-mc-dropout"
}
```
### `POST /predict-batch`
Clasificar múltiples reflexiones (máx 50)
**Request:**
```json
{
"texts": ["Reflexión 1...", "Reflexión 2...", "..."],
"use_mc_dropout": true
}
```
**Response:**
```json
{
"predictions": [...],
"total_inference_time_ms": 1234.5
}
```
## 🛠️ Uso desde JavaScript/TypeScript
```typescript
// Clasificar una reflexión
async function classifyReflection(text: string) {
const response = await fetch('https://your-space.hf.space/predict', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
text: text,
use_mc_dropout: true
})
});
const result = await response.json();
console.log('Arquetipo:', result.archetype.name);
console.log('Confianza:', result.confidence);
console.log('Incertidumbre:', result.uncertainty);
return result;
}
```
## 📦 Deployment en HuggingFace Space
### Paso 1: Crear Space
1. Ir a https://huggingface.co/spaces
2. Click "Create new Space"
3. Configurar:
- **Name**: `peri-bert-classifier`
- **License**: MIT
- **Space SDK**: Docker
- **Hardware**: CPU basic (o T4 small para GPU)
### Paso 2: Subir archivos
Estructura del repositorio:
```
peri-bert-classifier/
├── app.py # API FastAPI
├── requirements.txt # Dependencias Python
├── Dockerfile # Configuración Docker
├── README.md # Esta documentación
└── model/ # Modelo BERT fine-tuneado
├── config.json
├── pytorch_model.bin
├── tokenizer_config.json
└── vocab.txt
```
### Paso 3: Dockerfile
```dockerfile
FROM python:3.10-slim
WORKDIR /app
# Copiar archivos
COPY requirements.txt .
COPY app.py .
COPY model/ ./model/
# Instalar dependencias
RUN pip install --no-cache-dir -r requirements.txt
# Exponer puerto
EXPOSE 7860
# Comando de inicio
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
```
### Paso 4: Git push
```bash
# Clonar el space
git clone https://huggingface.co/spaces/YOUR_USERNAME/peri-bert-classifier
cd peri-bert-classifier
# Copiar archivos
cp app.py requirements.txt Dockerfile README.md .
cp -r ../../../models/peri-bert/best_model ./model
# Push
git add .
git commit -m "Initial deployment"
git push
```
## 🧪 Testing Local
```bash
# Instalar dependencias
pip install -r requirements.txt
# Ejecutar servidor
python app.py
# Acceder a:
# - Docs: http://localhost:7860
# - Health: http://localhost:7860/health
```
## 📊 Performance
- **Latencia (sin GPU)**: ~200-300ms por reflexión
- **Latencia (con GPU T4)**: ~50-100ms por reflexión
- **Throughput batch**: ~10 reflexiones/segundo (GPU)
- **Memoria**: ~2GB RAM + ~1GB VRAM (GPU)
## 🔒 Seguridad
- Input validation con Pydantic
- CORS configurado (ajustar origins en producción)
- Rate limiting recomendado para producción
- Longitud máxima de texto: 5000 caracteres
## 📈 Métricas del Modelo
- **Test Accuracy**: ~84%
- **MC Dropout Accuracy**: ~86%
- **Mean Uncertainty**: 0.32
- **F1-Score (macro avg)**: 0.84
## 📞 Soporte
Para issues o preguntas sobre el modelo:
- GitHub: [PERI Project](https://github.com/...)
- Paper: [Ver documentación científica]
---
**Generado con ❤️ para el proyecto PERI**
**Deep Learning Conference 2025**