transformers safetensors xlnet text-classification medical en es arxiv:2004.03329 base_model:xlnet/xlnet-large-cased base_model:finetune:xlnet/xlnet-large-cased license:cc-by-nc-nd-4.0 autotrain_compatible endpoints_compatible region:us
---
base_model:
- xlnet/xlnet-large-cased
language:
- en
- es
library_name: transformers
license: cc-by-nc-nd-4.0
metrics:
- accuracy
- f1
- precision
tags:
- medical
---

# **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