Fiche de suivi - Recommandation intelligente de films

Voici la Fiche de suivi du projet de fin d'études DeepMovies 2016-2017

Page d'accueil du projet

= Équipe =
 * Rachex Coralie (Chef de projet - Scrum Master)
 * Niogret Edwin (Responsable innovation)
 * Hattinguais Julian (Responsable qualité)
 * Navarro Elsa (Responsable communication, Médiatrice)
 * Dunand Quentin (Responsable des deadlines,Responsable du front-end)

= Avancée du projet = Le scrumboard utilisé pour le projet est visible dans l'onglet Projet de l'organisation DeepLearningMovies que nous avons créé sur Github. Chaque tâche est réalisée par un ou plusieurs membre(s) de l'équipe et testée par un autre membre de l'équipe.

Sprint dédié aux travaux préparatoires du projet

 * Debriefing autour du projet
 * Renseignements sur les technologies et principaux défis techniques
 * Maquette de tests sur la faisabilité du projet (recherche de solutions pour les principaux problèmes techniques afin de guider nos choix technologiques et choix de fonctionnalités)
 * Choix technologiques
 * Préparation des environnements
 * Établissement de la liste des exigences fonctionnelles et non fonctionnelles



Semaine 1 : 23/01 - 29/01

 * Mise en place du wiki (Edwin)
 * Recherche sur les technologies et les problèmes techniques (Tous)
 * Prise RDV avec Massih-Reza Amini pour renseignements (Coralie)
 * Mise en place d'un agenda pour le suivi du projet (Coralie)
 * Comment lier l'API au front-end ? AngularJS ou Polymer ? ... (Quentin)


 * Mise en place de l'architecture (Tous) avant de faire un prototype comme prévu.
 * Installation, compréhension et manipulation de Keras (Tous)
 * Recherche mise en place API-REST Python pour le back-end (Julian)
 * Mise en place du front-end - première requêtes - choix Angular pour communiquer avec une API-REST (Quentin)
 * Traitement de données simple en se basant juste sur le vote des utilisateurs de TMDb sur les films (Edwin, Coralie, Elsa)
 * Mise en place d'un prototype capable de récolter grâce à l'API de TMDB les informations de films ciblés. Puis construction d'un modèle de Deep Learning capable de prédire si une personne va aimer un film ou non en fonction de sa note. (Edwin, Coralie)
 * Recherche de la transformation de texte en valeurs numériques (String to Float) et plus généralement du prétraitement des données (Elsa, Coralie, Quentin) : découvertes de Word2Vec et de GloVe.


 * Rendez-vous avec Massih-Reza Amini pour éclaircir le sujet, notamment au sujet du pré-traitement du texte. (Tous)
 * Premiers scripts Python pour le prétraitement des données : import depuis un script JSON (Julian) et transformation sous forme de vecteur moyen pour un film donné (Elsa), recherche d'une méthode plus approfondie pour traiter le Résumé (Coralie).
 * Réflexion sur les choix des différents layers de traitement des données et sur l'étape d'embedding des données (premier traitement) (Edwin).
 * Mise en place d'un système de notation fonctionnel qui permet d'enregistrer les données à partir du front (Quentin).

Tâches du Sprint1

 * T1. Établissement des vues principales côté client (recherche et annotation de films)
 * T2. Mise en place du processus de pré-traitement des données (titre, mots clés, résumé, note, artiste, producteur)
 * T3. Mise en place du réseau neuronal (réseau neuronal simple)
 * T4. Mise en place de la structure de test du réseau neuronal (former les corpus de données, cross validation, test de précision)
 * T5. Mise en place de l'environnement système (Docker)

Lundi

 * Préparation du premier sprint :
 * Mise au point sur le travail réalisé la semaine passée et sur le travail à réaliser durant le sprint
 * Établissement d'une liste de fonctionnalités, avec une estimation de l'importance et du temps de réalisation de chaque tâche
 * Sélection des fonctionnalités à réaliser au cours du Sprint, remplissage du Scrumboard
 * Mise au point sur l'arborescence du git / architecture du projet
 * Installation d'une version GPU pour Keras et Tensor-Flow sur les machines équipées d'un bon GPU

Mardi

 * Réunion avec Didier Donsez :
 * Technologies : storm, spark, flint (temps réel) pour Twitter
 * Distribution : préparer un déploiement sur GRID5000, contacter Olivier Richard et préparer un container Docker
 * Utiliser Github pour héberger le site web


 * T1. -> Vues "recherche de films", "annotation de film" et "consultation des films annotés" (Quentin)
 * T2. -> Prétraitement des données "titre", "mots clés", "résumé", "notes" (Edwin, Elsa, Coralie, Julian)
 * prétraitement des textes via Doc2Vec (Coralie)
 * prétraitement des mots via Glove (Elsa, Edwin, Julian)
 * récupération des données (Julian)
 * mise en place de l'embedding (Edwin)
 * mise en place d'une librairie pour le pré-traitement des données envoyées aux classifieur (Julian)
 * Import des modules (Julian)

Mercredi

 * T1. -> Chargement des images de films côté client (Quentin)
 * T2. -> Prétraitement des données "titre", "mots clés", "résumé", "notes" + Ajout "genre" (Edwin, Elsa, Coralie, Julian)
 * prétraitement des textes via Doc2Vec (Coralie)
 * extraction des données JSON via l'API (Elsa)
 * prétraitement des genres (Julian)
 * prétraitement général (mise en forme de la matrice de données) (Edwin)
 * revue de code (Julian)
 * T5. -> Recherche d'un moyen de distribuer le classifieur sous Keras - Elephas ? (Coralie)

Jeudi

 * Cours de MPI - travail sur la communication au sein d'un groupe
 * T1. -> Pagination et chargement d'images (Quentin)
 * T3. -> Création d'une première version du classifieur (Elsa, Edwin)
 * T4. -> Validation croisée pour pouvoir tester le classifieur correctement (Edwin & Elsa)
 * T5. -> Installation version GPU sur PC (Julian)
 * T5. -> Recherche d'un moyen de distribuer le classifieur Keras - Elephas (Coralie)

Vendredi

 * T1. -> Déploiement sur github.io (Quentin)
 * T3. -> Insertion de Doc2Vec dans le classifieur (Julian)
 * T3. -> Revue du classifieur pour obtenir une meilleure précision (Elsa & Edwin)
 * T4. -> Mise en place d'un système de test du classifieur automatisé avec k validations croisées pour les films enregistrés dans un fichier JSON (Elsa)
 * T4. -> Annotation de films pour constituer la base d'apprentissage/test (Tous)
 * T5. -> Auto-formation sur Docker (Coralie, Edwin)

Lundi

 * Cours de MPI - gestion de projet
 * T1. -> Ajout d'un boite de dialogue permettant de visualiser les infos d'un film (Quentin)
 * T2. -> Fix de bugs dans preprocessing (Julian)
 * T4. -> Recherche sur la mise en place de tests avec Python (Elsa)
 * T5. -> Mise en place de l'image Docker avec Python, Keras et Tensorflow en partant d'un Ubuntu 14 (Edwin)
 * T5. -> Mise en place de l'image Docker avec Spark en partant d'un Ubuntu 14 (Coralie)

Mardi

 * Rendez-vous avec Mr. Amini
 * T1. -> Amélioration de la boîte de dialogue pour les infos (Quentin)
 * T2. -> Preprocessing des acteurs et des realisateurs et ajout des fonction de test associées (Julian)
 * T2. -> Test le modèle D2V sur un analyseur de sentiment de tweets, beaucoup plus objectif que les gouts utilisateurs vis à vis des films (Coralie).
 * T2. -> Mise en place de modules de test unitaires dans MovieProject/tests/unit et suppression de fichiers inutiles dans MovieProject/tests (Elsa)
 * T4. -> Ajout de nouveaux fichiers de tests (json) et évaluation du classifieur de façon générique sur les fichiers json dans MovieProject/resources/evaluation (Elsa)
 * T4. -> Evaluation du classifieur avec la méthode Doc2Vec (Elsa)
 * T5. -> Finalisation de l'image Docker avec Python, Keras et Tensorflow (Edwin)

Mercredi

 * T1. -> Création de statistiques sur les goûts utilisateurs côté client (Quentin)
 * T4. -> Début de la mise en place des différents modèles d'apprentissage en vue de leur comparaison :
 * Réseau neuronal avec Keras (Elsa)
 * Perceptron (Coralie)
 * Modification du prétraitement afin de pouvoir récupérer les matrices de chacune des variables caractérisant un film (Julian)
 * T5. -> Ajout de Spark à l'image Docker (Edwin)

Jeudi

 * T1. -> Poursuite de la création de statistiques sur les goûts utilisateurs côté client (Quentin)
 * T4. -> Poursuite des tests de performance :
 * Test de l'influence de chaque variable des films sur le modèle du perceptron, afin de ne sélectionner que les variables pertinentes (Coralie)
 * Test du réseau neuronal (Elsa)
 * Mise en place d'un SVM pour concurrencer les performances des deux autres modèles (Julian)
 * T5. -> Test de l'image Docker (Edwin)

Vendredi

 * T1. -> Visualisation des statistiques + explications sur la page d'accueil (Quentin)
 * T4. -> Finalisation perceptron + intégration dans evaluation (Coralie)
 * T4. -> Finalisation SVM + intégration dans evaluation (Julian)
 * T4. -> Mise en place du module evaluation et intégration des modifications de classifieur & preprocessing (Elsa)
 * T5. -> Documentation sur Spark (Edwin & Coralie)

Tâches du Sprint2

 * T1.2. Amélioration du front-end (mise en cache, etc.)
 * T2.2. Ajout de descripteurs (durée, budget, année de production, compagnie de production, appartenance à une sage) en vue d'améliorer notre modèle d'apprentissage.
 * T3.2 Amélioration du réseau neuronal (comparaison avec Perceptron simple, SVM, RN Convolutif)
 * T4. Mise en place de la suggestion de films (vue côté front-end et logique côté back-end)
 * T5. Distribution de l'apprentissage sur plusieurs machines (Docker - Spark - Mesos - Elephas) & Parallélisation requêtes
 * T6 Communication front/back, établissement des routes et mise en place du système d'authentification
 * T7. Analyse de sentiment sur les flux Twitter
 * T8. Mise en place de la base de données

Lundi

 * Réunion de fin de sprint1 et de début de sprint0 : discussion autour des avancées, difficultés, retards & établissement fonctionnalités à implémenter au cours du sprint2
 * T1.2 -> Mise en place d'un cache local côté front pour éviter de faire trop de requêtes à l'API TMDB (Quentin)
 * T2.2. -> Revue de la structure du code (Julian)
 * T3.2. -> Mise en place d'un réseau neuronal de convolution (Coralie)
 * T4. -> Amélioration de la prédiction de film (Elsa)
 * T5. -> Mise en place d'un cluster Spark via Mesos (Edwin)

Mardi

 * T1.2 -> Mise en place d'un cache local côté front pour éviter de faire trop de requêtes à l'API TMDB (Quentin)
 * T3.2 -> Amélioration du classifieur (Elsa/Quentin)
 * T3.2. -> Mise en place d'un réseau neuronal de convolution (Coralie)
 * T4. -> Amélioration de la prédiction de film (Elsa)
 * T5. -> Mise en place d'un cluster Spark via Mesos (Edwin)
 * T5. -> Parallélisation des requêtes à l'API TMDB (Julian)

Mercredi

 * T1.2 -> Finalisation du cache local côté front pour éviter de faire trop de requêtes à l'API TMDB (Quentin)
 * T1.2 -> Finalisation des statistiques cinématographique utilisateurs (Quentin)
 * T2.2. -> Ajout du descripteurs "budget" avec normalisation (Edwin)
 * T3.2 -> Mise en place de la fonction de comparaison des combinaisons de descripteurs de films pour faciliter le travail des DUT (Julian)
 * T3.2. -> Mise en place d'un réseau neuronal LSTM (Coralie)
 * T4. -> Changement de la méthode de prédiction de film (Elsa)
 * T6. -> Communication front-back test (Elsa/Quentin)
 * SRS (Edwin)

Jeudi

 * Rendez-vous avec les DUT : aide sur l'installation du projet, clone du projet Github.
 * Préparation de la présentation (Elsa & Edwin)
 * Préparation démo (Quentin & Elsa)
 * Mise à jour Wiki, SRS, Scrumboard (Elsa & Edwin)
 * Aide des DUT (Edwin & Julian)
 * T3.2 -> Evaluation du modèle et comparaison avec SVM et Perceptron de manière graphique (extraire les données et construire des graphes - csv ou matplotlib) (Sébastien & Marceau)
 * T7. -> Prétraitement des Tweet(Coralie)
 * T5. -> Avancement sur le distribué (Julian)
 * T1.2 -> Page de login du front, fix problème de CSS sur les graphes (Quentin)
 * T3.2 -> Amélioration du classifieur, tests en changeant les layers, le batch-size, etc. (Quentin)

Vendredi

 * Préparation du travail qu'Edwin pourra réaliser durant la semaine de vacances (Edwin travaillera en décalé avec le reste du groupe)
 * Début de la mise en place de la base de données (Edwin)

Semaine 5 : 20/02 - 26/02 (Edwin)
(Edwin a travaillé la semaine précédente, en décalé avec le reste du groupe)

Lundi

 * T8. -> Installation des outils liés à la gestion de la base de données MySQL et début de la conception de l'API de communication avec cette base. (Edwin)

Mardi

 * T8. -> Finalisation de l'API, début des tests et des corrections de bug. (Edwin)

Mercredi

 * T8. -> Ajout de nouvelles fonctionnalités SQL à l'API et tests de l'API. Création d'un readme et d'un fichier d'exemple complet pour l'utilisation de l'API de MySQL. (Edwin)
 * T8. -> Amélioration de l'image Docker, correction de bugs de paths et de librairies manquantes. (Edwin)

Jeudi

 * T8. -> Review générale du travail lié à la base de données. (Edwin)
 * T8. -> Mise en place de MySQL pour Docker. (Edwin)
 * Mise à jour du Scrumboard et du wiki-air. (Edwin)

Vendredi

 * T8. -> Amélioration du Docker pour tenter de régler des problèmes de ports liés à MySQL (non terminé). (Edwin)
 * T8. -> Tests unitaires de fonctionnement de serveurs apaches. (Edwin)

Lundi

 * T1.2 -> Mise en place de la page de recommendations (Quentin)
 * Merge du classifieur sur la branche develop, avec la prédiction (Elsa)
 * T8. -> Revue de la BD et sécurisation (Julian) puis merge sur develop
 * T7. -> Finalisation de l'analyse de sentiments (Coralie) pour merge sur develop
 * T3.2 -> Recherche sur une construction différente des matrices (basée sur la factorisation de matrices, cf Prix Netflix) (Quentin & Elsa)

Mardi

 * Harmonisation des données merge sur le git (Sentiment analysis, evaluation du classifieur et prediction) (Elsa)
 * T6. -> Recherche et premiers tests pour l'authentification (Quentin pour le front et Julian pour le back)
 * T8. & T5. -> Creation d'une instance de BD Amazon RDS dans un VPC (Coralie)
 * T1.2 -> Finalisation page de recommendations (Quentin)
 * Insertion en BD des films annotés par les users (Julian)

Mercredi

 * Réunion avec Massih-Reza Amini pour parler d'un nouveau modèle de machine learning (Cf Quentin & Elsa lundi)
 * T4. -> Amélioration de la prédiction (Elsa)
 * T5. -> Essais déploiement du back sur une instance Amazon EC2 (Coralie)
 * T6. -> Mise en place de l'authentification simple (login) (Quentin & Julian)

Jeudi

 * T4. -> Amélioration de la prédiction et module de test pour la prédiction (Elsa)
 * T5. -> Essais déploiement du back sur une instance Amazon EC2 (Coralie)
 * T1.2 -> Création des vues d'inscription (sign up) et début vue des paramètres (Quentin)
 * T6. -> Sécurisation des appels à l'API par Token (Julian)

Vendredi

 * Nettoyage de develop + mise en place de nouveaux tests et état des lieux des tests et de la doc à faire (Elsa)
 * T5. -> Essais déploiement du back sur une instance Amazon EC2 (Coralie)
 * T6. -> Finalisation de l'inscription et test des premiers appels de récupération des films annotés d'un user (Quentin & Julian)

Tâches du Sprint3

 * T1.1 Lier le back et le front, mettre en place les routes (suggestion, annotation) - Authentification faite
 * T1.2 Revoir et enrichir les vues du front
 * T2. Déployer l'API sur un serveur Amazon (SQL dans Docker, environnement d'exécution avec Docker)
 * T3. Enrichir l'ensemble de tests et la documentation
 * T4. Mettre en place le nouveau modèle pour avoir une autre base de comparaison

Lundi

 * Conclusion sur le sprint précédent
 * Discussion au sujet du nouveau Sprint
 * T2. -> Problème de mise en place de Docker sur les machines Amazon : discussion de l'équipe pour essayer de trouver une solution (Swap)

Mardi

 * T1.1 -> Ajout des routes pour gérer les ajouts/suppressions en base de données (Julian)
 * T1.1 -> Ajout de la logique côté front pour gérer les ajouts/suppressions en base de données (Quentin)
 * T1.1 -> Tests de la communication front - back(api) - base de données (Coralie, Julian, Quentin)
 * T2 -> Finalisation du déploiement de l'API sur un serveur Amazon + tests (Coralie)
 * T3 -> Tests unitaires sur apiTMDB (Elsa) et sur sql (Edwin)
 * T1.2 -> Charte graphique (Elsa)

Mercredi

 * T1.1 -> Finalisation de l'authentification côté front (Quentin)
 * T4 -> Mise en place du nouveau model (factorisation machine) sur un exemple simple d'apprentissage (Quentin, Elsa)
 * T3 -> Tests unitaires sur sql (Edwin)
 * T3 -> Tests unitaires sur texts, words et tweets (Coralie)
 * T3 -> Tests unitaires sur preprocessing (Julian)
 * T1.2 -> Charte graphique (Elsa)

Jeudi

 * T1.1 -> Modification de l'API pour sauvegarder et charger les modèles utilisateurs : maj routes entrainement + prédiction (Elsa)
 * T1.2 -> Page d'accueil côté front (Quentin)
 * T3 -> Tests unitaires sur preprocessing (Julian)
 * T3 -> Revue de code (Coralie)
 * T4 -> Mise en place du prétraitement pour le nouveau modèle (Edwin)

Vendredi

 * T1.1 -> Revue de l'apprentissage et de la prédiction de films côté back (Elsa)
 * T1.2 -> Liaison du front avec l'apprentissage et la prédiction côté back (Quentin)
 * T1.2 -> Ajout de l'analyse de sentiment twitter côté front lors de la suggestion de films (Quentin)
 * T3 -> Revue de code des DUT (Julian)
 * T3 -> Documentation du code et du projet git (Coralie)
 * T4 -> Mise en place du prétraitement pour le nouveau modèle (Edwin)
 * Mise à jour de la documentation (Edwin et Coralie)

Lundi

 * T1.1 -> Mise en place de la prédiction via le nouveau modèle d'apprentissage (Elsa)
 * T1.2 -> Liaison du front avec l'apprentissage et la prédiction côté back (Quentin)
 * T1.2 -> Ajout de l'analyse de sentiment twitter côté front lors de la suggestion de films (Quentin) + Mise en jours du back-end en conséquent (Coralie)
 * T3 -> Revue de code + Commentaires (Julian)
 * Mise à jour de la documentation + Préparation soutenance + Préparation de la démonstration (Edwin et Coralie)

Mardi

 * T1.1 -> Mise en place de la prédiction via le nouveau modèle d'apprentissage (Elsa)
 * T1.2 -> Liaison du front avec l'apprentissage et la prédiction du nouveau modèle (Quentin)
 * T2 -> Détacher le processus faisant tourner l'api du terminal et rediriger ses sorties dans un fichier (Coralie)
 * T3 -> Test et incorporation du travail des DUT et production des graphes correspondant (Julian + Edwin)
 * Mise à jour de la documentation + Préparation soutenance + Préparation de la démonstration (Coralie)

Mercredi

 * Remise à zéro de la base de données pour entrer des informations propres
 * Préparation de la soutenance et de la démonstration
 * Correction des bugs persistants

Jeudi

 * Soutenance de fin de projet avec Didier Donsez et Massih-Reza Amini