SRS - Recommandation intelligente de films

Voici la fiche SRS du projet Recommandation intelligente de films.

Page d'accueil du projet

= Équipe =
 * Rachex Coralie (Chef de projet - Scrum Master)
 * Niogret Edwin
 * Hattinguais Julian
 * Navarro Elsa
 * Dunand Quentin

=Introduction = Qui n'a pas rêvé d'avoir une liste de films correspondant exactement à ses goûts cinématographiques ? Beaucoup d'algorithmes ont été conçus pour tenter d'adapter une liste de film en fonction des goûts de l'utilisateur mais manquaient d'efficacité. Avec l’essor de l'intelligence artificielle et des réseaux neuronaux, de nouveaux outils émergent afin de mieux comprendre le comportement et les goûts humains. Nous avons donc décidé de développer un système capable de comprendre les goûts cinématographiques d'un humain de manière bien plus performante que les algorithmes déjà conçu dans ce but là.

But du document
Le but de ce document SRS est de fournir une vue d'ensemble détaillée de notre système logiciel, ses paramètres et buts. Ce document décrit le public cible du projet et son interface utilisateur, ainsi que les spécifications du logiciel. Ce document est destiné tant aux utilisateurs qu'aux développeurs du logiciel.

Objectif du projet
Le but de ce projet est d'explorer les possibilités du Deep Learning sur des données dont les variables sont hétérogènes et multidimensionnelles, ceci au travers de la suggestion intelligente de films s'adaptant aux goûts de l'utilisateur. Grâce à un système de réseaux neuronaux et d'une base de données conséquente de films (TMDb), le site proposera une liste de suggestions de films personnalisée par utilisateur. Le modèle créé sur une base de données statique pourra alors être affiné en temps réel grâce aux nouvelles opinions exprimées par l’utilisateur.

Portée du produit
Le produit est destiné aux utilisateurs désireux de générer automatiquement des recommandations de films en fonction de leurs goûts.

=Description générale=

Le but du produit
Le produit doit permettre à l'utilisateur d'obtenir des recommandations intelligentes de films en fonction des films qu'il a appréciés et de ceux qu'il n'a pas appréciés. Cette recommandation doit tenir compte de la proximité des films les uns par rapport aux autres en terme de genre, synopsie, acteurs, réalisateurs, etc. Mais doit également tenir compte de la popularité des films et des tendances actuelles grâce à l'analyse en temps réel des flux Twitter.

L'apport principal par rapport aux produits concurrents est de réaliser des prédictions personnalisées, grâce à l'utilisation de l'apprentissage automatique et à l'établissement d'un modèle propre à chaque utilisateur. La suggestion devrait donc être plus précise comparée à celles se basant sur la similarité des goûts entre utilisateurs. Deux utilisateurs appréciant un même film, ne sont en effet pas forcés d'apprécier tous les deux un autre film.

Fonctionnalités
Le site est conçu pour un utilisateur et ne sauvegarde que temporairement les choix de celui-ci.


 * Il proposera tout d'abord une liste de films représentative de tous les genres, réalisateurs, acteurs... du cinéma. L'utilisateur pourra pour chaque film, dire s'il aime, n'aime pas ou n'a pas d'opinions sur ce film.
 * Ensuite, en fonction des réponses de l'utilisateur, le site prédira grâce à un système de Deep Learning les films pouvant potentiellement plaire à l'utilisateur et les affichera avec leurs détails.
 * L'utilisateur pourra ensuite noter ces nouveaux films s'il le souhaite, et une nouvelle liste de films se générera afin de mieux s'adapter aux goûts de l'utilisateur.

Caractéristiques utilisateurs
Les utilisateurs doivent posséder une certaine culture cinématographique pour constituer une base d'apprentissage, en fonction des films qu'ils ont préalablement visionnés et de leur avis sur ceux-ci. En revanche, aucune compétence informatique spécifique n'est requise, de sorte qu'un utilisateur novice puisse utiliser l'application. L'interface doit donc être intuitive.

Cas d'utilisations
Le site web réalisé permettra à l'utilisateur d'explorer de nouvelles possibilités cinématiques, et par la suite d'accéder à son compte pour avoir des suggestions de films rapidement.

Contraintes générales

 * L'apprentissage machine doit reposer sur TensorFlow (Keras)
 * Les données en entrées proviennent de l'API TMDB et des API Twitter (API REST 1.1 pour les données historiques ou API Streaming pour les données temps réelles)

Dépendances

 * API de la base de donnée de film TMDB : https://developers.themoviedb.org/3/people
 * API REST 1.1 : https://dev.twitter.com/rest/public
 * API STREAMING : https://dev.twitter.com/streaming/overview

=Evolutions potentielles du produit=
 * Multi utilisateurs : Une session de préférence par utilisateur. De plus, les goûts des utilisateurs seront sauvegardés afin qu'à la prochaine connexion, le modèle de Deep Learning soit prêt à prédire des films correspondant au goût de l'utilisateur concerné.
 * Prédire les films "tendance" du moment en priorité. Le site affichera en priorité les films les plus populaire du moment et correspondant aux goûts de *l'utilisateur. Pour cela, il scannera les tweets de Tweeter en temps réel et cherchera une correspondance entre les tweets de films populaires et ceux prédis par le modèle pour l'utilisateur concerné.
 * Utiliser des systèmes distribués afin d'améliorer les performances d'apprentissage du modèle de Deep Learning et de l'analyse en temps réel de Tweeter.

=Conception du frontend du site=

=Appendices=

Structure du SRS
The document is based on template of the Software Requirements Specification (SRS) inspired of the IEEE/ANSI 830-1998 Standard.

References:
 * http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx
 * http://en.wikipedia.org/wiki/Software_requirements_specification
 * IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998

Bibliographie
Articles sur les systèmes de recommendation


 * spotify - http://benanne.github.io/2014/08/05/spotify-cnns.html#contentbased
 * youtube - https://static.googleusercontent.com/media/research.google.com/fr//pubs/archive/45530.pdf
 * https://www.atala.org/IMG/pdf/1-Poirier-TAL51-3.pdf

Explication des termes deep learning :


 * https://devblogs.nvidia.com/parallelforall/deep-learning-nutshell-core-concepts/

Exemple simple pour prendre en main Keras :


 * http://machinelearningmastery.com/tutorial-first-neural-network-python-keras/
 * http://machinelearningmastery.com/introduction-python-deep-learning-library-keras/
 * http://tryhera.com/

API TMDB :


 * https://developers.themoviedb.org/3/people

Tuto Django + AngularJS :


 * https://thinkster.io/django-angularjs-tutorial#rendering-post-objects

DOC2VEC :


 * https://github.com/nisarg64/Sentiment-Analysis-Word2Vec
 * https://translate.google.fr/translate?hl=fr&sl=en&u=https://rare-technologies.com/doc2vec-tutorial/&prev=search
 * https://translate.google.fr/translate?hl=fr&sl=en&u=http://linanqiu.github.io/2015/10/07/word2vec-sentiment/&prev=search

Embedding layers :


 * http://stats.stackexchange.com/questions/182775/what-is-an-embedding-layer-in-a-neural-network
 * https://github.com/ririw/ririw.github.io/blob/master/assets/Recommending%20movies.ipynb
 * http://blog.richardweiss.org/2016/09/25/movie-embeddings.html

Python API - Flask :


 * http://flask.pocoo.org/docs/0.12/quickstart/#accessing-request-data

Grid'5000 :
 * https://www.grid5000.fr/mediawiki/index.php/Grid5000:Get_an_account