--- language: es license: cc-by-4.0 library_name: transformers pipeline_tag: token-classification base_model: dccuchile/bert-base-spanish-wwm-cased tags: - token-classification - ner - named-entity-recognition - spanish - español - biomedical - clinical - medical - oncology - prostate-cancer - cancer-de-prostata - beto metrics: - f1 - precision - recall widget: - text: "Paciente masculino de 72 años con adenocarcinoma de próstata, Gleason 3+3 y PSA de 9.9 ng/dL. Se inicia tratamiento con radioterapia y bicalutamida 50 mg diarios." example_title: "Caso clínico de próstata" - text: "Varón de 68 años con cáncer de próstata estadio T2N0M0, PSA 12.4. Prostatectomía radical en marzo de 2023." example_title: "Estadificación y cirugía" model-index: - name: beto-prostata-ner results: - task: type: token-classification name: Named Entity Recognition metrics: - type: f1 value: 0.9757 name: F1 (micro, seqeval) - type: precision value: 0.9732 name: Precision - type: recall value: 0.9781 name: Recall --- # BETO fine-tuned para NER de cáncer de próstata (español) Modelo de **Reconocimiento de Entidades Nombradas (NER)** que extrae información clínica de textos en **español** sobre **cáncer de próstata**. Es un fine-tuning de [**BETO**](https://huggingface.co/dccuchile/bert-base-spanish-wwm-cased) (BERT entrenado desde cero en español) para clasificación de tokens en formato **BIO** con 21 etiquetas. > **F1 en test: 0.976** (seqeval, micro) · Precision 0.973 · Recall 0.978 · Accuracy 0.995 ## 🎯 Para qué sirve Detecta y clasifica, palabra por palabra, **10 tipos de entidades clínicas** en informes y notas médicas de oncología prostática: | Entidad | Qué captura | Ejemplo | |---|---|---| | `EDAD` | Edad del paciente | *72 años* | | `CANCER` | Tipo/diagnóstico de cáncer | *adenocarcinoma de próstata* | | `GLEASON` | Escala de Gleason | *Gleason 3+3* | | `BIOMARCADOR` | Biomarcadores (PSA, etc.) | *PSA de 9.9 ng/dL* | | `TNM` | Estadificación TNM | *T2N0M0* | | `TRATAMIENTO` | Tratamientos | *radioterapia* | | `MEDICAMENTO` | Fármacos | *bicalutamida* | | `DOSIS` | Dosis | *50 mg diarios* | | `CIRUGIA` | Procedimientos quirúrgicos | *prostatectomía radical* | | `FECHA` | Fechas | *marzo de 2023* | Cada entidad se etiqueta en esquema **BIO** (`B-` inicio, `I-` continuación, `O` fuera), para 21 etiquetas en total. ## 🚀 Uso rápido ```python from transformers import pipeline ner = pipeline("token-classification", model="ralzate/beto-prostata-ner", aggregation_strategy="simple") texto = ("Paciente masculino de 72 años con adenocarcinoma de próstata, " "Gleason 3+3 y PSA de 9.9 ng/dL. Se inicia radioterapia y bicalutamida 50 mg.") for e in ner(texto): print(f"{e['entity_group']:14s} {e['score']*100:5.1f}% {e['word']}") ``` Salida esperada (entidades como `EDAD`, `CANCER`, `GLEASON`, `BIOMARCADOR`, `TRATAMIENTO`, `MEDICAMENTO`, `DOSIS`). ## 📊 Resultados (conjunto de test, seqeval) Barrido de *batch size* con 6 épocas y *early stopping*: | batch size | Precision | Recall | F1 | |---|---|---|---| | **8** (recomendado) | 0.9732 | 0.9781 | **0.9757** | | 16 | 0.9627 | 0.9705 | 0.9666 | | 32 | 0.9488 | 0.9603 | 0.9545 | Este repositorio publica la **mejor configuración (batch size 8)**. El F1 baja levemente al aumentar el lote porque, con 6 épocas, los lotes pequeños dan más pasos de optimización. ### Comparación con XLM-RoBERTa En el mismo dataset, **BETO supera a XLM-RoBERTa-base** (multilingüe) en todo el barrido (F1 0.955–0.976 vs 0.850–0.936). En NER clínico en español, un encoder **nativo en español** y compacto rinde mejor que un multilingüe más grande: la especialización lingüística pesa más que el tamaño. ## 🧠 Detalles de entrenamiento | | | |---|---| | **Modelo base** | `dccuchile/bert-base-spanish-wwm-cased` (BETO, ~110M parámetros) | | **Tarea** | Token Classification (NER), 21 etiquetas BIO | | **Dominio** | Texto clínico de cáncer de próstata en español | | **Épocas** | 6 (con *early stopping*, paciencia 2, métrica F1) | | **Learning rate** | 2e-5 | | **Batch size** | 8 (este checkpoint) | | **Longitud máxima** | 128 subtokens | | **Optimizador** | AdamW, weight decay 0.01, warmup 0.1 | | **Métrica** | seqeval (precision/recall/F1 a nivel de entidad) | | **Hardware** | Apple M1 Pro (MPS), entrenamiento local | | **Alineación** | etiqueta en el primer subtoken de cada palabra; resto a `-100` | ## ⚠️ Limitaciones - Entrenado en un **dominio específico** (cáncer de próstata en español); fuera de ese dominio el rendimiento puede caer. - El conjunto de datos es de tamaño moderado; entidades poco frecuentes pueden tener menor recall. - No sustituye el criterio clínico profesional. Pensado como apoyo a la extracción de información, no para decisiones médicas autónomas. - Hereda los posibles sesgos de BETO y del corpus clínico de entrenamiento. ## 🏷️ Etiquetas ``` O B-EDAD, I-EDAD, B-CANCER, I-CANCER, B-GLEASON, I-GLEASON, B-BIOMARCADOR, I-BIOMARCADOR, B-TNM, I-TNM, B-TRATAMIENTO, I-TRATAMIENTO, B-MEDICAMENTO, I-MEDICAMENTO, B-DOSIS, I-DOSIS, B-CIRUGIA, I-CIRUGIA, B-FECHA, I-FECHA ``` ## 📚 Cita Si usas este modelo, cita también a BETO: ```bibtex @inproceedings{canete2020beto, title={Spanish Pre-Trained BERT Model and Evaluation Data}, author={Cañete, José and Chaperon, Gabriel and Fuentes, Rodrigo and Ho, Jou-Hui and Kang, Hojin and Pérez, Jorge}, booktitle={PML4DC at ICLR 2020}, year={2020} } ``` --- *Modelo afinado y publicado como parte de un proyecto de PLN en español (clasificación y NER con Transformers). Reproducible en hardware modesto (Apple Silicon) mediante fine-tuning completo para BETO y LoRA para modelos grandes.*