Instructions to use Test-FineTuning/bert-base-uncased-finetuned-ner-prostata with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Test-FineTuning/bert-base-uncased-finetuned-ner-prostata with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("token-classification", model="Test-FineTuning/bert-base-uncased-finetuned-ner-prostata")# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForTokenClassification tokenizer = AutoTokenizer.from_pretrained("Test-FineTuning/bert-base-uncased-finetuned-ner-prostata") model = AutoModelForTokenClassification.from_pretrained("Test-FineTuning/bert-base-uncased-finetuned-ner-prostata", device_map="auto") - Notebooks
- Google Colab
- Kaggle
bert-base-uncased-finetuned-ner-prostata
Modelo de reconocimiento de entidades nombradas (NER) para textos clínicos en español sobre cáncer de próstata. Es un fine-tuning de bert-base-uncased para clasificación de tokens con esquema de etiquetado BIO.
- Fine-tuning realizado por: Carlos Andres Borja
- Modelo base:
google-bert/bert-base-uncased - Idioma: español
- Tarea: NER (token classification)
Uso educativo y de investigación. No está validado para uso clínico ni para tomar decisiones sobre pacientes.
Entidades
El modelo predice 10 tipos de entidad (esquema BIO, 21 etiquetas contando O):
| Entidad | Descripción | Ejemplo |
|---|---|---|
CANCER |
Diagnóstico / tipo de tumor | adenocarcinoma de próstata |
GLEASON |
Puntuación de Gleason | Gleason 7 (3+4) |
TNM |
Estadificación TNM | cT2c N0 M0 |
BIOMARCADOR |
Biomarcadores | PSA 12 ng/ml |
TRATAMIENTO |
Tratamientos y terapias | radioterapia externa |
MEDICAMENTO |
Fármacos | bicalutamida |
DOSIS |
Dosis y pautas | 50 mg/día |
CIRUGIA |
Procedimientos quirúrgicos | prostatectomía radical |
FECHA |
Fechas | 15/03/2023 |
EDAD |
Edad del paciente | 68 años |
Cómo usarlo
Con pipeline (recomendado)
from transformers import pipeline
ner = pipeline(
"token-classification",
model="Test-FineTuning/bert-base-uncased-finetuned-ner-prostata",
aggregation_strategy="simple", # une los sub-tokens en entidades completas
)
texto = ("Varón de 68 años con adenocarcinoma de próstata Gleason 7 (3+4), estadio cT2c N0 M0. "
"Se realiza prostatectomía radical el 15/03/2023 y posteriormente recibe bicalutamida 50 mg/día.")
for ent in ner(texto):
print(f"{ent['word']:<30} {ent['entity_group']:<12} score={ent['score']:.3f}")
Cada elemento devuelto tiene word, entity_group, score, start y end (posiciones en el texto original).
Sin aggregation_strategy se obtiene una predicción por sub-token, con prefijos B- / I-.
Con AutoModel (control manual)
import torch
from transformers import AutoTokenizer, AutoModelForTokenClassification
repo = "Test-FineTuning/bert-base-uncased-finetuned-ner-prostata"
tokenizer = AutoTokenizer.from_pretrained(repo)
model = AutoModelForTokenClassification.from_pretrained(repo)
texto = "Paciente de 72 años, biopsia con adenocarcinoma acinar Gleason 4+3=7, PSA 12 ng/ml."
inputs = tokenizer(texto, return_tensors="pt", truncation=True, max_length=512)
with torch.no_grad():
logits = model(**inputs).logits
pred_ids = logits.argmax(dim=-1)[0].tolist()
tokens = tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
for tok, pid in zip(tokens, pred_ids):
if tok not in tokenizer.all_special_tokens:
print(f"{tok:<15} {model.config.id2label[pid]}")
En Google Colab
Hay un notebook de inferencia con visualización de entidades resaltadas (mama y próstata) en el material del curso: NER_inferencia_mama_prostata_Colab.ipynb.
Datos de entrenamiento
Corpus anotado en formato .bio (token + etiqueta), proporcionado por el docente responsable del proyecto. No se publica con este modelo.
| Partición | Oraciones | Tokens |
|---|---|---|
| train | 3 106 | 67 934 |
| valid | 929 | 16 803 |
| test | 991 | 20 862 |
Limpieza aplicada: se detectaron y corrigieron a O dos etiquetas corruptas en el corpus (, en validation_cleaned.bio línea 1401 y 0 —cero— en lugar de O en testing_cleaned.bio línea 17566).
Entrenamiento
| Hiperparámetro | Valor |
|---|---|
| Modelo base | bert-base-uncased |
| Épocas | 10 |
| Learning rate | 2e-5 |
| Batch size | 8 (train y eval) |
| Weight decay | 0.01 |
| Longitud máxima | 512 tokens |
| Precisión mixta | fp16 |
| Semilla | 42 |
| Selección del modelo | mejor F1 en validación (load_best_model_at_end) → época 8 |
| Hardware | 1 × NVIDIA T4 (Google Colab), ~13 min |
Solo el primer sub-token de cada palabra recibe etiqueta; el resto y los tokens especiales se ignoran en la pérdida (-100).
Evolución en validación:
| Época | Train loss | Val loss | Precision | Recall | F1 |
|---|---|---|---|---|---|
| 1 | 0.1638 | 0.0881 | 0.868 | 0.910 | 0.888 |
| 2 | 0.0797 | 0.0537 | 0.899 | 0.941 | 0.920 |
| 3 | 0.0474 | 0.0311 | 0.963 | 0.966 | 0.965 |
| 4 | 0.0342 | 0.0294 | 0.957 | 0.968 | 0.963 |
| 5 | 0.0152 | 0.0246 | 0.972 | 0.973 | 0.973 |
| 6 | 0.0183 | 0.0209 | 0.977 | 0.975 | 0.976 |
| 7 | 0.0190 | 0.0214 | 0.982 | 0.977 | 0.980 |
| 8 | 0.0124 | 0.0225 | 0.981 | 0.981 | 0.981 |
| 9 | 0.0082 | 0.0229 | 0.983 | 0.979 | 0.981 |
| 10 | 0.0099 | 0.0212 | 0.982 | 0.979 | 0.981 |
Evaluación
Resultados en la partición test (evaluada una sola vez con el mejor modelo), métricas seqeval a nivel de entidad:
| Precision | Recall | F1 | Accuracy (token) |
|---|---|---|---|
| 0.9628 | 0.9691 | 0.9659 | 0.9935 |
Por tipo de entidad:
| Entidad | Precision | Recall | F1 | Soporte |
|---|---|---|---|---|
| BIOMARCADOR | 0.981 | 0.986 | 0.983 | 208 |
| CANCER | 0.957 | 0.967 | 0.962 | 364 |
| CIRUGIA | 0.892 | 0.892 | 0.892 | 65 |
| DOSIS | 0.912 | 0.931 | 0.921 | 189 |
| EDAD | 0.963 | 0.975 | 0.969 | 80 |
| FECHA | 0.995 | 0.993 | 0.994 | 401 |
| GLEASON | 0.912 | 0.912 | 0.912 | 160 |
| MEDICAMENTO | 0.994 | 0.994 | 0.994 | 164 |
| TNM | 0.989 | 1.000 | 0.995 | 93 |
| TRATAMIENTO | 0.964 | 0.976 | 0.970 | 250 |
| micro avg | 0.963 | 0.969 | 0.966 | 1974 |
Limitaciones y sesgos
- Modelo base en inglés.
bert-base-uncasedfue preentrenado en inglés y no distingue mayúsculas ni tildes; el vocabulario no está optimizado para español clínico, por lo que palabras médicas poco frecuentes se fragmentan en muchos sub-tokens. Un modelo base en español o biomédico podría mejorar los resultados. - Dominio estrecho. Solo cubre cáncer de próstata y las 10 entidades listadas. En otros tipos de cáncer, o con otro estilo de redacción, el rendimiento puede caer de forma notable.
- Corpus pequeño (~3 100 oraciones de entrenamiento) y, probablemente, con vocabulario y plantillas repetitivas; las métricas altas en test pueden no reflejar el rendimiento en notas clínicas de otras instituciones.
- Las entidades más difíciles fueron
CIRUGIA,GLEASONyDOSIS(F1 ≈ 0.89–0.92). - Textos largos se truncan a 512 tokens.
- No usar para diagnóstico, tratamiento ni decisiones clínicas.
Modelos relacionados
- Cáncer de mama:
Test-FineTuning/bert-base-uncased-finetuned-ner-cancer-mama
Cita
Si usas este modelo en tu trabajo, indica el nombre del repositorio, a su autor (Carlos Andres Borja, fine-tuning) y el modelo base (bert-base-uncased, Devlin et al., 2019).
- Downloads last month
- 3
Model tree for Test-FineTuning/bert-base-uncased-finetuned-ner-prostata
Base model
google-bert/bert-base-uncased