--- language: es license: cc-by-4.0 library_name: transformers pipeline_tag: text-classification tags: - bert - beto - spanish - transparency - classification - clasificacion - solicitudes - transparencia base_model: - dccuchile/bert-base-spanish-wwm-cased --- # 📄 beto-base-solicitudes-transparencia-finetuned Modelo de clasificación automática de solicitudes de transparencia, basado en BETO, ajustado finamente (fine-tuning) para el dominio de solicitudes de transparencia ingresadas a organismos públicos en Chile. El modelo permite categorizar textos de solicitudes de transparencia en distintas clases temáticas, facilitando su análisis, priorización y derivación automática. # 🧠 Modelo base Modelo: BETO (Spanish BERT) Arquitectura: Transformer encoder Idioma: Español Tipo de tarea: Clasificación de texto (Sequence Classification) # ⚙️ Entrenamiento El entrenamiento se realizó utilizando el framework Transformers, basado en PyTorch. El proceso se ejecutó en un entorno de cómputo en la nube mediante la capa gratuita de Google Colab, empleando aceleración por GPU NVIDIA T4. Hiperparámetros utilizados - Epochs: 10 - Learning rate: 1e-5 - Weight decay: 0.01 - Warmup ratio: 0.06 - Batch size: 16 # 🏷️ Etiquetas (labels) El modelo utiliza un esquema de etiquetas configurable. Las etiquetas disponibles y su mapeo pueden consultarse directamente desde: ``` model.config.id2label ``` # 🚀 Ejemplo de uso A continuación se muestra un ejemplo simple de inferencia utilizando transformers y torch: ``` from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch import torch.nn.functional as F import re ``` ## Ruta al modelo (local o descargado desde Hugging Face) ``` MODEL_PATH = "junaebchile/beto-base-solicitudes-transparencia-finetuned" ``` ## Selección automática de dispositivo ``` device = torch.device("cuda" if torch.cuda.is_available() else "cpu") ``` ## Cargar modelo y tokenizer ``` model = AutoModelForSequenceClassification.from_pretrained(MODEL_PATH).to(device) tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH) model.eval() ``` ## Helpers ``` def limpiar_espacios(texto: str) -> str: texto = texto.replace("\t", " ") texto = texto.replace("\r\n", " ") texto = texto.replace("\n", " ") texto = re.sub(r"\s+", " ", texto) return texto.strip() def pct(x): return f"{x * 100:.2f}%" ``` ## Ejemplo de solicitudes ``` solicitudes = [ "Solicito informe que de cuenta de las raciones de alimentos (desayuno y almuerzo), " "Programa de Alimentación Escolar para el año 2019, solicitado por el colegio Cordillera" "de la comuna de Pirque, desagregado por cursos desde Prekínder a Cuarto Medio." ] with torch.no_grad(): inputs = tokenizer( solicitudes, padding=True, truncation=True, return_tensors="pt" ).to(device) outputs = model(**inputs) logits = outputs.logits probs = F.softmax(logits, dim=1) # Mapas id <-> label id2label = model.config.id2label # Mostrar resultados for texto, p in zip(solicitudes, probs): p = p.cpu() top_id = int(torch.argmax(p)) top_label = id2label[top_id] top_conf = p[top_id].item() print("Texto:") print(texto) print(f"\nCategoría predicha: {top_label}") print(f"Confianza: {pct(top_conf)}") print("\nProbabilidades por clase:") for idx in torch.argsort(p, descending=True): print(f"- {id2label[int(idx)]}: {pct(p[idx].item())}") ``` ## 📦 Requisitos - Python ≥ 3.8 - torch - transformers ## Instalación rápida: ``` pip install torch transformers ``` ## ⚠️ Notas El modelo fue entrenado para uso institucional y apoyo a la gestión, no para reemplazar decisiones administrativas. Los resultados deben ser interpretados como asistencia automatizada.