Par Bilal Sayoud – Data Scientist
Ce projet vise à classifier automatiquement des publications scientifiques biomédicales selon le type de cancer traité :
- Thyroid Cancer (2810 documents)
- Colon Cancer (2580 documents)
- Lung Cancer (2180 documents)
L’objectif est de proposer une solution NLP robuste pour aider les professionnels de santé, chercheurs ou systèmes d’information à trier efficacement la littérature médicale — un enjeu crucial dans un domaine saturé de données.
- Source : Dataset public de 7 570 publications scientifiques complètes (full-text)
- Caractéristiques :
- Textes longs (> 6 pages, ~25 000 mots/document)
- Vocabulaire hautement technique
- Classes équilibrées (~20–37 % par classe)
- Format brut : texte non structuré, encodage ISO-8859-1
💡 La longueur et la complexité des textes rendent ce dataset particulièrement exigeant pour les modèles NLP.
Le projet suit une démarche NLP structurée en 5 étapes :
- Analyse exploratoire (EDA)
- Statistiques descriptives, wordcloud, répartition des classes
- Prétraitement textuel
- Tokenization, lemmatisation (WordNet + POS tagging), suppression des stop words
- Représentation textuelle
- TF-IDF (vectorisation statistique)
- Word2Vec (embedding dense par moyenne)
- FastText (embedding robuste aux mots rares)
- Modélisation
- SVM linéaire et Random Forest comparés sur chaque représentation
- Évaluation & Visualisation
- Métriques (accuracy, F1, recall), matrices de confusion, UMAP, analyse d’erreurs
| Métrique | Valeur |
|---|---|
| Accuracy (test) | 96.4 % |
| F1-score (moyen) | > 95 % |
| Lung_Cancer recall | 100 % |
| Overfitting | Aucun (écart train/test ≈ 1.4 %) |
| Représentation | Accuracy (SVM) |
|---|---|
| TF-IDF | 96.4 % ✅ |
| FastText | 78.7 % |
| Word2Vec | 74.1 % |
Conclusion : Malgré sa simplicité, TF-IDF capte mieux les termes discriminants (ex. : "thyroidectomy", "colorectal", "adenocarcinoma") que les embeddings contextuels sur ce type de données longues et spécialisées.
# 1. Cloner le dépôt
git clone https://github.com/Bilelly/medical-text-classification.git
# 2. Installer les dépendances
pip install -r requirements.txt
# 3. Lancer Jupyter et exécuter les notebooks dans l'ordre
jupyter notebook