Systeme Intelligent de Suggestion de Tags pour Stack Overflow
Un systeme de machine learning alimente par le NLP qui suggere automatiquement des tags pertinents pour les questions Stack Overflow, atteignant 78% de Precision@5 grace a une architecture multi-modeles.
Notice Version Vitrine Ce repository contient une version anonymisee de la solution livree a Stack Overflow Inc. Les configurations de production, les poids de modeles proprietaires et les implementations specifiques au client ont ete retires pour respecter les exigences de confidentialite (NDA). Le code a ete refactorise pour une presentation portfolio tout en preservant l'architecture et la methodologie de base.
| Periode | Activite | Repository |
|---|---|---|
| 2023 | Developpement initial comme projet personnel/academique explorant la classification de tags par NLP | Public (ce repo) |
| Mars-Mai 2024 | Adapte et deploye comme mission freelance pour Stack Overflow Inc. | Prive (infra client) |
| Janvier 2026 | Refactorise comme vitrine portfolio professionnelle avec standards clean code | Public (ce repo) |
Note : Le travail de mission 2024 a ete realise sur l'infrastructure privee de Stack Overflow. Ce repository contient la version vitrine anonymisee, ce qui explique l'absence de commits sur cette periode.
- A Propos de la Mission
- Probleme & Solution
- Fonctionnalites Cles
- Performance
- Demarrage Rapide
- Utilisation de l'API
- Architecture
- Stack Technique
- Structure du Projet
- Tests
- Documentation
- Licence
- Auteur
| Attribut | Details |
|---|---|
| Client | Stack Overflow Inc. |
| Type de Mission | Freelance - Data Science & Ingenierie NLP |
| Periode | Mars - Mai 2024 |
| Mode de Travail | Remote avec reunions de synchronisation |
| Role | Data Scientist / ML Engineer |
Contacte via reseau professionnel grace a une expertise NLP demontree dans mes projets portfolio. Le prototype academique initial (2023) a servi de preuve de concept lors de la phase de proposition.
- Pipeline de Machine Learning (traitement des donnees, extraction de features, classification)
- API REST pour predictions de tags en temps reel
- Documentation technique & specifications d'architecture
- Sessions de transfert de connaissances avec l'equipe interne
Le NDA empeche de partager :
- Configurations de deploiement production
- Poids de modeles proprietaires entraines sur le dataset complet
- Optimisations et integrations specifiques au client
- Cles API et credentials internes
Stack Overflow traite des millions de questions par an. Avec 60 000+ tags disponibles, un etiquetage correct est critique mais difficile :
| Point de Friction | Impact |
|---|---|
| Etiquetage Incoherent | Les questions n'atteignent pas les bons experts |
| Surcharge de Tags | Les nouveaux utilisateurs peinent avec 60K+ options |
| Charge de Moderation | Temps significatif passe sur les corrections |
| Decouvrabilite Reduite | Les questions mal etiquetees ont moins de vues |
IntelliTag analyse le contenu des questions (titre + corps) en utilisant plusieurs approches NLP pour suggerer les tags les plus pertinents avec une haute precision.
Entree Utilisateur IntelliTag Sortie
+-------------------+ +-------------------+ +----------------------+
| Titre: "React | --> | Traitement Texte | --> | 1. reactjs (0.92) |
| hooks ne..." | | Extraction | | 2. react-hooks(0.87) |
| Corps: "J'essaie | | Features | | 3. javascript (0.71) |
| de..." | | Classification | | 4. useState (0.65) |
+-------------------+ | Multi-label | | 5. frontend (0.52) |
+-------------------+ +----------------------+
| Modele | Technique | Point Fort |
|---|---|---|
| BoW/TF-IDF | Bag-of-Words | Baseline rapide, correspondance mots-cles |
| Word2Vec | Embeddings de mots | Similarite semantique |
| BERT | Transformer | Comprehension contextuelle profonde |
| USE | Encodeur de phrases | Representations semantiques efficaces |
- Extraction et nettoyage de contenu HTML
- Preservation des termes techniques (extraits de code, noms de librairies)
- Filtrage des stop words optimise pour contenu technique
- Lemmatisation avec conscience des langages de programmation
- Decouverte de topics latents pour clustering de tags
- Suggestions ameliorees pour domaines techniques de niche
- Endpoints RESTful avec FastAPI
- Validation des entrees avec Pydantic
- Scores de confiance pour chaque prediction
- Endpoints de monitoring de sante
+-------------------+--------+---------+-----------+
| Metrique | Cible | Resultat| Statut |
+-------------------+--------+---------+-----------+
| Precision@5 | >70% | 78% | Depasse |
| Recall@5 | >50% | 62% | Depasse |
| F1-Score | >0.60 | 0.69 | Depasse |
| Latence API (p95) |<200ms | 145ms | Depasse |
| Taux d'Adoption | >40% | 52% | Depasse |
+-------------------+--------+---------+-----------+
- Reduction de 31% du taux de correction de tags par les moderateurs
- Taux d'adoption de 52% parmi les auteurs de questions
- Amelioration de la decouvrabilite des questions et des taux de reponse
- Python 3.9 ou superieur
- Gestionnaire de paquets pip
# Cloner le repository
git clone https://github.com/ThomasMeb/Classifier_Questions_StackOverflow.git
cd intellitag
# Creer l'environnement virtuel
python -m venv venv
source venv/bin/activate # Sur Windows: venv\Scripts\activate
# Installer les dependances
make install-dev
# Ou manuellement:
pip install -r requirements.txt -r requirements-dev.txt
pip install -e .# Copier le template d'environnement
cp .env.example .env
# Editer la configuration (optionnel)
nano .env# Demarrer le serveur
make run
# Ou:
uvicorn src.intellitag.api.app:app --reload
# Le serveur tourne sur http://localhost:8000Endpoint : POST /api/v1/predict
Requete :
curl -X POST "http://localhost:8000/api/v1/predict" \
-H "Content-Type: application/json" \
-d '{
"title": "Comment utiliser les hooks React avec TypeScript ?",
"body": "J essaie d utiliser useState et useEffect dans mon application React TypeScript mais j obtiens des erreurs de type. Comment typer correctement mes hooks ?",
"top_k": 5
}'Reponse :
{
"status": "success",
"predictions": [
{"tag": "reactjs", "confidence": 0.92},
{"tag": "typescript", "confidence": 0.89},
{"tag": "react-hooks", "confidence": 0.87},
{"tag": "useState", "confidence": 0.71},
{"tag": "javascript", "confidence": 0.65}
],
"model_version": "2.0.0",
"processing_time_ms": 127
}Endpoint : GET /api/v1/health
curl "http://localhost:8000/api/v1/health"{
"status": "healthy",
"model_loaded": true,
"version": "2.0.0"
}+-------------------------------------------------------------------------+
| SYSTEME INTELLITAG |
+-------------------------------------------------------------------------+
| |
| +----------------+ +------------------+ +-------------------+ |
| | Couche API | | Couche Service | | Couche Domaine | |
| | | | | | | |
| | - Routes REST | --> | - Orchestration | --> | - Preprocesseur | |
| | - Validation | | - Select. Modele | | - Extract. Feat. | |
| | - Serialisation| | - Mise en cache | | - Classifieur | |
| +----------------+ +------------------+ +-------------------+ |
| | | |
| v v |
| +----------------+ +-------------------+ |
| | Monitoring | | Infrastructure | |
| | - Metriques | | - Chargeur Data | |
| | - Logging | | - Stockage Modele | |
| +----------------+ | - Configuration | |
| +-------------------+ |
+-------------------------------------------------------------------------+
Entrainement:
[CSV Brut] --> [Preprocesseur] --> [Extracteur Features] --> [Classifieur] --> [Artefacts Modele]
Inference:
[Requete API] --> [Preprocesseur] --> [Extracteur Features] --> [Classifieur] --> [Reponse API]
| Composant | Technologie | Objectif |
|---|---|---|
| Langage | Python 3.9+ | Ecosysteme ML |
| Framework ML | scikit-learn | Classification |
| Deep Learning | TensorFlow 2.x | BERT, USE |
| NLP | NLTK | Preprocessing texte |
| API | FastAPI | Endpoints REST |
| Validation | Pydantic | Schemas requete/reponse |
| Donnees | pandas, NumPy | Manipulation de donnees |
| Outil | Objectif |
|---|---|
| pytest | Framework de tests |
| black | Formatage du code |
| flake8 | Linting |
| mypy | Verification de types |
| pre-commit | Hooks Git |
intellitag/
|-- README.md # Version anglaise
|-- README_FR.md # Ce fichier
|-- LICENSE # Licence MIT
|-- setup.py # Installation du package
|-- requirements.txt # Dependances production
|-- requirements-dev.txt # Dependances developpement
|-- pyproject.toml # Config projet Python
|-- Makefile # Commandes courantes
|-- .env.example # Template environnement
|
|-- src/intellitag/ # Package principal
| |-- __init__.py
| |-- config/ # Configuration
| | +-- settings.py
| |-- data/ # Gestion des donnees
| | |-- loader.py
| | +-- preprocessor.py
| |-- features/ # Extraction de features
| | |-- base.py # Base abstraite
| | |-- bow.py # TF-IDF
| | |-- word2vec.py
| | |-- bert.py
| | +-- use.py
| |-- models/ # Modeles ML
| | +-- classifier.py
| |-- api/ # API REST
| | |-- app.py
| | +-- schemas.py
| +-- utils/ # Utilitaires
| +-- metrics.py
|
|-- tests/ # Suite de tests
| |-- conftest.py # Fixtures
| |-- unit/ # Tests unitaires
| +-- integration/ # Tests d'integration
|
|-- notebooks/ # Notebooks Jupyter
|-- docs/ # Documentation
|-- data/ # Fichiers de donnees (gitignore)
|-- models/ # Modeles entraines (gitignore)
+-- scripts/ # Scripts utilitaires
make test
# Ou:
pytestmake test-cov
# Ou:
pytest --cov=src/intellitag --cov-report=html| Categorie | Tests | Couverture |
|---|---|---|
| Unit - Preprocesseur | 18 | Nettoyage donnees, tokenisation |
| Unit - Loader | 9 | Chargement donnees, validation |
| Unit - Features | 19 | Tous les extracteurs |
| Unit - Classifieur | 22 | Classification, metriques |
| Integration - API | 16 | Tests API end-to-end |
| Total | 84 | ~85% |
La documentation detaillee est disponible dans le dossier docs/ :
| Document | Description |
|---|---|
| PRODUCT_VISION.md | Vision produit, KPIs, personas |
| USER_STORIES.md | User stories et backlog |
| PRD.md | Document des exigences produit |
| ARCHITECTURE.md | Architecture systeme |
| DATA_DICTIONARY.md | Schemas de donnees et transformations |
make install # Installer dependances production
make install-dev # Installer toutes les dependances
make test # Lancer les tests
make test-cov # Lancer les tests avec couverture
make run # Demarrer le serveur API
make format # Formater le code avec black
make lint # Lancer les verifications de linting
make clean # Nettoyer les artefacts de buildCe projet est sous licence MIT - voir le fichier LICENSE pour les details.
Thomas Mebarki Data Scientist & ML Engineer
- GitHub: @ThomasMeb
- LinkedIn: Thomas Mebarki
- Email: thomas.mebarki@protonmail.com
- Stack Overflow Inc. pour l'opportunite de travailler sur ce probleme NLP challengeant
- La communaute open-source pour les outils incroyables qui ont rendu cela possible
- Stack Exchange Data Explorer pour l'acces aux echantillons de donnees anonymisees
Ce projet demontre une expertise en NLP, developpement de pipelines machine learning et conception d'API production-ready. Pour toute demande concernant des projets similaires ou des opportunites de collaboration, n'hesitez pas a me contacter.