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 suggestion de films correspondant à ses goûts cinématographiques ? Grâce à un système de réseaux neuronaux et d'une base de données conséquente de films, le site proposera une liste de suggestions de films personnalisée pour l'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 et tenir compte de la popularité et avis récemment exprimés dans le flux Twitter.

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
Beaucoup d'algorithmes ont été conçus dans le but de recommander des films en fonction des goûts utilisateurs. Beaucoup d'entre eux sont basés sur des systèmes présupposant que les utilisateurs appréciant un même film sont susceptibles d'apprécier les mêmes films. La suggestion est ainsi réalisée en fonction des goûts d'autres utilisateurs et non pas en fonction des goûts propres de l'utilisateur. Avec l’essor de l'intelligence artificielle et des réseaux neuronaux, de nouveaux outils émergent afin de mieux modéliser les comportements et les goûts humains. Le but de ce projet est d'utiliser l'apprentissage machine afin d'améliorer les systèmes de recommandation cinématographiques, afin de les personnaliser totalement en fonction des goûts de l'utilisateur.

Définitions, acronymes et abréviations

 * Deep Learning : ensemble de méthodes d'apprentissage automatiques visant à modéliser avec un haut niveau d’abstraction un ensemble de données.
 * Git : logiciel de gestion de versions décentralisé

Références

 * http://air.imag.fr/index.php/SRS
 * 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

Portée du produit
Le produit est destiné aux utilisateurs désireux d'obtenir automatiquement des recommandations de films en fonction de leurs goûts. L'application sera plus efficace pour des cinéphiles annotant un grand nombre de films, puisque les modèles d'apprentissage sont plus précis lorsque nous possédons un grands nombres de données d'apprentissage. Toutefois, notre produit à la prétention de pouvoir être utilisé par un internaute lambda, sans condition de connaissances cinématographiques.

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

Structure de l'application
Le schéma de la structure de l'application est disponible ici.

TODO : Dans la nouvelle page, il faudra mettre les infos suivantes :

Interface système
TODO : Schéma communication entre le back et le front

Interface hardware
TODO : Mettre un schéma de notre architecture si on est en application réparties (communication entre le master et les slaves)

Interface software
TODO : Mettre un schéma UML de l'application

Caractéristiques et contraintes 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.
 * Aucune expertise informatique n'est requise, bien que des notions d'informatiques soient nécessaires, afin que l'utilisateur puisse s'inscrire et naviguer sur le site internet.
 * Une connexion internet est également nécessaire pour utiliser le produit.

Contraintes générales du système

 * Le nombre de données d'entrainement est très variable selon les utilisateurs
 * Utilisation de la technologie TensorFlow (Keras)
 * Limitation du nombre de requête par l'API TDMBSimple, à 40 par seconde

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

=Exigences fonctionelles=

Conception de l'interface du système
Le dossier de conception de l'interface est disponible ici

TODO : Dans la nouvelle page, il faudra mettre les infos suivantes :

Interface utilisateur
TODO : Différentes vues du site à la fin du projet

Fonctionnalités
La liste des fonctionnalités est disponible ici

=Exigences de performance=


 * Facilité de prise en main : Le logiciel doit être facile à prendre en main pour un utilisateur non expert et agréable à utiliser pour un utilisateur expert.
 * Temps de réponse : Le produit doit avoir un temps de réponses réduit et quasiment constant ou alors avertir l'utilisateur en cas de délais de traitement. Ces délais de traitement doivent être réduit au maximum pour tenir sur le time-out d'attente de réponse à une réquête client.
 * Sécurité et robustesse / Gestion des erreurs : Le logiciel est capable d'éviter ou de faire face aux événements indésirables, sans intervention humaine. Le système doit fonctionner continuellement malgré les erreurs, du moment qu'elles ne remettent pas en cause son bon fonctionnement. Une erreur grave doit cependant provoquer l'arrêt du service, pour ne pas compromettre l'intégrité du système.
 * Précision : Le modèle de prédiction doit être assez fiable pour prédire correctement un nombre conséquent de films (précision supérieure à 70%).

=Evolutions potentielles du produit=


 * Multi serveurs : Pour être pleinement fonctionnel, le produit devra être déployé sur plusieurs serveurs pour résister à la charge.
 * Basculement sur le nouveau modèle : Une fois le nombre d'utilisateur suffisant, nous pourrons basculer complètement l'apprentissage sur notre modèle "factorisation machine". Ceci permettra d'avoir un unique modèle pour l'ensemble des utilisateurs que nous ne ré-entrainerons qu'une seule fois par jours. L'intérêt est de réduire le nombre de modèles enregistrés sur le serveur de fichiers ainsi que leur mises à jours, permettant ainsi de mieux résister à l'augmentation de la charge utilisateur. L'autre intérêt majeure est que cela augmentera notre précision de prédiction.
 * Amélioration du nouveau modèle : Une fois le modèle mis en place et le nombre de données suffisant, nous pourrons améliorer sa précision en prenant en compte des données utilisateurs ainsi que des données sur les films afin d'affiner notre classification et donc nos prédictions.
 * Distribution de l'apprentissage : Avec le nouveau modèle, l'apprentissage machine va devenir très long car le nombre de données d'entrainement va augmenter exponentiellement avec le nombre d'utilisateurs. La distribution de l'algorithme d'apprentissage prendra donc tout son sens pour maintenir un temps de réponse convenable.

=Appendices=

Systèmes de recommandation

 * music on Spotify with deep learning'''
 * Neural Networks for YouTube Recommendations'''
 * la classification d’opinions à la recommandation'''
 * movies with deep learning'''

Articles sur l'analyse de sentiments

 * des posts sur des réseaux sociaux'''
 * analysis with RNN in Keras'''
 * a CNN for Text Classification in TensorFlow'''

Keras

 * to Python Deep Learning with Keras'''
 * Your First Neural Network in Python With Keras Step-By-Step'''

API TMDB

 * movie data base for developers'''

Django & AngularJS

 * angularJS tutorial'''
 * Material'''

DOC2VEC

 * tutorial'''
 * Analysis Using Doc2Vec'''

Api python - Flask

 * quickstart'''

Grid'5000

 * account'''

Codes sources

 * movies'''
 *