|
--- |
|
library_name: transformers |
|
tags: |
|
- medical |
|
license: cc-by-nc-nd-4.0 |
|
language: |
|
- en |
|
- es |
|
metrics: |
|
- accuracy |
|
- f1 |
|
- precision |
|
base_model: |
|
- xlnet/xlnet-large-cased |
|
--- |
|
|
|
# **MediFlow** |
|
|
|
MediFlow se trata de un modelo inicializado con [xlnet-large-cased](https://huggingface.co/xlnet/xlnet-large-cased) y adaptado con preguntas y especialidades |
|
para poder realizar Derivaciones Automatizadas en Servicios Hospitalarios. El dataset se puede encontrar de manera pública y se trata de [MedDialog EN](https://arxiv.org/abs/2004.03329). |
|
|
|
Este modelo toma como input una descripción, en inglés, proveída por el paciente y devuelve las siguientes especialidades (`model.config.label2id`): Cardiology, Traumatology, Mental Health y Pneumology. |
|
Se puede encontrar más información del modelo [aquí](https://huggingface.co/digitalhealth-healthyliving/MediFlow/resolve/main/MediFlow%20Adaptaci%C3%B3n%20de%20un%20Modelo%20de%20Lenguaje%20para%20Triaje%20Automatizado%20a%20diferentes%20especialidades.pdf). |
|
|
|
Para el entrenamiento de este modelo hemos seguidos los estándares de la librería [transformers](https://github.com/huggingface/transformers) y se ha utilizado una |
|
NVIDIA P100. Además, ha sido entrenado con un batch-size de 4, un learning rate de 2e-5, X epochs y un weigth decay de 0.015, loggeando los resultados cada 100 iteraciones. |
|
|
|
## **Utilización** |
|
Mediante el `pipeline` de Hugging Face: |
|
```python |
|
from transformers import pipeline |
|
|
|
model_id = "digitalhealth-healthyliving/MediFlow" |
|
pipe = pipeline("text-classification", model_id) |
|
|
|
text = "I have pain in the back" |
|
result = pipe(text) |
|
|
|
print(result) |
|
``` |
|
|
|
Mediante `AutoModelForSequenceClassification` y `AutoTokenizer`: |
|
```python |
|
from transformers import AutoModelForSequenceClassification, AutoTokenizer |
|
|
|
model_id = "digitalhealth-healthyliving/MediFlow" |
|
tokenizer = AutoTokenizer.from_pretrained(model_id) |
|
model = AutoModelForSequenceClassification.from_pretrained(model_id) |
|
|
|
text = "I have pain in the back" |
|
inputs = tokenizer(text, return_tensors = "pt") |
|
logits = model(**inputs) |
|
|
|
print(f"The predicted class is {model.id2label[logits.argmax()]}") |
|
|
|
print(result) |
|
``` |
|
|
|
## **Evaluación** |
|
- **Accuracy** : 89,3% |
|
- **F1**: 89,4% |
|
- **Precision**: 90% |
|
|
|
|
|
#### Training Hyperparameters |
|
|
|
- **learning_rate**: 2e-5 |
|
- **batch_size**: 4 |
|
- **num_train_epochs**: 3 |
|
- **weight_decay**: 0.015 |
|
- **optimizer**: AdamW |
|
- **test_size**: 0.2 |
|
- **logging_steps**: 100 |