Este repositorio contiene mi trabajo de reproducción del paper publicado en Big Data and Cognitive Computing (BDCC):
"ICD prediction from MIMIC-III clinical text using pre-trained ClinicalBERT and NLP deep learning models achieving state-of-the-art"
El código original del paper estaba incompleto y no funcionaba correctamente, por lo que tuve que recrear todo el pipeline desde cero para reproducir los resultados reportados.
Los modelos entrenados reproducen exitosamente los resultados similares a los paper original:
| Modelo | Mi F1-Score | Paper Original |
|---|---|---|
| BERT (Bio_ClinicalBERT) | ~87% | 87% |
| BiLSTM | ~74% | 78% |
| LSTM | ~67% | 81% |
| SimpleRNN | ~17% | 25% |
BDCC-reproduction/
├── README.md # Este archivo
├── notebooks/ # Jupyter notebooks del proceso
│ ├── Working_on_Mimiic3_data_reproduction.ipynb # Pipeline principal
│ ├── diag10_finale_jumbito.ipynb # Entrenamiento Top-10
│ ├── diag50_finale_jumbito.ipynb # Entrenamiento Top-50
│ └── data_leakage_analysis_jumbito.ipynb # Análisis de data leakage
├── scripts/ # Scripts de entrenamiento
│ ├── train_top10_models.py # 4 modelos para Top-10 ICD-10
│ └── train_top50_models.py # 4 modelos para Top-50 ICD-10
├── data/ # Datasets generados
│ ├── df_final_top10.csv # Dataset Top-10 códigos ICD-10
│ ├── df_final_top50.csv # Dataset Top-50 códigos ICD-10
│ ├── label_mapping_top10.json # Mapeo de etiquetas
│ └── label_mapping_top50.json
└── docker/ # Configuración Docker
├── Dockerfile.amd # GPU AMD (ROCm 6.3.3)
├── Dockerfile.nvidia # GPU NVIDIA (CUDA 12.1)
├── requirements_amd.txt
└── requirements_nvidia.txt
- Fuente: MIMIC-III (notas clínicas de alta hospitalaria)
- Conversión: ICD-9 → ICD-10 usando GEM (General Equivalence Mappings)
- Selección: Top-10 y Top-50 códigos ICD-10 más frecuentes
- SimpleRNN: Red neuronal recurrente básica
- LSTM: Long Short-Term Memory
- BiLSTM: LSTM Bidireccional
- BERT: Bio_ClinicalBERT (
emilyalsentzer/Bio_ClinicalBERT)
Durante el análisis descubrí que el paper original incluye los nombres de enfermedades en el texto de entrada (técnicamente "data leakage"). Esta metodología fue replicada para obtener resultados comparables.
cd docker
docker build -f Dockerfile.amd -t bdcc-amd .
docker run --device=/dev/kfd --device=/dev/dri --group-add video --rm bdcc-amdcd docker
docker build -f Dockerfile.nvidia -t bdcc-nvidia .
docker run --gpus all --rm bdcc-nvidia# Instalar dependencias
pip install -r docker/requirements_nvidia.txt
# Entrenar modelos Top-10
python scripts/train_top10_models.py
# Entrenar modelos Top-50
python scripts/train_top50_models.py- Python 3.9+
- PyTorch 2.x
- Transformers (Hugging Face)
- pandas, scikit-learn
- Acceso a MIMIC-III (para regenerar datasets)
-
MIMIC-III: Los datasets fueron generados a partir de MIMIC-III. Se requiere acceso autorizado a PhysioNet para regenerarlos.
-
Datasets incluidos: Los archivos CSV en
data/son los datasets preprocesados listos para entrenar. -
Reproducibilidad: Todo el código está autocontenido y no depende de repositorios externos.
- Autor: Ignacio R
- Fecha: Diciembre 2025
- Contexto: Reproducción como parte del proyecto PLN Clínico con AMD
Para preguntas sobre esta reproducción: GitHub Issues
Este trabajo es una reproducción independiente con fines académicos y de investigación.