Skip to content

Latest commit

 

History

History
466 lines (354 loc) · 15.4 KB

File metadata and controls

466 lines (354 loc) · 15.4 KB

IntelliTag

CI Live Demo Python 3.9+ License: MIT Code style: black Tests

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.


Chronologie du Projet

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.


Table des Matieres


A Propos de la Mission

Contexte de la Mission

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

Comment ca a Commence

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.

Livrables

  • 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

Pourquoi Anonymise ?

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

Probleme & Solution

Le Defi

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

La Solution : IntelliTag

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) |
                          +-------------------+     +----------------------+

Fonctionnalites Cles

Architecture Multi-Modeles

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

Preprocessing Intelligent

  • 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

Topic Modeling (LDA)

  • Decouverte de topics latents pour clustering de tags
  • Suggestions ameliorees pour domaines techniques de niche

API Production-Ready

  • Endpoints RESTful avec FastAPI
  • Validation des entrees avec Pydantic
  • Scores de confiance pour chaque prediction
  • Endpoints de monitoring de sante

Performance

Metriques Cles Atteintes

+-------------------+--------+---------+-----------+
|     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  |
+-------------------+--------+---------+-----------+

Impact Business

  • 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

Demarrage Rapide

Prerequis

  • Python 3.9 ou superieur
  • Gestionnaire de paquets pip

Installation

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

Configuration

# Copier le template d'environnement
cp .env.example .env

# Editer la configuration (optionnel)
nano .env

Lancer l'API

# Demarrer le serveur
make run
# Ou:
uvicorn src.intellitag.api.app:app --reload

# Le serveur tourne sur http://localhost:8000

Utilisation de l'API

Predire des Tags

Endpoint : 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
}

Verification de Sante

Endpoint : GET /api/v1/health

curl "http://localhost:8000/api/v1/health"
{
  "status": "healthy",
  "model_loaded": true,
  "version": "2.0.0"
}

Architecture

Vue d'Ensemble du Systeme

+-------------------------------------------------------------------------+
|                          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   |    |
|                                                 +-------------------+    |
+-------------------------------------------------------------------------+

Flux de Donnees

Entrainement:
[CSV Brut] --> [Preprocesseur] --> [Extracteur Features] --> [Classifieur] --> [Artefacts Modele]

Inference:
[Requete API] --> [Preprocesseur] --> [Extracteur Features] --> [Classifieur] --> [Reponse API]

Stack Technique

Technologies Principales

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

Outils de Developpement

Outil Objectif
pytest Framework de tests
black Formatage du code
flake8 Linting
mypy Verification de types
pre-commit Hooks Git

Structure du Projet

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

Tests

Lancer Tous les Tests

make test
# Ou:
pytest

Lancer avec Couverture

make test-cov
# Ou:
pytest --cov=src/intellitag --cov-report=html

Resume de la Suite de Tests

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%

Documentation

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

Commandes Disponibles

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 build

Licence

Ce projet est sous licence MIT - voir le fichier LICENSE pour les details.


Auteur

Thomas Mebarki Data Scientist & ML Engineer


Remerciements

  • 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.