9.2 KiB
Source de vérité : https://git.gregoiremureau.com/openclassroom-ai/oc-p06-product-classification
git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p06-product-classification.git
git clone https://git.gregoiremureau.com/openclassroom-ai/oc-p06-product-classification.git
Dataset : voir fetch-data.sh (hors git si volumineux).
Projet de Classification Automatique de Produits - Place de marché
📘 Ce projet est également disponible en anglais 🇬🇧
📋 Contexte du projet
Ce projet a été réalisé pour Place de marché, une entreprise qui souhaite lancer une marketplace e-commerce anglophone. L'objectif est d'automatiser la classification des articles vendus sur la plateforme pour améliorer l'expérience utilisateur, tant pour les vendeurs que pour les acheteurs.
Actuellement, l'attribution des catégories est effectuée manuellement par les vendeurs, ce qui est peu fiable et difficile à passer à l'échelle. Ce projet vise à développer un moteur de classification automatique basé sur les descriptions textuelles (en anglais) et les images des produits.
🎯 Objectifs
Le projet se divise en plusieurs missions principales :
- Étude de faisabilité : Analyser la capacité à classifier automatiquement des produits à partir de leurs descriptions textuelles et de leurs images
- Extraction de features : Mettre en œuvre diverses techniques d'extraction de caractéristiques pour le texte et les images
- Analyse visuelle : Réduire les données en 2D et visualiser la séparabilité des catégories
- Classification supervisée : Entraîner un modèle de deep learning pour classifier les images avec data augmentation
- Collecte de données : Tester l'API OpenFoodFacts pour enrichir la base de produits
📊 Données
Le projet utilise un dataset d'articles avec :
- Des descriptions textuelles en anglais
- Des images de produits
- Des catégories de produits (7 catégories principales)
- Environ 150 produits par catégorie
Note : Les données utilisées ne présentent aucune contrainte de propriété intellectuelle.
📁 Structure du projet
├── P6_01_NLP_Basic_methods.ipynb
├── P6_02_NLP_Doc2Vec.ipynb
├── P6_03_NLP_transfer_learning.ipynb
├── P6_04_IMAGES_SIFT_ORB.ipynb
├── P6_05_IMAGES_CNN_Transfer_learning.ipynb
├── P6_06_Classification_CNN_machine_learning.ipynb
├── P6_07_OpenFoodFacts_API.ipynb
├── P6_Classifiez_automatiquement_des_produits.pptx
└── test_images/
1. P6_01_NLP_Basic_methods.ipynb
Notebook de traitement NLP - Méthodes classiques
Ce notebook implémente les approches traditionnelles de traitement du texte :
- Prétraitement des textes (nettoyage, lemmatisation, suppression stopwords)
- Extraction de features avec Bag-of-Words (CountVectorizer)
- Extraction de features avec TF-IDF
- Réduction de dimension (ACP)
- Visualisation T-SNE en 2D
- Clustering K-means et calcul de l'Adjusted Rand Index (ARI)
- Évaluation de la faisabilité de classification automatique
2. P6_02_NLP_Doc2Vec.ipynb
Notebook de traitement NLP - Word/Sentence Embedding classique
Ce notebook explore les techniques d'embedding de mots :
- Implémentation de Word2Vec ou Doc2Vec
- Création de vecteurs de phrases/documents
- Réduction de dimension et visualisation T-SNE
- Comparaison avec les approches bag-of-words
- Analyse de la séparabilité des catégories
3. P6_03_NLP_transfer_learning.ipynb
Notebook de traitement NLP - Transfer Learning
Ce notebook met en œuvre des techniques NLP avancées :
- BERT (Bidirectional Encoder Representations from Transformers)
- USE (Universal Sentence Encoder)
- Extraction de features contextuelles
- Visualisation et comparaison des performances
- Évaluation comparative de toutes les approches NLP
4. P6_04_IMAGES_SIFT_ORB.ipynb
Notebook de traitement d'images - Descripteurs classiques
Ce notebook traite l'extraction de features d'images traditionnelles :
- Prétraitement des images (niveaux de gris, égalisation, filtrage)
- Extraction de descripteurs avec SIFT
- Extraction de descripteurs avec ORB (alternative à SURF)
- Création de Bag of Visual Words
- Réduction de dimension (ACP)
- Visualisation T-SNE et évaluation ARI
5. P6_05_IMAGES_CNN_Transfer_learning.ipynb
Notebook de traitement d'images - CNN Transfer Learning
Ce notebook utilise des réseaux de neurones pré-entraînés :
- Utilisation de CNN pré-entraînés (VGG16, ResNet, MobileNet, etc.)
- Extraction de features via Transfer Learning
- Comparaison avec les approches SIFT/ORB
- Visualisation T-SNE des embeddings
- Évaluation de la faisabilité avec des features CNN
6. P6_06_Classification_CNN_machine_learning.ipynb
Notebook de classification supervisée d'images
Ce notebook implémente la classification supervisée :
- Construction d'un modèle CNN de classification
- Séparation train/validation/test
- Data augmentation pour améliorer les performances
- Entraînement du modèle avec Transfer Learning
- Évaluation des performances (accuracy, matrice de confusion)
- Comparaison de différentes architectures CNN
7. P6_07_OpenFoodFacts_API.ipynb
Notebook de test de l'API OpenFoodFacts
Ce notebook démontre la collecte de données via API :
- Configuration de l'API OpenFoodFacts
- Requête pour extraire des produits à base de champagne
- Filtrage des données pertinentes
- Extraction des champs : foodId, label, category, foodContentsLabel, image
- Export des 10 premiers produits en format CSV
- Respect des normes RGPD
8. P6_Classifiez_automatiquement_des_produits.pptx
Présentation des résultats
Cette présentation (max 30 slides) synthétise :
- Le contexte et les enjeux du projet
- La méthodologie adoptée pour le texte et les images
- Les résultats comparatifs des différentes approches
- L'analyse de faisabilité de la classification automatique
- Les résultats de la classification supervisée
- Les recommandations pour la mise en production
- La démonstration de l'API de collecte de données
9. test_images/
Dossier d'images de test
Contient des images de test pour valider les modèles :
- Crème visage anti-âge
- Meuble 2 tiroirs
- Microphone filaire
- PC de bureau Asus
- Rideau occultant
- Tasse à café
🛠️ Technologies utilisées
- Python : Langage principal
- NLP :
- NLTK : Prétraitement de texte
- Scikit-learn : CountVectorizer, TF-IDF
- Gensim : Word2Vec, Doc2Vec
- Transformers : BERT
- TensorFlow Hub : Universal Sentence Encoder
- Computer Vision :
- OpenCV : Traitement d'images, SIFT, ORB
- TensorFlow/Keras : CNN, Transfer Learning
- PIL : Manipulation d'images
- Machine Learning :
- Scikit-learn : ACP, K-means, métriques
- Yellowbrick : Visualisation
- Visualisation :
- Matplotlib, Seaborn : Graphiques
- t-SNE : Réduction de dimension
- API :
- Requests : Appels API
- Pandas : Manipulation de données
📈 Méthodologie
Phase 1 : Analyse de faisabilité - Texte
- Prétraitement des descriptions textuelles
- Extraction de features (Bag-of-Words, TF-IDF, Word2Vec, BERT, USE)
- Réduction de dimension (ACP)
- Visualisation T-SNE en 2D
- Clustering K-means et calcul ARI
- Analyse de la séparabilité des catégories
Phase 2 : Analyse de faisabilité - Images
- Prétraitement des images
- Extraction de features (SIFT/ORB et CNN Transfer Learning)
- Création de Bag of Visual Words (pour SIFT/ORB)
- Réduction de dimension (ACP)
- Visualisation T-SNE en 2D
- Évaluation et comparaison des approches
Phase 3 : Classification supervisée
- Préparation des datasets (train/val/test)
- Construction de modèles CNN avec Transfer Learning
- Implémentation de data augmentation
- Entraînement et optimisation
- Évaluation des performances
Phase 4 : Extension - Collecte de données
- Test de l'API OpenFoodFacts
- Requête et filtrage des produits
- Export des données en CSV
- Validation de la conformité RGPD
📝 Livrables
- ✅ 7 notebooks d'analyse et de modélisation
- ✅ Présentation de la démarche et des résultats (format .pptx)
- ✅ Fichier CSV d'extraction de produits via API
- ✅ Dossier d'images de test
🎓 Compétences développées
- Prétraitement de données textuelles (NLP)
- Prétraitement de données images (Computer Vision)
- Feature engineering pour texte et images
- Techniques d'embedding avancées (BERT, USE)
- Transfer Learning avec CNN pré-entraînés
- Réduction de dimensionnalité (ACP, t-SNE)
- Clustering non-supervisé (K-means)
- Classification supervisée avec deep learning
- Data augmentation pour l'optimisation de modèles
- Collecte de données via API
- Respect des normes RGPD
- Visualisation et communication de résultats
🔍 Principaux résultats attendus
- ARI pour texte : 0.4-0.5 (faisabilité confirmée)
- ARI pour images SIFT/ORB : 0.05-0.1 (résultats peu concluants)
- ARI pour images CNN : 0.4-0.6 (faisabilité confirmée)
- Classification supervisée : Amélioration significative avec data augmentation
👤 Auteur
Grégoire Mureau
Date de réalisation : 2025
Ce projet a été réalisé dans le cadre du parcours AI Engineer d'OpenClassrooms